есть простая задача, с определенным периодом запускать АЦП и по завершению преобразования записывать результат в регистр (например r19), АЦП решил запускать по прерывания от WATCHDOG
вот что а наваял:
. . .
ldi r16,(1<<REFS0)|(1<<ADLAR)
out ADMUX,r16
ldir 16,(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0)
out ADCSRA,r16
. . .
sbi ADCSRA,ADIE
. . .
ldi r16,(1<<WDCE)
out WDTCR,r16
ldi r16,(1<<WDTIE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0)
out WDTCR,r16
. . .
ADCC: ;обработка прерывания ADC
in r19,ADCH
reti
WATCHDOG:
sbi ADCSRA,ADSC
reti
я так понимаю если я не установил бит ADATE в ADCSRA, то АЦП должен работать в режиме одиночного преобразования, но на практике преобразование запускается постоянно, даже если полностью выкинуть WATCHDOG, а бит запуска преобразования устанавливается только там, значение r19 постоянно меняется при изменении аналогового сигнала на входе АЦП.
Как по другому решить поставленную задачу прошу не предлагать, и сам знаю. Мне интересно почему это работает не так как надо.