Documente Academic
Documente Profesional
Documente Cultură
Lecia nr. 8
CONVERTORUL ANALOG-DIGITAL
Cele patru canale analogice sunt multiplexate i aplicate unui circuit de eantionare i
meninere (Sample and Hold) de la intrarea convertorului A/D. n urma conversiei, este
generat un cuvnt de 10 bii care va fi stocat ntr-un registru intern. Tensiunea de referin
cu care lucreaz convertorul este selectabil prin soft, fie la valoarea VDD fie la o valoare
VREF aplicat din exterior pe pinul GP1.
Registrele speciale care controleaz funcionarea convertorului A/D sunt prezentate
n tabelul 8.1.
Tabelul 8.1. Registre de comand ale convertorului A/D
Adresa Nume Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
05H GPIO - - GP5 GP4 GP3 GP2 GP1 GP0
0BH/8BH INTCON GIE PEIE T0IE INTE GPIE T0IF INTF GPIF
0CH PIR1 EEIF ADIF - - CMIF - - TMR1IF
1EH ADRESH C.m.s 8 bii ai rezultatului aliniai la stnga sau 2 bii ai rezultatului aliniai la dreapta
1FH ADCON0 ADFM VCFG - - CHS1 CHS0 GO ADON
85H TRISIO - - TRISIO5 TRISIO4 TRISIO3 TRISIO2 TRISIO1 TRISIO0
8CH PIE1 EEIE ADIE - - CMIE - - TMR1IE
9EH ADRESL C.m.p.s. 2 bii ai rezultatului aliniai la stnga sau 8 bii ai rezultatului aliniai la dreapta
9FH ANSEL - ADCS2 ADCS1 ADCS0 ANS3 ANS2 ANS1 ANS0
85
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
Intrrile analogice
Semnalele analogice care urmeaz s fie convertite, sunt prevzute a se citi pe pinii
GP4, GP2, GP1 i GP0, care vor trebui definii ca intrri analogice. Pentru aceasta, se va
proceda astfel:
o n registrul TRISIO (adresa 85H), se vor seta biii TRISIO4 = TRISIO2 =
TRISIO1 = TRISIO0 = 1, pentru configurarea lor ca intrri,
o n registrul ANSEL (adresa 9FH) se vor seta biii ANS3 = ANS2 = ANS1 =
ANS0 = 1 pentru a defini pinii respectivi ca fiind intrri analogice.
Selecia canalelor
Din figura 8.1 observm c adresarea multiplexorului analogic de intrare se face cu
biii CHS1 i CHS0. Aceti bii fac parte din registrul de comand ADCON0 (adresa 1FH)
i vor defini canalele de intrare astfel:
CHS1 CHS0
0 0 canal 0 (AN0)
0 1 canal 1 (AN1)
1 0 canal 2 (AN2)
1 1 canal 3 (AN3)
Tensiunea de referin
Aa cum s-a mai menionat n paragraful precedent, convertorul analog-digital poate
lucra fie cu o tensiune de referin VREF aplicat din exterior pe pinul GP1, fie cu tensiunea
de referin intern egal cu VDD.
Selecia ntre cele dou variante se face cu bitul 6 al registrului de comand
ADCON0 astfel:
VCFG = 1 se lucreaz cu VREF extern (pe GP1)
VCFG =1 se lucreaz cu VREF = VDD
Tactul de conversie
Durata unei conversii este de 11 TAD. Pentru alegerea tactului conversiei (TAD) exist
dou variante:
o se poate selecta prin soft la una din valorile: FOSC/2, FOSC/4, FOSC/8, FOSC/16,
FOSC/32, FOSC/64, unde FOSC este frecvena oscilatorului la care lucreaz
microcontrolerul,
o se poate selecta un oscilator RC intern dedicat convertorului A/D.
Biii de selecie a frecvenei de lucru sunt ADCS2, ADCS1 i ADCS0 aflai n
poziiile 6, 5, 4 din registrul de comand ANSEL (adresa 9FH).
86
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
n tabelul 8.2 sunt prezentate frecvenele setabile pentru diverse valori ale
oscilatorului local.
Tabelul 8.2. Frecvenele de lucru selectabile
Sursa de tact a convertorului (TAD) Frecvena microcontrolerului
Operare ADCS2ADCS0 20 MHz 5 MHz 4 MHz 1,25MHz
2 TOSC 000 100 ns(2) 400 ns(2) 500 ns(2) 1,6 s
4 TOSC 100 200 ns(2) 800 ns(2) 1.0 s(2) 3,2 s
8 TOSC 001 400 ns(2) 1,6 s 2,0 s 6,4 s
16 TOSC 101 800 ns(2) 3,2 s 4,0 s 12,8 s(3)
32 TOSC 010 1,6 s 6,4 s 8,0 s(3) 25,6 s(3)
64 TOSC 110 3,2 s 12,8 s(3) 16,0 s(3) 51,2 s(3)
A/D RC x11 2 6 s(1,4) 2 6 s(1,4) 2 6 s(1,4) 2 6 s(1,4)
Legend: Valorile din celulele marcate sunt n afara domeniului recomandat
Not referitoare la valorile din tabel
1. Oscilatorul dedicat convertorului (A/D RC) are TAD = 4 s pentru VDD > 3,0 V.
2. Aceste valori ncalc condiia de TAD minim.
3. Pentru conversii mai rapide se recomand selectarea unei alte surse de tact.
4. Cnd frecvena microcontrolerului este mai mare dect 1 MHz, A/D RC este recomandat
numai dac conversia se execut n modul de lucru SLEEP a circuitului.
Observaie: Pentru o conversie corect este nevoie ca TAD > 1,6 s.
Ieirea digital
Rezultatul conversiei este un cuvnt binar de 10 bii nscris n registrele ADRESH
(adresa 1EH) i ADRESL (adresa 9EH). Cuvntul de 10 bii poate fi nscris n cele dou
registre a cte 8 bii aliniat la stnga sau aliniat la dreapta (figura 8.2).
87
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
88
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
89
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
CONVERSIE A/D
Iniializri
Main
Da Nu
Isr Exist ntreruperi?
Salvare registre de
lucru (STATUS, W)
Timer0InterruptCheck
Nu Da
T0IF = 1? Timer0Interrupt
Nu Da
FLAGS.0 = 1?
FLAGS.0 FLAGS.0
T0IF=0
EndIsr
Refacere registre de
lucru (STATUS, W)
90
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
Subrutina
Display
Nu Da
BUFFERLOADED STATE_COUNTER = 0?
Nu Da BUFFERRESET
<STATE_COUNTER>=8?
LEDREGISTERBUFFERLEDREGISTER
STATE_COUNTER 0
STATE_COUNTER+1
Return
91
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
Subrutina
LEDStateMachine
W(adr.start+<STATE_COUNTER>)
PCLW
StateMachineStart
Computed Goto
S0 S1 S7
Return
92
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
93
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
94
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
S0 call Led0
goto EndLEDStateMachine
S1 call Led1
goto EndLEDStateMachine
S2 call Led2
goto EndLEDStateMachine
S3 call Led3
goto EndLEDStateMachine
S4 call Led4
goto EndLEDStateMachine
S5 call Led5
goto EndLEDStateMachine
S6 call Led6
goto EndLEDStateMachine
S7 call Led7
EndLEDStateMachine
return
Led0 ;LED0 - subrutina de comand a LED-ului D0
BANK1
movlw LED0TRIS
movwf TRISIO
BANK0
movlw LED0ON
movwf GPIO
return
Led1
BANK1
movlw LED1TRIS
movwf TRISIO
BANK0
movlw LED1ON
movwf GPIO
return
Led2
BANK1
movlw LED2TRIS
movwf TRISIO
BANK0
movlw LED2ON
movwf GPIO
return
Led3
BANK1
movlw LED3TRIS
movwf TRISIO
BANK0
movlw LED3ON
movwf GPIO
return
Led4
BANK1
movlw LED4TRIS
movwf TRISIO
BANK0
movlw LED4ON
movwf GPIO
return
95
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
Led5
BANK1
movlw LED5TRIS
movwf TRISIO
BANK0
movlw LED5ON
movwf GPIO
return
Led6
BANK1
movlw LED6TRIS
movwf TRISIO
BANK0
movlw LED6ON
movwf GPIO
return
Led7
BANK1
movlw LED7TRIS
movwf TRISIO
BANK0
movlw LED7ON
movwf GPIO
return
;Subrutina Display - afieaz valoarea din LEDREGISTERBUFFER pe cele 8 LED-uri - la fiecare
; apelare se va comanda un LED. Dup 8 apelri ale acestei subrutine, LEDREGISTERBUFFER se
; va rencrca cu valoarea din LEDREGISTER
Display
movf STATE_COUNTER,w
btfsc STATUS,Z ;LEDStateMachine este n state 0?
goto BUFFERRESET
;Da
btfss STATE_COUNTER,3
;Nu, se testeaz dac s-au depit cele 8 stri.
goto BUFFERLOADED
;Nu
BUFFERRESET ;Da
movf LEDREGISTER,w
movwf LEDREGISTERBUFFER
;ncarc bufferul cu valoarea din LEDREGISTER
clrf STATE_COUNTER
;Se va pleca din State 0
BUFFERLOADED
bcf STATUS,C ;Reseteaz C. Urmeaz o operaie care-l va afecta
rrf LEDREGISTERBUFFER,f
;Rotirea se efectueaz prin Carry
btfsc STATUS,C ;Urmtorul bit este '1'?
goto UpdateLed ;Da, actualizeaz starea LED-urilor
goto Continue ;Nu
UpdateLed ;Actualizarea strii LED-urilor
call LEDStateMachine
Continue
incf STATE_COUNTER,f
;Se incrementeaz numrtorul de stri
return
END
96
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
97
Aplicaii hardware i software cu microcontrolerul PIC 12F675 Lecia nr. 8
98