Полная версия этой страницы:
ATMEGA8, не работает АЦП
DmitriyX
May 1 2005, 13:03
Пробую использовать АЦП.
Кусок программы следующий:
ldi temp_reg,(1<<ADEN)+(1<<ADSC)
out ADCSR,temp_reg
wait_conv:
in temp_reg,ADCSR
sbrc temp_reg,ADSC
rjmp wait_conv
Насколько я понимаю, согласно документации, бит ADSC должен аппаратно сбрасываться после преобразования. Но даже в симуляторе AVRStudio и в Proteuse этот бит не хочет сбрасываться и следовательно, напряжение не измеряется и понятия не имею, что делать. Может быть я где-то сделал неправильно? или что-то еще необходимо настроить кроме ADEN? И ждал я достаточно долго - всеравно ничего.
Помогите, пожалуйста, советом
Извини разбираться некогдаю вот рабочий код для меги16
init_adc:
ldi tempA,0b00000000 ;инициализация ADC
out admux,tempA
ldi tempA,0b10000111
out adcsra,tempA
ret
;------------------------------------------------------------------------
start_adc:
ldi tempA,0b00000000 ;запуск ADC и ожид преобазов
out admux,tempA
sbi adcsra,6
cy4: in tempA,adcsra
andi tempA,0b01000000
brne cy4
in tempA,adcl ;счит результата из ADC
in tempB,adch
Sergio66
May 3 2005, 08:54
Вот код на сях. Под М16, также идет на М8, и на М32
Проверено, работает.
[int Adc_Convertion(char port)
{
unsigned int data;
ADMUX = port;
ADCSRA = 0xc7;
while (!(ADCSRA & (1<<ADIF)));
ADCSRA |= ADIF;
data = ADCL;
data += ((ADCH & 0x03)<<8);
return data;
}
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.