Esempio pratico: led lampeggiante




A titolo dimostrativo viene proposto un piccolo circuito in cui un led viene fatto lampeggiare. Le fasi da seguire sono essenzialmente quelle descritte alla sezione precedente e sono: creazione del progetto in MPLAB, scrittura del programma, compilazione, debugging, inserimento del codice nel microcontrollore e realizzazione del circuito.



Il programma



Una possibile soluzione per poter far lampeggiare un led e' quella ad esempio di avere una linea di I/O che emette un segnale in cui si alternano le tensioni di 0 e +5 volt. A tale linea collegheremo in serie il led ed una resistenza limitatrice di corrente. Allo scopo puo' essere utilizzato il programma precedente che alterna i valori 0 e 1 sul bit meno significativo (il primo bit) del registro PORTB.
Riportiamo il codice del programma:


;******************************************************
; Programma di prova
; Alterna 1 e 0 sul primo bit di PORTB ogni 100ms
;******************************************************

;direttive
PROCESSOR 16F84A
RADIX HEX

;definizioni
R1 EQU 0x20
R2 EQU 0x21
R3 EQU 0x22
PORTB EQU 0x06
TRISB EQU 0x06
TRISA EQU 0x05
PORTA EQU 0x05
PORTB EQU 0x06
STATUS EQU 0x03
FSR EQU 0x04
INDF EQU 0x00

;inizio programma
ORG 0x0000

bsf STATUS,5
movlw 0x00
movwf TRISB
bcf STATUS,5
loop:
bsf PORTB,0
call wait
bcf PORTB,0
call wait
goto loop

;routine di attesa (circa 100ms)
wait:
movlw 0xBE
movwf R1
longloop1:
movlw 0xBE
movwf R2
longloop2:
decfsz R2,1
goto longloop2
decfsz R1,1
goto longloop1
return

;fine del programma
END


In ogni caso andremo ad utilizzare un oscillatore al quarzo da 4Mhz quindi in ICPROG occorrera' selezionare l'oscillatore XT. Il Watch-Dog non serve percio' deve essere disabilitato (WDT non selezionato). Possiamo lasciare disabilitate le rimanenti due opzioni PWRT e CP.



Circuito di prova



Una volta compilato e programmato correttamente il PIC occorrera' realizzare questo piccolo circuito:



Per ingrandire cliccare qui

In alto abbiamo il modulo alimentatore, costituito da un regolatore di tensione 78L05. DCIN deve essere collegato ad una tensione continua da almeno 9 volt.
In basso abbiamo il circuito principale costituito dal pic e da pochi altri componenti. Al piedino #MCLR e' collegato il circuito standard di reset visto nella prima sezione mentre in OSC1 e OSC2 e' collegato l'oscillatore da 4Mhz al quarzo (tipo XT). VDD e VSS sono ovviamente il piedino del positivo e di massa. Ad RB0 sono collegati il led e la resistenza limitatrice: dato che i pin di I/O del pic possono assorbire/fornire all'incirca 20mA ciascuno, allora la resistenza dovra' avere un valore non inferiore a:

(5-0.7)volt / 0.02A = 215 ohm

Dove 0.7 e' la caduta di potenziale introdotta dal led e 5 e' la tensione massima sul piedino (corrispondente al livello logico 1). Per stare sicuri e non stressare la linea con assorbimenti al limite e' stata inserita una resistenza da 330ohm.
Di default le linee della porta A sono impostate come input e siccome non vengono utilizzate occorre inserire delle resistenze di pull-up da 10K per definirne i valori di tensione. Queste resistenze possono essere evitate semplicemente impostando da programma le linee della porta A come output.