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

Stampa
( 2 Votes ) 
Valutazione attuale:  / 2
ScarsoOttimo 
Categoria: Elettronica
Data pubblicazione
Scritto da Primok_V Visite: 6236

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

Bologna 14 Agosto 2011.

Dopo la mia prima pubblicazione, che risale a  circa 4 anni fa sul sito grix e coincidenza al mese di Agosto del 2007, vi propongo un circuito simile ma con 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.

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

Pulsanti

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

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.

Un video dimostrativo

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:

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

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

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

Credo che non ci sia altro da aggiungere.Sono comunque a vostra disposizione per le vostre domande.Buona realizzazione.Le seguenti immagini dovrebbero chiarire la filosofia di questo progetto.

 

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

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

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

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

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

 

SALUTI

PRIMOK_V

Joomla 1.7 Templates designed by College Jacke