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


WcN - AVR i Fonaments de computadors -> Exemple ADC