Crea sito
Stampa

Nuovo Timer a 8 Uscite Programmabili Con Pic 18F4620 By Primok_V

Scritto da Primok_V. Postato in Cat_Pic

Valutazione attuale:  / 6
ScarsoOttimo 



timer




Il circuito che vi propongo è un timer programmabile a 8 uscite.La scelta del pic è ricaduta sul 18F4620 poichè il firmware ha bisogno di una certa quantità di memoria che è insufficiente nei pic di serie 16F.Prima di passare alla descrizione del circuito analizziamo il circuito elettrico.Continua...



Timer 8 canali

 

                                                               Pulsanti


I 2 circuiti integrati usati per questo progetto sono il già citato PIC18F4620 indicato nello schema con IC1 e il DS1307 64 x 8, Serial, I2C Real-Time Clock indicato con U2.Alle uscite sono collegati, per semplicità, 8 led ma ovviamente si possono usare relé,fotoaccopiatori ecc..

                                                             Descrizione

Passiamo ora alla descrizione vera e propria.Nel circuito elettrico si nota che per le 8 uscite è stata scelta la porta D. Una parte della porta C invece gestisce il display a 4 righe mentre gli ingressi B0,B1,B4,B5,B6,B7 della porta B, sono utilizzati per settare l'ora,i timer, cambiare pagina e per scegliere la funzione da gestire che può essere il cambio dello stato dei timer( accenderli o spegnerli) o l'impostazione per il loro intervento ( ora di attivazione ed ora di spegnimento). In pratica si può disattivare il timer, semplicemente impostando "Off " sul display attraverso il pulsante P4. Ciò avviene solo quando si è scelta la funzione select_state_timer selezionabile con il pulsante P1.Facciamo un pò di chiarezza.

 

Fornendo alimentazione al circuito comparirà ,una sola volta, il messaggio seguente: "Timer a 8 Uscite Programmabili By Primok Bologna 2011.. PIC 18F4620..." Successivamente comparirà la prima pagina con l'ora , la data e i tempi d'intervento per l'uscita 1 e che sono indicati con T1_On e T1_Off rispettivamente per l'accensione e lo spegnimento.Per cambiare pagina è sufficiente premere il pulsante P4 increases (+) come evidenziato nel disegno elettrico dei pulsanti.Con P4 si avanza di pagina , mentre con P3 si torna indietro.Le pagine sono in tutto 5.Se dalla prima pagina si preme il pulsante P1,si passa dalla modalità di impostazione dei Timer a quella che permette di controllare lo stato dei timer per attivarli oppure no.
 
Per cambiare l'ora , la data oppure i tempi d'intervento del Timer1, dobbiamo passare alla pagina 1 che è quella iniziale.Per impostare i tempi d'intervento, regolare l'ora o la data, è necessario premere il pulsante P2.In seguito al rilascio di questo pulsante, sul display comparirà il messaggio "set" ad indicare che sono attivati i pulsanti Shift_left e Shift_Right che sono rispettivamente i pulsanti P5 e P6. Dopo che è comparso il messaggio "set", sono attivi P5 e P6 ma non ancora P3 e P4 rispettivamente decremento (-) e incremento (+).Premendo P5 dopo il messaggio "set" cominceranno a lampeggiare i secondi, da questo momento saranno attivi anche P3 e P4 che consentiranno di diminuire o aumentare i secondi. Avanzando di una posizione, con una pressione successiva di shift_left, lampeggeranno i minuti .Se siamo sulle ore lampeggianti ,dopo tre pressioni consecutive del pulsante P4, e si preme il pulsante shift_right P3, ci sposteremo di una posizione a destra e lampeggeranno così i minuti. Per impostare i timer 2,3,4,5,6,7,8 dobbiamo cambiare pagina ma per farlo dobbiamo uscire dalla modalità "set".Per far ciò è sufficiente ripremere P2 ed aspettare il suo rilascio.Dalla prima pagina sono attivi P3 e P4 per avanzare di pagina e tornare indietro.Per impostare i tempi d'intervento di tutte le pagine restanti , l'operazione è sempre la stessa, "set" ,shift_left , + o - ecc...Per disattivare lo stato di un timer ( mantenendo inalterati i tempi d'intervento) , bisogna premere P1 dalla prima pagina.Si passerà così nella modalità "Stato dei Timer" dove sarà possibile modificare gli stati dopo aver attivato la funzione corrispondente.Da questa pagina , infatti, premendo P2 , comparirà il messaggio "state" ad indicare che sono attivi i pulsanti shift_left e shift_right.In questo caso, dopo la comparsa del messaggio "state" e dopo shift_left, per cambiare lo stato del timer selezionato sarà sufficiente agire solo sul pulsante P4 ( + ) sia per attivare che per disattivare .Il led D10 lampeggia ad 1Hz ad indicare il corretto funzionamento dell'oscillatore interno del DS1307.I tempi d'intervento dei timer sono memorizzati nella eeprom interna al pic , ciò permette di mantenere i dati anche quando succede un black out.Se ad esempio si è impostato il timer1 con range pari a T1_On =13:20:45 , T1_Off =20:30:15 e si ha un black out alle ore 14:00:00, quando la corrente "ritornerà" e l'ora corrente cadrà all'interno del range impostato,allora l'uscita corrispondente ( D0 ) si attiverà di nuovo poichè i dati restano memorizzati nella eeprom.Nel codice sorgente sono implementate le seguenti funzioni principali:
 
void blink_date( );
void visualizza_dati(int a,int b,int c,int d,int sel);
void lamp_or_display_timer(int lamp_t);
void lettura_data_ora();
byte Incrementa_ora_data(byte & dgma,int l,int h);
byte decrementa_ora_data(byte & dgma);
void incrementa_decrementa(int scelta);
void setta_ora_data(int a,int b,int c,int giorno,int mese,int anno);
int32 calcola_sec(int hc,int mc,int sc);
void Update_Timers();
 
Brevemente, i dati contenuti nei registri all'interno dell'integrato DS1307 vengono letti ad intervalli regolari e memorizzati in delle variabili temporanee.Da queste, si calcola il valore complessivo Tc in secondi.Ad esempio alle ore 23:00:00 Tc varrà 23*3600=82800 ,questo valore verrà poi confrontato con il T_On di ogni timer e se sarà uguale, attiverà l'uscita corrispondente.Ovviamente durante le fasi d'impostazione , verranno aggiornati i dati con delle opreazioni di scrittura sia nel DS1307 che nella eeprom a secondo che le impostazioni riguardino l'ora o data dell'orologio o i tempi d'intervento dei Timer.
 
Lo spegnimento avverrà quando Tc sarà uguale o maggiore di T_Off.Il codice gestisce anche le impostazioni a "cavallo" della mezzanotte.Se cioè T_On=22:00:00 e T_Off=14:00:00 allora l'uscita sarà attivata alle 22 e disattivata alle 14 del giorno successivo.
 
Due video dimostrativi

VIDEO1 

VIDEO2 

FIRMWARE

Per chi intende simulare con Proteus, dovrà usare questo firmware che è identico al firmware precendente ma con la frequenza di lettura dei dati del DS1307 più bassa, per non caricare troppo la CPU del PC e quindi evitare blocchi dello stesso.

FIRMWARE2 

Il circuito da realizzare è questo:



 

 

Credo che non ci sia altro da aggiungere.Sono comunque a vostra disposizione per le vostre domande.Buona realizzazione.

Saluti

Primok_V

 

 

Commenti   

 
-1 # Primok_V 2012-12-12 13:11
Uso generalmente il compilatore CCS ( come per questo progetto).
Direi qualsiasi carico, a condizione di mettere un filtro per i disturbi e che i contatti reggano la corrente che questo assorbe.
Saluti
Primok_V
Rispondi | Rispondi con citazione | Citazione
 
 
0 # salvatore 2014-10-18 10:50
salve, ho realizzato il vostro progetto,primok timer 8 uscite,
vi volevo chiedere, che non riesco a programmare
il pic18f4620 , con il FIRMWARE mi da sempre errore nella verifica. mi potete aiutare grazie
Rispondi | Rispondi con citazione | Citazione
 
 
0 # antonio 2015-08-16 08:40
buona giornata
Cortesemente se è possibile avere qualche informazione a riguardo del display,
il LM044L non lo trovo, e possibile usare questo
http://www.tme.eu/it/Document/95e77f34183b7808a84d7b5f81e82443/dem20485syh.pdf
saluti
franco
Rispondi | Rispondi con citazione | Citazione
 
 
0 # Primok_V 2015-08-30 11:44
Citazione antonio:
buona giornata
Cortesemente se è possibile avere qualche informazione a riguardo del display,
il LM044L non lo trovo, e possibile usare questo
http://www.tme.eu/it/Document
/95e77f34183b7808a84d7b5f81e82443/dem20485syh.pdf
saluti
franco


Ho risposto alla tua mail.Il display in tuo possesso lo puoi usare tranquillamente devi solo collegare il il pin 15 al - e il pin16 al +.Nel mio, cioè questo:

http://it.rs-online.com/web/p/display-monocromatici-lcd/5326818/

i pin citati sono invertiti.

Primok :lol:
Rispondi | Rispondi con citazione | Citazione
 

Aggiungi commento


Codice di sicurezza
Aggiorna

privacy



Messages