Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATMEGA8, не работает АЦП
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DmitriyX
Пробую использовать АЦП.
Кусок программы следующий:
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? И ждал я достаточно долго - всеравно ничего.

Помогите, пожалуйста, советом
m16
Извини разбираться некогдаю вот рабочий код для меги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
Вот код на сях. Под М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;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.