I'm trying to implement ADC reading with an ARmega8 using noise reduction option witout results.
can anybody take a look to this ASM simple pgm .
Any error or missing instr. ?
Thanks
;ATmega8 - Test of ADC .
; Just reads ADC5 and put result on ports B and D
;The ADC has a separate analog supply voltage pin, AVCC. AVCC must not differ more than ± 0.3V ;from VCC . Connect Aref and AVCC to VCC
; I/O Register Definitions
.equ SREG =$3F
.equ SPH =$3e ;stack pointer H
.equ SPL =$3d ;stack pointer L
.equ GIMSK =$3B
.equ GIFR =$3A
.equ TIMSK =$39 ; ok
.equ TIFR =$38
.equ MCUCR =$35 ; ok
.equ TCCR0 =$33 ; ok
.equ TCNT0 =$32
.equ TCCR1 =$30
.equ TCNT1 =$2F
.equ OCR1A =$2E
.equ OCR1B =$2D
.equ PORTB =$18
.equ DDRB =$17
.equ ACSR =$08
.equ ADMUX =$07 ; 0k
.equ ADCSR =$06 ; ok
.equ ADCH =$05 ; ok
.equ ADCL =$04 ; ok
.equ PORTC =$15 ; ok
.equ DDRC =$14 ; ok
.equ PINC =$13 ; ok
.equ PORTD =$12
.equ DDRD =$11
.equ PIND =$10
.equ ADIF =4 ;
; Variable Declarations
.def temp = r16
.def isrsreg = r18
.def isrtemp1 = r19
.def isrtemp2 = r20
.def cseg = r21
.def seg0 = r22
.def seg1 = r23
.def seg2 = r24
.def seg3 = r25
.cseg ; CODE segment.
;Interrupt Vectors
.org 0
rjmp init ;Reset
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
reti ;
;Initialization
init:
ldi r16,$03 ; Stack pointer 3F xxxx 4
out SPH,r16 ;
ldi r16,$0F ;
out SPL,r16 ;
ldi r16,$1F ; 5 bits are outputs
out DDRC,r16 ;
ldi r16,$FF ; all bits are outputs
out DDRB,r16
ldi r16,$FF ; all bits are outputs
out DDRD,r16
sei ; Enable Interrupts
ldi r16,$8E ; Enable, ADIE, Prescale = 1/64 1000 1110 xxxxx;
out ADCSR,r16
ldi r16,$05 ; 5 - Select ADC5 as input, VCC as VREF ligado externo xxxx
out ADMUX,r16 ; xxxx 000x0101 5
loop:
ldi r16,$90 ; Sleep enable, ADC low noise mode
out MCUCR,r16
sleep ; Wait for ADC to convert
in r0,ADCL ; Read the converted value
in r1,ADCH
out PortB,r1 ; Out result to ports B , D
out PortD,r0
rjmp loop ; Go again