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.

download schema elettrico

download datasheet SN74LS48

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.

download la cartella del progetto Eagle con display splittato (PCB unico) (attenzione:piste mancanti per fare esercizio CAD)

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:

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.

 

 

  Pagina precedente