Progetti con microcontrollore |
|
Orologio digitale hh.mm.
Per la realizzazione di questo progetto utilizzeremo il microcontrollore PIC16F84 il quale rappresenta l'elemento di centro gamma dell'ampia famiglia dei Micropic. Questi contiene 1KByte di memoria Flasch riprogrammabile ma potrà essere sostituito con la versione OTP (one time programming). Comonque è completamente compatibile con il PIC16F84A. La piedinatura del microcontrollore è sottoriportata.
Come possiamo vedere questo processore mette a disposizione ben 13 punti di ingresso/uscita riconfigurabile tramite programma ed è predisposto per accettare anche un clock esterno che può arrivare fino a 10 MHz, ma nel nostro progetto lo faremo funzionare a 4MHz comportando una drastica riduzione dell'assorbimento di corrente rendendo possibile una buona autonomia anche con la sola batteria tampone.
La dimensione della memoria disponibile nei modelli di micropic di questa sottofamiglia è nella tabella come anche la frequenza massima applicabile con un clock esterno.
Tecnologia
CMOS Flash/EEPROM:
• Tecnologia a basso consumo e alta velocità.
• Concepito con memoria tutta a ritenzione.
• Ampio campo operativo di tensione:
- Commerciale: 2.0V to 6.0V
- Industriale: 2.0V to 6.0V
• Parametri tipici di dissipazione in potenza:
- < 2 mA tipica a 5V, 4 MHz
- 15 mA tipica a 2V, 32 kHz
- < 1 mA tipica corrente di standby a
2V
La struttura interna è complessa ma di facile utilizzo e comprensione.
Lo schema elettrico è abbastanza standard e semplice infatti il software si fa carico di implementare la maggior parte delle funzionalità. Si è comunque ritenuto opportuno delegare l'Hardware alla decodifica BCD tramite l'integrato CD4511anche se risulta essere un po' vecchiotto. I Display a catodo comune, vengono multiplexati ed attivati in rapida sequenza utilizzando quattro piccoli transistor BC337 pilotati via software, direttamente connessi tramite la resistenza di polarizzazione della base a 4 gates dedicati.
Le resistenze delle basi dei transistors valgono valgono 2200 Ohm ma possono essere ritoccate leggermente verso il basso come anche si possono leggermente abbassare le resistenze di limitazione delle corrente sui segmenti dei display, portandole a 180 Ohm infatti aumenta notevolmente la luminosità.
Il circuito stampato si compone di due parti, la logica di controllo e il display a 4 cifre multiplexato. La connessione tra le due basette avverrà tramite un cavetto flat (ad esempio quello usato negli Hard disck), ma i prototipi potranno essere interconnessi tramite reofori ricavati dal tagli delle resistenze, essi risultano essere sufficientemente robusti e la scheda assume l'aspetto visibile nelle foto presenti in questa pagina. Per la realizzazione sono necessari alcuni ponticelli come chiaramente indicati in figura e ben visibili nel layout dei componenti.
Download file Fidocad, due esemplari basetta 100 x 160
Nella foto non è ancora stato inserito il quarzo e il micropic ma la visione d'insieme è abbastanza completa. Degna di nota e la cavetteria rosso nera che consente il collegamento della batteria tampone da 9V che interviene in caso di black out della normale alimentazione proveniente dalla rete elettrica.
Programmazione assembly del micropic.
;__________________________________________________________
;
; OROLOGIO 24 ORE
; programma per Quarzo da 4MHz
; con quarzo da 3,2768MHz sostituire "07AH" con "064H"
;__________________________________________________________
;
LIST P=16F84A
INCLUDE <P16F84a.INC>
;Definizioni
unimin EQU 0CH ;unità dei minuti (unità)
decmin EQU 0DH ;decine dei minuti (decine)
uniore EQU 0EH ;unità delle ore (centinaia)
decore EQU 0FH ;decine delle ore (migliaia)
conta EQU 10H
dsp EQU 11H ;indica il display attivo
conta2 EQU 12H
goto Inizio
org 4
Interrupts
goto service ;aggiorna i display
movlw 0H
movwf TMR0 ;azzera timer
bcf INTCON,T0IF ;tacina avvenuto interrupts
retfie ;ritorna al punto del programma prima dell'interrupts
service
incf conta,1 ;incrementa contatore ogni 8.2 msec
;abilita display di turno
;ogni display è acceso per 2msec ogni 8msec
btfsc dsp,4 ;controlla se attivo display1
movfw unimin ;se si unimin -> W
btfsc dsp,5
movfw decmin
btfsc dsp,6
movfw uniore
btfsc dsp,7
movfw decore
addwf dsp,0 ;al dato aggiungo info sul display da attivare
movwf PORTB ;accendo display
rrf dsp,1 ;preparo info sul prossimo display
btfsc dsp,3 ;salta se preparo display0
bsf dsp,7 ;preparo ultimo display
movlw B'11110000' ;ripulisco primo nyble
andwf dsp,1
bcf INTCON,T0IF ;riabilita interrupts
retfie
Inizio
movlw 0H ;pone 0 nell'accumulatore
movwf unimin
movwf decmin
movwf uniore
movwf decore
movwf conta
movwf conta2
movwf TMR0 ;azzera Timer0
movwf dsp ;azzera dsp
bsf dsp,7 ;abilitato display4
bsf STATUS,RP0 ;seleziona banco1
movwf TRISB ;porta B tutti d'uscita
movlw B'11010100' ;prescaler (32) at TMR0
movwf OPTION_REG ;
movlw B'00011110' ;RA0 out RA1-RA4 in
movwf TRISA ;configura porta A
bcf STATUS,RP0 ;seleziona banco0
clrf PORTB ;azzera tutte le uscite
bsf INTCON,T0IE ;abilita interrupts del timer
bsf INTCON,GIE ;abilita gli interrupts
ancora
;Programma principale
movlw D'60' ;dopo mezzo secondo...
xorwf conta,0
btfsc STATUS,Z ;non salta se conteggio=60
bcf PORTA,0 ;spengo led
movlw 07AH ;imposta 07AH (oppure 064H)
xorwf conta,0 ;XOR tra W e conta
btfss STATUS,Z ;salta se zero
goto ancora ;ripete ciclo principale
;è passato 1 secondo
bsf PORTA,0 ;accendo led
clrf conta ;azzero conta
goto p1 ;eseguo controllo pulsanti
fatto
incf conta2,1 ;incremento contatore secondi
movlw D'60' ;carico 60
xorwf conta2,0 ;
btfss STATUS,Z ;è passato un minuto
goto ancora
incrementa
bsf PORTA,0 ;accendo led
clrf conta2 ;azzero conta2
incf unimin,1 ;incrementa unità dei minuti
;aggiorno tutte le cifre
movlw 0AH
xorwf unimin,0 ;xor tra w e conta
btfss STATUS,Z ;salta se prima cifra>9
goto ancora
incf decmin,1 ;incrementa decimali dei minuti
clrf unimin ;azzero unità minuti
movlw 06H
xorwf decmin,0
btfss STATUS,Z ;salta se seconda cifra=6
goto ancora
clrf decmin ;azzero decine dei minuti
incore
incf uniore,1 ;incremento unità delle ore
movlw 04H
xorwf uniore,0
btfss STATUS,Z ;salta se terza cifra=4
goto giorno
btfsc decore,1 ;non salta se decine delle ore=2
clrf uniore ;azzera le unità delle ore
btfsc decore,1 ;non salta se sono le 24:00
clrf decore ;azzera le decine delle ore
goto ancora
giorno
movlw 0AH
xorwf uniore,0
btfss STATUS,Z ;salta se terza cifra>9
goto ancora
incf decore,1 ;incrementa le decine delle ore
clrf uniore ;azzera unità delle ore
goto ancora
p1
btfsc PORTA,1 ;è premuto il pulsante min+ ?
goto p2 ;no, controlla gli altri...
goto incrementa ;si, incrementa i minuti
p2
btfsc PORTA,2 ;è premuto il pulsante min- ?
goto p3 ;no, controlla gli altri...
movf unimin,0
btfss STATUS,Z ;se unimin >0 lo decrementa
goto um
movf decmin,0 ;unimin=0 decremento decmin
btfsc STATUS,Z
goto ancora
decf decmin,1
movlw 09H ;decmin=9
movwf unimin
goto ancora
um
decf unimin,1
goto ancora
p3
btfsc PORTA,3 ;è premuto il pulsante ore+ ?
goto p4 ;no, controlla gli altri...
goto incore ;si, incrementa le ore
p4
btfsc PORTA,4 ;è premuto il pulsante ore- ?
goto fatto ;no, ritorna
movf uniore,0
btfss STATUS,Z ;se uniore >0 lo decrementa
goto uo
movf decore,0 ;uniore=0 decremento decore
btfsc STATUS,Z
goto ancora
decf decore,1
movlw 09H ;decmin=9
movwf uniore
goto ancora
uo
decf uniore,1
goto ancora
end
Ecco un'immagine del lavoro finito, acceso e funzionate, la vicinanza con il mio telefonino cellulare vi da un'idea della reale dimensione del tutto. E' davvero compatto e elegante.
Una curiosità: L'ora indicata sul display è quella reale del 23 gennaio 2007, e rappresenta il momento in cui è diventato operativo il primo progetto a microprocessore presentato in questo sito.
In commercio ho trovato questi meravigliosi contenitori plastici che potremmo usare per alloggiare il nostro orologio ed eventualmente trasformarlo in una radiosveglia abbinandolo all'amplificatore di Mr.Funky e al sintonizzatore FM previsto in questo sito. In questo caso il progetto necessita di alcuni ritocchi software che lasciamo al visitatore come utile esercizio. Chiunque volesse proporre delle varianti sia software che hardware sarà il benvenuto e potrà inviarmi schemi e/o sorgenti software all'indirizzo prof.gottardo@tiscali.it La proprietà intelletuale di quanto inviato sarà chiaramente indicata in questo sito.
Orologio a uP, Versione sviluappata con Eagle.
A gennaio 2010 il progetto dell'orologio con microPic è stato sviluppato usando la versione 5.7.0 del cad Eagle. Questo Cad è in grado di produrre PCB professionali anche nella versione free ad uso scolastico con la limitazione a due soli layers e a una dimensione massima di 100 x 160 mm che risulta sufficiente alla produzione di tutti i circuiti presentati in questo sito.
Eagle mette a disposizione un buon sistema di autorouting per lo sbroglio automatico.
Attenzione: Facciamo assieme un esercizio (non scaricate le versioni successive per produrle, mancano piste, la versione corretta è a fine pagine)
Procediamo alla riprogettazione dell'orologio a uP, inserendo volontariamente delle dimenticanze (piste mancanti). L'allievo dovrà identificare gli errori nel PCB e tentare di correggerli. Una volta finita la correzione potrà scaricare dai link sottostanti la versione finale corretta e confrontare i risultati.
N.B. Chi è invece interessato a scaricare i file finali per realizzare il circuito si assicuri di scaricare dai link coretti evitando quelli con chiaramente indicato "piste mancanti per esercizio".
Una volta che sia stato disegnato lo schema si dovrà cliccare sul tasto board che presenterà la tutti i componenti collegati tramite dei conduttori "VOLANTI" ed "ELASTICI" che verranno confermati dall'autorouting una volta dato il comando di sbroglio.
Si dovrà prima posizionare i componenti nell'ingombro del PCB prima di dare il comando di autorouting. di ottiene quello che è mostrato nella prossima figura.
nella prossima immagine vediamo lo sbroglio eseguito con l'algoritmo interno di autorouting, si nota che il risultato ottenuto in automatica, pur funzionando,necessita di ritocchi e migliorie manuali. in modo particolare si nota che le piste vengono inserite nello spazio previsto per la fresatura che separa la mainboard (contiene il processore,) e il display. In questo caso la separazione sarebbe impossibile. Pubblico il progetto a questo punto dello sbroglio perchè potrebbe essere un utilissimo esercizio didattico. procediamo così: 1) allontaniamo leggermente il display dalla mainboard. 2) ritracciamo le piste che sbordano rispetto ai due streep dei cavi flat in modo che non invadano la zona proibita centrale riservata alla fresatura di separazione.
Ecco la soluzione dell'esercizio di sbroglio e ingrossamento delle piste. Il display è stato alzato di un paio di millimetri e si è creato lo spazio per la fresatura che consente di staccare il display dalla scheda madre.
piste nel lato componenti layer Top
Piste nel lato saldature
Complessivo delle piste lato saldature e lato componenti.
Download del progetto completo (non ottimizzato per panelizzazione) (attenzione:piste mancanti per fare esercizio CAD)
L'ottimizzazione per la pannellizzazione si ottiene riducendo al massimo l'ingombro nel PCB il che comporta un notevole abbassamento dei costi di produzione. L'idea di base è quella di separare completamente l'area display dalla scheda madre ed eliminare completamente ogni spazio libero nel lato componenti. si potrà addirittura togliere i pulsanti di setup dalla scheda a montarli sul pannello frontale. Per ogni mezzo metro quadrato di laminato otterremo molti esemplari di PCB in più aumentando notevolmente la convenienza.
scarica l'immagine del PCB del display
scarica i file Eagle del PCB del solo display ver. settembre 2010 con gerber
scarica i file Eagle del PCB della mainboard (attenzione:piste mancanti per fare esercizio CAD)
Download dei file costruttivi (gerber) del display (contiene anche file Eagle ver settembre 2010)
Download dei file costruttivi (gerber) della mainboard (contiene anche file Eagle)
Fino a qua sembra tutto OK, ma all'occhio attento non può essere sfuggito che, innanzitutto il circuito integrato CD4511 non è alimentato, mancano letteralmente le piste che portano Vdd e Vss al pin 16 e al pin 8 rispettivamente. Il problema si risolve premendo il tasto "INVOKE" sulla colonna dei comandi posti sulla sinistra dello schermo. Vedi immagine sottostante:
Successivamente clicchiamo, nella pagina dello schema, sopra al CD4511, ed ecco comparire finalmente i PIN 16 e 8 a cui vanno collegati Vdd e Vss overo i +5V e la massa.
Notiamo però che nel CD4511 ci sono altri 2 piedini non connessi, e trovare questo difetto nello schema risulta un pò arduo per il principiante. Procediamo sfruttando le proprietà dei fili elastici, ovvero delle connessioni volanti. Con il mouse afferiamo tutti i componenti uno alla volta e spostiamoli leggermente dalla loro posizione. Se sono ben ancorati dovremmo vedere che tutti i fili si trascinano nel movimento, ma questo non avverrà nel caso dei pin 1 e 2 che sono graficamente sovrapposti ma non elettricamente connessi. CHE CI SERVA DA LEZIONE, CONTROLLARE SEMPRE CHE TUTTI I FILI SIANO BEN ANCORATI.
Ripetiamo la medesima operazione per il PIC e ci accorgeremo che anche lui ha due false connessioni che si riassumono in piste mancanti. Si tratta dei pin 7 e 8.
A questo punto il circuito può funzionare ma è bene effettuare alcune migliorie ad esempio sulle serigrafie. Se osserviamo bene le resistenze sembrano essere marchiate con il numero di quella affianco, e questo può comportare errori di assemblaggio. Il problema si risolve agendo sul tasto "info" indicato con " i " sempre sulla colonna di sinistra rispetto all'area di disegno.
A questo punto clicchiamo sul componente di cui siamo interessati di modificare o spostare la serigrafia, come ad esempio una resistenza, ci comparirà il sottostante box di dialogo:
Andiamo quindi a spuntare la voce smashed (come in figura) e vedremo comparire affianco ad ogni pezzo del componente una piccola crocetta di presa che ci permetterà di agganciarla con il mouse per effettuare ad esempio la rotazione della scritta (usare il tasto destro) oppure di cambiare il layer, le misure la posizione ecc. Possiamo ad esempio identificare che i nomi dei componenti si trovano nel layer numero 25, e possiamo sfruttare questa informazione per crearci le scritte del Logo aziendale da serigrafare sul lato componenti del nostro PCB.
Facciamo anche attenzione a verificare che il punto decimale nel PCB che riguarda il display si trovi nella posizione corretta, ovvero nel secondo digit a partire da sinistra.
Una volta effettuate tutte queste modifiche allora procediamo alla realizzazione dei gerber e all'eventuale invio alla fabbrica cinse per la realizzazione pratica. nel caso fossimi interessati a questa operazione preleviamo i gerber corretti da qua -> http://www.gtronic.it/energiaingioco/it/scienza/PCB_Professionali.html
Fine dell'esercizio.
Versione corretta e definitiva dell'orologio a uP sviluppata in Eagle.
Gli schemi elettrici riveduti e corretti sono presentati nelle foto seguenti seguenti. Il display a 4 digit e la mainboard sono sviluppati su due fogli separati. Ricordiamoci che i pulsanti hanno i seguenti significati:
S1 -> H-
S2 -> H+
S3 -> M-
S4 -> M+
Al PAD1e al PAD2 potrà essere collegata una eventuale batteria tampone che sosterrà l'ora anche in caso di mancanza della tensione di rete, mentre i due diodi ci proteggono da una fortuita inserzione rovescia di questa batteria. Per quanto riguarda il punto decimale dovrà essere connesso al transistor collegato al pin 12 del PIC e quindi al display numero 3 dato che la numerazione dei digit procede da destra (digit 1) verso sinistra (digit 4). dallo schema notiamo che il pin 12 risulta collegato al transistor Q3 a sua volta collegato al PIN 9 del connettore streep. Da qui partiamo con un cavo flat per ancorarci nella medesimo posizione del PCB lato diplay. RA0 porta il segnale lampeggiante verso il punto decimale del display 3, e corrisponde al 12.
I file sottostanti sono completi e possono essere utilizzati per produrre il circuito.
download dei file Eagle della mainboard completa versione finale
download dei file costruttivi gerber della mainboard versione finale
Nella foto possiamo notare che nessun pin è rimasto scollegato e che le serigrafie sono tutte ben chiare, leggibili e ben riferite ad un componente. rispetto alle versioni da studio precedenti in questa compare la serigrafia del logo aziendale oltre alle serigrafie di funzionalità dei quattro tasti, il nome del progetto e la versione. Un buon progettista dovrebbe sempre prevedere queste cose. Il PCB è davvero molto compatto, scheda madre infatti misura solo 50mm x 42mm, e riduce drasticamente gli ingombri rispetto alla versione Fidocad che misurava quasi 80mm x 70mm.
Aspetto della versione professionale, sono disponibili alcuni esemplari a magazzino, se ne volete qualcuno ve lo posso inviare tramite posta in cambio del solo costo sostenuto per costruirlo e le spese di spedizione. A richiesta posso anche fornire il microcontrollore 16F84 contenete il firmware di base dell'orologio 24 ore, con puntino lampeggiante e acquisizione dei 4 pulsanti aumenta e diminuisce ore e minuti per la regolazione dell'ora esatta. Gli interessati mi possono contattare all'indirizzo ad.noctis@gmail.com allegando nella mail anche il link di questa pagina. Il supporto per 4 digiti a sette segmenti non è al momento disponibile quindi lo dovrete realizzare su millefori.
Chi fosse interessato a una piccola serie di questo progetto, ad esempio 100 o 200 esemplari si può rivolgere a Sandy che vi aiuterà facendovoi da interprete nell'ordinazione presso la fabbrica cinese dove ho commissionato la presente campionatura. In questo caso vi consiglio di ordinare anche il supporto del display che potete vedere nelle righe successive.
La mail per contattare Sandy è: bonzisandy88@hotmail.com
Nella successiva immagine vediamo il display e l'ambiente di lavoro del Cad Eagle con cui è stato sviluppato.
download dei file Eagle del display versione finale
download dei file costruttivi gerber del display versione finale
Applicazioni suggerite.
Questo bellissimo progetto si presta a tantissime applicazioni. Potrà essere tenuto nudo e crudo a titolo di ricordo della propria attività scolastica, oppure inseriro in cruscotti di autovetture, adattato al funzionamento come radiosveglia, applicato come tuning allo scoter o alla bicicletta. Potremmo inserirlo in uno degli slot liberi del PC forando opportunamente la mascherina di plastica pensando ad esempio a quella ormai sempre libera destinata ai vecchi lettori floppy. Nel caso di inserimento nel PC potremmo ad esempio usarlo come conta ora di funzionamento del computer (partirà da 00:00 ogni volta che accendiamo la macchina) oppure come sempre orologio se prevediamo la batteria tampone. Nel caso di utilizzo all'interno del PC si ricorda che il filo giallo è il +12V e il filo rosso il +5V. potremmo usare indifferentemente uno o l'altro a seconda che bypassiamo o no il regolatore di tensione uA7805.
Fasi costruttive di alcuni esemplari.
Nelle foto seguenti vediamo alcune fasi della costruzione degli orologi presso i laboratori della scuola di Schio (VI) e altri luoghi. Questo è un progetto tutto sommato di costo contenuto quindi risulta un ottimo esercizio per le scuole superiori e per tutti quei corsi sia di formazione che hobbistici in cui non si possa impegnare troppo denaro. E' un ottimo approccio alle prime esperienze con il microprocessore. L'utilità del prodotto finale fa anche si che si faccia volentieri un piccolo investimento per potersi tenere in casa per sempre un ricordo delle prime esperienze in questo ambito professionale.
assemblaggio del telecomando a 4 tasti dell'orologio
Visione di insieme della scheda Display agganciata estendendo il bus alla mainboard
Collaudo dll'orologio, usando i 4 tasti tasti del telecomando Hudo posiziona il suo orologio alle ore 6 e 10.
scarica il filmato del collaudo dell'orologio a microprocessore costruito da Hudu
Simone (a sinistra) collabora con il suo compagno in una fase critica dell'assemblaggio.
fissaggio dei morsetti di alimentazione.
Alcuni allievi della classe prima elettrici del CFP di Schio mostrano con orgoglio i loro lavori.
Feedback da internet.
Pubblico alcuni esemplari del mio progetto realizzati da utenti del sito. Chiunque avesse realizzato l'orologio, o altri progetti della "G-Tronic Robotics", (nome con cui mi presento al pubblico) può inviarmi le foto e se lo desidera anche un piccolo articolo di commento o suggerimenti tecnici. Molto gradite saranno le spiegazioni delle fasi della propria costruzione.
"AlanFord" utente del sito http:\\www.grix.it ha realizzato l'orologio su mille fori.
Il circuito funziona, ma lamenta un flickeramento del display. Ho suggerito ad AlanFord alcuni ritocchi tecnici e sto aspettando che si meta in contatto dicendomi di aver stabilizzato il refresch dei digit a sette segmenti. Comunque un applauso ad AlanFord che per primo ha inviato un lavoro eseguito da una non ben precisata città dopo aver trovato il progetto in internet.
Aspettiamo che altri utenti ci inviino le proprie realizzazioni invitandoli a partecipare alla pubblicazione con note tecniche e articolino di corredo.