Sto cercando di realizzare un circuito con un PIC16f84, che mi chiuda il tetto apribile dell'auto quando gli arrivi un determinato segnale.
Praticamente l'auto ha una funzione (funzione comfort), quando tengo premuto a lungo il tasto del telecomando, il computer di bordo manda un determinato segnale ai motorini degli alzavetri, i quali capiscono che devono alzarsi o abbassarsi.
La mia idea è di intercettare questi segnali, e tramite un pic16f84a opportunamente programmato, azionare dei relè collegati al tasto di apertura e chiusura del tetto.
I segnali sono riuscito a leggerli è sono questi tre:
Apre

Chiude

E Stop Apre e Chiude

Mentre lo schema del circuito è questo:

Con il mio circuito i segnali vengono invertiti, quindi quando in ingresso ci sono 12 V al pin RA2 c'è 0, quando in ingresso c'è 0 sul pin ci sono 5V; in questo modo i tre segnali sono:
Apre: in standby c'è sempre 0, arriva un impusto a 5V per 135-136 ms, poi 0 per 90 ms, 5V per 90 ms, e torna in standby a 0
Chiude: in standby 0, arriva un impulso a 5v per 135-136 ms e torna in standby a 0
Stop: in standby 0, arriva un impulso a 5V per 60-61 ms e torna in standby a 0
Per semplificare le cose non farò casò alle temporizzazioni dei segnali che mi arrivano.
In definitiva, in condizioni di riposo possono arrivare solo due tipi di segnale, apre o chiude, che tradotti in bit sono 101 o 1;
mentre durante l'esecuzione delle funzioni, può arrivare solo il segnale di stop, che sarebbe 1.
Quindi o pensato di fare così:
Il PIC è in attesa di ricevere qualcosa, finquando sul pin RA2 c'è sempre 0 ricomincia;
succede qualcosa, sul pin RA2 arriva 1, attende che torna a 0;
Adesso, per capire se è un impulso apre o chiude, devo continuare a verificare il pin RA2 per altri 90 ms (meglio 100);
se arriva un altro impulso a 1, vuol dire che è "apre", quindi attende che torni a 0 e va a svolgere una funzione;
se non arriva niente, vuol dire che è "chiude", quindi va a svolgere un'altra funzione.
Nelle due funzioni da svolgere, devo continuare a monitorare il pin RA2 in attesa del segnale di stop, in questo caso 1,
quando l'ho ricevuto fermo tutto e torno al punto di partenza.
Questo è il codice che ho scritto fino adesso.
- Codice: Seleziona tutto
list p=16f84a, f=inhx8m
port_A equ 5
port_B equ 6
cont1 equ 0ch
cont2 equ 0dh
org 0
movlw 11h
tris port_A ;Porta A tutti ingressi
movlw 20h
tris port_B ;Porta B 0 1 2 3 4 6 7 uscite 5 ingresso
movlw 00h
movwf port_B ;Azzera Porta B
inizio: btfss port_A,2 ;Controlla RA2 salta se 1
goto inizio ;Torna all'inizio se 0
goto attendi ;Attendi che ritorni a 0
attendi: btfss port_A,2 ;Controlla RA2 salta se 1
goto riconosci ;Vai alla funzione per riconoscere apre chiude
goto attendi ;c'è ancora 1 continua ad attendere che torni a 0
riconosci: movlw 100
movwf cont2 ;metti 100 cont2
loop1: movlw 200
movwf cont1 ;metti 200 cont1
loop2: decfsz cont1,1 ;decrementa cont1 salta se 0
goto verifica1 ;se 0 vai a verifica1
decfsz cont2,1 ;decrementa cont2 salta se 0
goto verifica2 ;se 0 vai a verifica2
goto chiude ;vai alla funzione chiude
verifica1: btfss port_A,2 ;Controlla RA2 salta se 1
goto loop2 ;ritorna a loop2
goto attendi2 ;attendi che torna a 0, funzione apri
verifica2: btfss port_A,2 ;Controlla RA2 salta se 1
goto loop1 ;ritorna a loop1
goto attendi2 ;attendi che torna a 0, funzione apri
attendi2: btfss port_A,2 ;Controlla RA2 salta se 1
goto apre ;Vai alla funzione apre
goto attendi2 ;c'è ancora 1 continua ad attendere che torni a 0
apre: .....
goto inizio
chiude: .....
goto inizio
end
Si può migliorare?
Purtroppo sono un po' arrugginito, la parte che riguarda il loop, dai conti che ho fatto dovrebbe ripetersi per 120800us con un quarzo da 4Mhz, giusto?
Praticamente sono 6 cicli di clock per il loop2 ripeturi 200 volte, ripetuti in un altro loop1 di 8 cicli per 100 volte;
(6x200=1200)x100=120000 cicli + (8x100)= 120800 cicli di clock = 120800us = 120,8 ms
Credo di aver scritto tutto correttamente finora, potete confermarlo?
Se quello che ho scritto va bene, posso continuare a scrivere le funzioni apre e chiude.
Vi ringrazio immensamente
ciao, matteosr

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



