16F684 telecomando RF decodificatore necessità somehelp

T

tohbas

Guest
utilizzare i 16F684 da telecomando RF decoder
di norma, ci sono un sacco di rumore da out out del modulo RF decoder

necessità di individuare i 28 bit di codice con la larghezza di impulso 250-300 uSec

dopo aver rilevato i trasmettere la necessità di inviare a un altro

Io uso questa 684 come un impulso fillter ...

il mio problema,
1.16F684 non può dectect segnale in prima volte ho bisogno di premere a distanza di due o albero volte

2.i se i dont uso "goto 0x0000" il mio 16F684 sempre "matassa"

3.per "goto test" Credo che dovrebbe inviare impulsi di sempre, ma isnt!
che inviare una sola volta e inviare solo se ci sono un cambiamento interrompere

perché?e l'ultimo è ...Ho impostato il suo oscillatore da 8 MHz sua media per 1 istruction è necessario

1 / (8Mhz / 4) = 0,5 uSec ma io cerco di fareBSF PORTC, 2
bcf PORTC, 2
BSF PORTC, 2
bcf PORTC, 2

Ho avuto un impulso con impulsi di larghezza 0.16uSec ...ciò che non va?Io cerco di CPU 3, ma gli stessi risultatilist p = 16F684
# include <p16F684.inc>__CONFIG 0x34c4FSR_temp equ 0XA0

counter equ 0xBA
ii equ 0xbb
bit_bufferP equ 0xbc
bit_buffer equ 0xbd
timeH equ 0xbe
timeL equ 0xbf
status_temp equ 0x7E
w_temp equ 0x7fbank0 macro
movlw 0x1f
Status andwf, F
endm
bank1 macro
bcf STATUS, GIV
bcf STATUS, RP1
BSF STATUS, RP0
endmorg 0x0000
clrf INTCON
clrf PCLATH; garantire pagina bit sono liquidati
goto inizioorg 0x0004
goto interrupts_vector

inizio

;================================================= =============
; == Subrutine iniziale di tutti i porti e somefunction ===========
;================================================= =============
; iniziale 16F684
banksel Ansel
clrf Ansel; tutti i perni sono analogico digitale
banksel CMCON0
movlw 0x07
movwf CMCON0; off confronto
banksel WPUA
clrf WPUA; disabilitare pull up
banksel OPTION_REG
bcf OPTION_REG, 7; disabilitare tirare fino a PORTA

banksel Trisa
movlw b'00111111 '; RA5 come input RA0 i / p di confronto
movwf Trisa

; setup_interrupt_on_change su Trisa PORTA controllare il setup PORT
BSF INTCON, RAIE; interrompere sul cambiamento
banksel IOCA
movlw 0x01
movwf IOCA; consentire RA5 interrompere sul cambiamento

; impostazione porta C
banksel TRISC; analogico I / P RA2 = C2OUT RC0 = C2IN , RC4 = C1OUT RA0 = C1IN
movlw b'00000000 '; RC5 è un input per disabilitare decoder
movwf TRISC
banksel PORTC
movlw 0xff
movwf PORTC

; setup_timer1
banksel CMCON1; config T1G come comparatore O / P
clrf CMCON1

banksel T1CON
movlw 0x04
movwf T1CON; 1:1 prescale

banksel PIE1
bcf PIE1, TMR1IE

; setup oscillatore interno
banksel OSCTUNE
movlw 0x0F
movwf OSCTUNE
banksel OSCCON
movlw 0x75
movwf OSCCON; uso di clock di 8 MHz

BSF INTCON, 7
BSF INTCON, 6
goto principale
;///////////////////////////////////////////////// /////////////principale

movlw 0x27
movwf FSR; impostare l'indirizzo
banksel counter
clrf counter
banksel T1CON
BSF T1CON, TMR1ON

wait_signal
movf FSR, F
skpz
goto wait_signal;================================================= ==========
;=========== Giunto il momento di inviare i dati avanti ===================
;================================================= ===========
verifica
;///////////////////////////////////////////////// //////////
bcf INTCON, RAIE; disabilitare interrompere sul cambiamento
bcf INTCON, GIE; disabilitare tutti gli interrupt
bcf INTCON, PEIE
banksel T1CON
bcf T1CON, TMR1ON; fermata timer1
;///////////////////////////////////////////////// ////////

banksel TMR1H
clrf TMR1H
clrf TMR1L
chiamata ritardo

;================================================= =====
; ======= Tempo per inviare i dati =======================
;================================================= =======
send_data
movlw 0x27
movwf FSR; dati

send_out
movf INDF, W
banksel PORTC
movwf PORTC

incf FSR, F; indice timeL
chiamata check_RAM_address
movf INDF, W
sublw 0xff; 0xff - W => W
banksel TMR1L
movwf TMR1Lincf FSR, F; indice timeH indirizzo
chiamata check_RAM_address
movf INDF, W
sublw 0xff; 0xff - W => W
banksel TMR1H
movwf TMR1H

chiamata ritardo
incf FSR, F; indice prossima dati
chiamata check_RAM_addressdecf counter, F
skpz
goto send_out

(!vai al test!)goto 0x0000
;================================================= ==========;================================================= ===========
;===================== ritardo =========================== ======
;======= TMR1H e TMR1L bisogno di essere settato prima chiamata ====
;======= Questa subroutine =======================
;================================================= ===========
ritardo

banksel PIE1
BSF PIE1, TMR1IE; consentire timer1 interrompere

BSF INTCON, PEIE
BSF INTCON, GIE
banksel T1CON
BSF T1CON, TMR1ON; inizio timer1

banksel ii
movlw 0xff
movwf ii
wait_delay; attendere timer1 INT
banksel ii; untilll ii == 0x00 clrf da timer1_INT
movf ii, F
skpz
goto wait_delay; attendere timer1 INT

banksel T1CON
bcf T1CON, TMR1ON; fermata timer1
banksel PIE1
bcf PIE1, TMR1IE; disattivare timer1 interrompere
bcf INTCON, GIE
bcf INTCON, PEIE
ritorno

;================================================= ===========
;===================== Fine ritardo ========================== =======
;================================================= ===========;================================================= ===================
;========== Interrupt routine servizio rivelatore ===================
;========== Dectect la causa di interrompere ==============
;================================================= =================
interrupts_vector

movwf w_temp
swapf STATUS, W
clrf STATUS
movwf status_temp; conservare i dati sullo status reg.

btfsc INTCON, Raif; interrupt è la più importante
chiamata RA_INT

banksel PIR1
btfsc PIR1, TMR1IF; interrupt è la più importante
chiamata TMR1_INT

bcf STATUS, Z; per skpz nel ciclo principale

swapf status_temp, W
movwf STATUS; ritorno dati sulla w registor
swapf w_temp, F
swapf w_temp, W

BSF INTCON, PEIE

retfie
;///////////////////////////////////////////////// ////////////TMR1_INT

banksel PIR1
bcf PIR1, TMR1IF
banksel ii
clrf ii
ritorno;================================================= =================
; ===== Interrompere il cambiamento di porto RA5 è utilizzato per essere inserito ========
;================================================= =================
RA_INT
banksel PORTA
movf PORTA, F; cancle mismath condizione
bcf INTCON, Raif; chiaro interrompere bandiera causati da RA5

; mantenere precedente status di RA5
banksel bit_bufferP
movf bit_bufferP, W
banksel bit_buffer
movwf bit_buffer

banksel PORTA
movf PORTA, W; cancle mismath condizione

banksel bit_bufferP
movwf bit_bufferP
comf bit_bufferP, F; inversione

; letto alla rovescia
banksel TMR1H
movf TMR1H, W
banksel timeH
movwf timeH

banksel TMR1L
movf TMR1L, W
banksel timeL
movwf timeL

; chiaro timer
banksel TMR1H
clrf TMR1H
clrf TMR1L

; verificare tempo inferiore limitata
movlw 0x05, 0x04 163,84 noi 0x05 = 254 uSec
banksel timeH
BSF STATUS, C
subwf timeH, W
btfss STATUS, C
vai al rumore; tempo inferiore a 163,84 noi è il rumore
; verificare tempo superiore limitata
; TimeH_more_than_163uS
movlw 0x09; 0x1500 = 900uS 0x0fff = 3840 * 0,16 = 614 ci
banksel timeH
BSF STATUS, C
subwf timeH, W
btfss STATUS, C
goto keep_bit1; tempo pari o superiore a 600 ci; verificare tempo inferiore limitata
movlw 0x0b; 0x04 163,84 noi 0x05 = 254 uSec
banksel timeH
BSF STATUS, C
subwf timeH, W
btfss STATUS, C
vai al rumore; meno tempo limitato
timeH_more_than_163uS
movlw 0x12; 0x1500 = 900uS 0x0fff = 3840 * 0,16 = 614 ci
banksel timeH
BSF STATUS, C
subwf timeH, W
btfss STATUS, C
goto keep_bit2; tempo pari o superiore a 600 ci
vai al rumorekeep_bit2; contare 2 bit
banksel counter
incf counter, Fkeep_bit1; contare 1 bit
banksel counter
incf counter, F

banksel bit_buffer
movf bit_buffer, W
movwf INDF; conservare i dati

incf FSR, F
chiamata check_RAM_address

banksel timeL
movf timeL, W
movwf INDF; mantenere timeL

incf FSR, F
chiamata check_RAM_address
banksel timeH
movf timeH, W
movwf INDF; mantenere timeH

incf FSR, F; dati per la prossima
chiamata check_RAM_address
ritorno

; Ariete cambiare indirizzo
check_RAM_address
BSF STATUS, C
movlw 0xBA
subwf FSR, W
btfsc STATUS, C
goto 0x0000
movlw 0x7d
subwf FSR, W
skpz
ritorno
movlw 0XA0
movwf FSR
ritorno

rumore

movlw 0x18; dati = da 26 a 27 bit
banksel counter
BSF STATUS, C
subwf contatore, W
btfss STATUS, C
goto re_count
; Ha dati
movlw 0x00
movwf FSR
ritorno

re_count

goto 0x0000
;================================================= ============
fine

 

Welcome to EDABoard.com

Sponsor

Back
Top