PIC 16F84A e LED: un facile progettino March 24, 2007
Posted by Igor , trackback , send to friendQualche tempo fa ho fatto questo piccolo progettino visto che mi trovavo per le mani qualche PIC 16F84A, lo scopo del progetto era far comparire una scritta in aria disegnata da dei led comandati da un PIC.
Innanzitutto un po’ di teoria sul come il tutto dovrebbe funzionare: presa una fila verticale di 8 led che fanno una rivoluzione su un asse questi si accendono in modo da formare delle forme e/o lettere; spero che questa immagine anche se orribile possa essere chiarificatrice:

Detto ciò passiamo allo schema del circuito, usiamo le porte B del nostro PIC che sono esattamente 8 e ci attacchiamo l’anodo nostri led,il catodo lo mettiamo a massa. Gli altri componenti sono un oscillatore quarzo da 4MHz che serve per dare il clock al PIC, al quale sono attaccati 2 condensatori che vanno a massa, come definito nel datasheet del PIC per l’utilizzo dell’oscillatore al quarzo come generatore di clock. Abbiamo poi i +5V attaccati al piedino VDD (14) il quale è collegato al piedino di reset (4) e la massa al piedino VSS (5) del nostro PIC. Lo schema del circuito risulta quindi il seguente:
Passiamo ora al codice da caricare all’interno del PIC; non mi dilungherò nella spiegazione di come si programmi un PIC, ci sono tantissime guide online basta una ricerca con google. Per scaricare il sorgente del codice in formato assembler fate click qui (il file non è disponibile al momento), all’inizio di trovano le classiche definizioni del tipo di processore usato e le impostazioni specifice per il nostro PIC 16F84A, quindi viene definito il tipo di oscillatore usato, vengono definite le porte B del PIC come porte di uscita etc… si passa poi alle procedure, ho definito una procedura per ciascuna lettera dell’alfabeto, una per disegnare un cuore e una per lo spazio, ogni procedura come descritto in precedenza si occupa di accendere i giusti led al momento giusto mantenedoli accesi “quanto basta”, riportiamo come esempio la funzione che disegna la lettera A:
la call wait ; wait for a bit
movlw B'01111111' ;output corresponding values out of PORTB
movwf PORTB
call wait
movlw B'10001000'
movwf PORTB
call wait
movlw B'10001000'
movwf PORTB
call wait
movlw B'01111111'
movwf PORTB
call space1
return
La procedura precedente chiama la funzione wait usata per mantenere accesi/spenti il led per un tempo congruo. La procedura più importante è ovviamente la prima (main) che chiama a sua volta le procedure per disegnare ciascuna lettera del nostro messaggio per ricominciare al termine ogni volta da capo. Riportiamo un esempio della main per scrivere la parola CIAO:
main
call lc
call li
call la
call lo
call space1
goto main
Ok compiliamo in nostro codice e generiamo il file .hex, ora siamo pronti a scriverlo nel PIC. Io ho usato un multipipo per la programmazione, un programmatore seriale di basso costo. Per programmare il pic ho usato il programma picprog sotto GNU/Linux, questo è il comando per programmare il PIC:
picprog --erase --burn --input-hexfile=mess.hex --device pic16f84a --pic /dev/ttyS0
ovviamente dovete specificare il vostro file .hex e la seriale che usate.
Il PIC ora lo mettiamo nel nostro circuto, accttacchiamo l’alimentazione e i led dovrebbereo iniziare a lampeggiare molto velocemente, in relatà sembreranno quasi fissi, ma se facciamo ruotare il tutto alla “giusta” velocità dovremmo veder comaprire la scritta che volgiamo in aria.
Un immagine del circuito finito accanto al programmatore:

Nel progetto che ho fatto io ho preferito lasciare la temporizzazione della velocità di rotazione alla mia mano, ho quindi preso una corda e l’ho attaccata al circuito, poi ho preso l’altro capo della corda in mano ed ho iniziato a far ruotare il tutto come si fa per un mazzo di chiavi e FUNZIONA! Ovviamente la buio si vede meglio
Volevo mettere una foto del tutto in funzione ma non sono riuscito ad avere una foto decente del tutto, ho provato a modificare il tempo di apertura dell’otturatore della macchina fotografica ma senza apprezzabili risultati ![]()
Per dubbi, perplessità e/o commenti non esitate a contattarmi!


Comments»
mi manderesti via email il file .hex della scritta ciao?? ti ringrazio
Mi dispiace ma purtroppo non trovo più il codice che avevo scritto, non so che fine abbia fatto…