Полная версия этой страницы:
ADC Attiny26
arttab
Mar 15 2005, 08:38
запускаю АЦП в режиме однократного преобразования и выдаю результат на порт. передача искажается (уже подставлял заведо нужные значения для передачи). долго разбирался. если АЦП выкл. после получения результата, то все нормально.
АВРовцы пишут, что ошибок в МК нет.
ADCSET:
;------------------------------ADC настройка
;---ADMUX
;--b7=1, b6=0 опорное напряжение 2.56 В. без внешнего конденсатора.
;--B5=0 ADCH (b1, b0), ADCL (b7...b0)
;--MUX4...0 =0 выбран ADC0
ldi temp1,0b10000000 ;
out ADMUX,temp1 ;
;----ADCSR
;--b7=1 АЦП разрешен ADEN
;--b6=0 запуск АЦП ADSC
;--b5=0 включ. циклический режим ADFR
;--b4=0 чтоб не трогать флаг ADIF
;--b3=1 разрешение прерывания по окончанию преобразования АЦП ADIE
;--b2...0 = 101 предделитель частоты АЦП в 32 раза меньше MCU
ldi temp1,0b00001101 ;
out ADCSR,temp1 ;
;----------------------------------------
в проге
sbi ADCSR,ADEN ;вкл. АЦП
sbi ADCSR,ADSC ;запуск АЦП
потом
cbi ADCSR,ADEN ;вкл. АЦП
Что скажите?
Цитата(arttab @ Mar 15 2005, 11:38)
в проге
sbi ADCSR,ADEN ;вкл. АЦП
sbi ADCSR,ADSC ;запуск АЦП
потом
cbi ADCSR,ADEN ;вкл. АЦП
Что скажите?
Ну вот не совсем понятно два момента - 1) зачем выключать АЦП после измерения - вообще-то первое преобразование, хоть и пишется что оно просто дольше работает - недостоверное... и 2) что-то не вижу, где ожидается готовность АЦП (или просто вырезано?)
arttab
Mar 16 2005, 03:12
я привел настройку АЦП. вот обработчик:
;--------------------ADCEND обработка прерывания от АЦП
ADCEND:
push temp2 ;в стек temp2
in temp2,SREG ;сохран статуса
push temp2 ;сохран статуса
in ADL,ADCL ;считывание результата
in ADH,ADCH ;АЦП
>>>sbr KEY,(1<<ADCOK) ;ADC OK ADCOK=1
cbi ADCSR,ADEN ;выкл. АЦП
pop temp2 ;востанов в temp2 статуса
out SREG,temp2 ;востанов стека
POP temp2 ;востан temp2
reti
в сроке >>> выставляется бит, что АЦП отработала. а выключать АЦП начал из-за сбоев в програме если не отключать. Появляются прерывания от АЦП когда они не нужны.
гогда бит ADCOK выставлен запускается передатчик и отработав
cbr KEY,(1<<ADCOK) ;
спасибо что решили помочь.
Цитата(arttab @ Mar 16 2005, 06:12)
в сроке >>> выставляется бит, что АЦП отработала. а выключать АЦП начал из-за сбоев в програме если не отключать. Появляются прерывания от АЦП когда они не нужны.
гогда бит ADCOK выставлен запускается передатчик и отработав
cbr KEY,(1<<ADCOK) ;
спасибо что решили помочь.
Я бы все-таки посоветовал АЦП включать только раз - при старте программы. А прерывания от АЦП просто так возникать не могут. Только после запуска преобразования, как отработал. Так что скорее всего где-то ошибка (кстати, а почему вы решили, что возникает прерывание?)
arttab
Mar 17 2005, 16:03
начинает сбоить передача на комп - задержки появляются.... см. первое сообщение. источникоа прерываний у меня 3: reset, ADC, timer1. по последнему идет передача на комп. и код вставлял в обработчик АЦП - он инвертировать должен был состояние с/д - частил ужасно, а я ведь по кнопке запускал АЦП. Я нашел одну "забавную" ошибку и может она глобально влияла на поведение мк. завтра посмотрю. В студии ни чего не выявил. хотя, когда по началу забыл сохранять рег. статуса при прерываниях, то в ней это и выявил. могу хоть всю прогу выложить - она пока в тестовом варианте и не секретна, но разбираться в чужом коде, наверно, не интересно. поэтому, и спрашиваю у кого чего было с подобным поведением и как потестить.
arttab
Mar 21 2005, 02:46
Похоже я погоричился. оно останавливается, но откудато появляются задержки при передаче.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.