Atmega8A ADC prescaler - funguje jen při dělení frekvence 32

Zdravím,
mám problém s ADC. Funguje mi jen při dělení frekvence 32. Zkoušel jsem spoustu jiných děliček při jiných rychlostech hodin, na externích hodinách ale nic jiného nefunguje. Testoval jsem na dvou čipech, abych vyloučil, že je čip poškozený. Zkoušel jsem i měnit reference (AVCC/AREF).

Další podivná věc je, že když vynechám brzdu (delay) ve smyčce loop, tak program nedělá nikdy nic.

Neví někdo, čím by to mohlo být? Díky

(Kód by měl podle vstupu na ADC kanál0 menit PWM výstup IC1A)

[code].NOLIST
.INCLUDE “m8def.inc”
.LIST

.DEF tmp =r25
.DEF pwm =r26

.ORG 0
RJMP init

.ORG 15
rjmp ADCD

Init:

;******************
LDI tmp,LOW(RAMEND)
OUT SPL,tmp
LDI tmp,HIGH(RAMEND)
OUT SPH,tmp
;******************

clr tmp
out DDRC,tmp
ldi tmp,255
out DDRB,tmp

ADC_Init:
ldi tmp,0b01100000
out admux,tmp
ldi tmp,0b11101101
out adcsra,tmp

PWM_Init:
clr tmp
out OCR1AH, tmp
out OCR1BH, tmp
clr pwm
out OCR1AL, pwm
ldi tmp, 0b10100001
out TCCR1A, tmp
ldi tmp, $1
out TCCR1B, tmp
sei

loop:
rcall delay
rjmp loop

adcd:
push tmp
in tmp,adcl
in tmp,adch
out ocr1AL,tmp
pop tmp
reti

delay:
; =============================
; delay loop generator
; 25000 cycles:
; -----------------------------
; delaying 24990 cycles:
ldi R30, $22
WGLOOP0: ldi R31, $F4
WGLOOP1: dec R31
brne WGLOOP1
dec R30
brne WGLOOP0
; -----------------------------
; delaying 9 cycles:
ldi R30, $03
WGLOOP2: dec R30
brne WGLOOP2
; -----------------------------
; delaying 1 cycle:
nop
; =============================
ret
[/code]

:arrow_right: administrator: přejmenováno z “Atmega8A ADC prescaler”
ADC_PWM.asm (1.21 KB)

Zkus nezpouštět převodník ve stejné instrukci jako ho nastavuješ (ADSC).
Vektor ADC má adresu 0xE (14), nikoli 15.
Vyčítání registru ADCL v přerušení je zbytečné pokud ho nepotřebuješ.
Převodník funguje i při frekvencích mimo rozsah f(adc), jen s menší přesností.

IC1A není pwm výstup.

Díky, opravil jsem vektor a šlape to přesně podle představ.

nižší byte čtu abych zastavil ADC, někde v datasheetu jsem četl, že když čip čte z nižšího bytu výstupu ADC tak zakáže ADC zápis do výstupních registrů. Jelikož pracuji jen s horním bytem tak je to ale zbytečnost…

OC1A mi nějakou záhodou jako PWM výstup funguje.

Díky moc