Departament de Microelectrònica i Sistemes Electrònics
AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)
Exemple d'ús del ADC
El programa és un exemple de configuració del ADC. Usa el byte més significatiu, amb ajustament a l'esquerra, per mostrar el resultat en el PORTD (on s'hi connecten 8 leds). L'entrada analògica, en aquest exemple, es posa en el port analògic 2.
El programa en sí conté les instruccions en blau. En vermell hi ha un conjunt d'instruccions addicionals que mostren pel PINB.7 el flag ADIF. ADIF es posa a 1 cada cop que es produeix una conversió. De connectar un oscil·loscop en el PORTB.7 es pot observar la generació d'un pols cada fo/(128*13).
El programa està comprovat amb el microcontrolador ATmega128. El programa pot ser entrat de la mateixa manera en el ATmega8 canviant només el fitxer de descripció del component i els ports d'entrada/sortida.
; EXEMPLE D'ÚS DEL ADC
; Joan Oliver, desembre 2008
.INCLUDE "m128def.inc"
.DEF srri = R10 ;registre guarda SREG
.DEF temp = R16 ;registre temporal
.CSEG
.ORG 0x00
rjmp inici ;Servei interrupció inici
.ORG 0x2A
rjmp int_adc ;Servei interrupció timer1 per overflow
reti
;*******************INICI PROGRAMA********************************
inici:
ldi temp,LOW(RAMEND) ;Setup del stack
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,temp
rcall setup_PORTS ; setup ports
rcall setup_ADC ; setup ADC
sei ; Activació general d'interrupcions
;-------PROGRAMA PRINCIPAL--------------------------------------------
main:
sbis ADCSRA, 4 ; control sobre bit ADIF
rjmp esZero
esU: sbi PORTB, 7
rjmp main
esZero: cbi PORTB, 7
rjmp main
;-------RUTINA DE SETUP PORTS------------------------------------
setup_PORTS:
sbi DDRB, 7 ; només per visualtizar interrupció
ser temp
out DDRD, temp
ret
;-------RUTINA DE SETUP DEL ADC------------------------------------
setup_ADC:
ldi temp,(0<<REFS1)|(0<<REFS0)|(1<<ADLAR)|(1<<MUX1) ; es posa referència externa, ajustament a l'esquerra i entrada ADC2
out ADMUX,temp
ldi temp,(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ; habilitació DAC en mode lliure i interrupcions i divisió per 128
out ADCSRA,temp
ret
;-------RUTINA DE SERVEI INT ADC COMPLET----------------------
int_adc:
in srri, SREG
in temp, ADCH ; es llegeix el conversor i...
out PORTD, temp ; ...es treu el resultat pel PORTD
out SREG, srri
reti