есть простая задача, с определенным периодом запускать АЦП и по завершению преобразования записывать результат в регистр (например 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 постоянно меняется при изменении аналогового сигнала на входе АЦП.
Как по другому решить поставленную задачу прошу не предлагать, и сам знаю. Мне интересно почему это работает не так как надо.
|