Настройка АЦП в ATMega32.
- __Alexander
- Потрогал лапой паяльник
- Сообщения: 335
- Зарегистрирован: Вт сен 11, 2007 10:27:08
- Откуда: Киев
Re: Настройка АЦП в ATMega32.
мда. с ходу и не поправишь.
первое. у вас остались REFSы а единицах. Должны быть в нулях.
И вот это void ADC_Result() где вызывается? Где результат нужен?
первое. у вас остались REFSы а единицах. Должны быть в нулях.
И вот это void ADC_Result() где вызывается? Где результат нужен?
- __Alexander
- Потрогал лапой паяльник
- Сообщения: 335
- Зарегистрирован: Вт сен 11, 2007 10:27:08
- Откуда: Киев
Re: Настройка АЦП в ATMega32.
Короче. Давай пока без усреднения, для проверки работоспособности.
В main первыми строками пишешь
в прерывании пока так.
ADC.h такой
всё. теперь у тебя в voltage должно быть значение от 0 до 1023 соответствующие вольтажу от 0 до 5В (если схема на 5В).
потом уже усредняй.
В main первыми строками пишешь
Код: Выделить всё
main()//Îñíîâíàÿ ôóíêöèÿ ïðîãðàììû
{
__enable_interrupt();//Âêëþ÷àåì ãëîáàëüíî ïðåðûâàíèÿ
adc_init();
for(;;)
{
Start_ADC_Convert();
--- тут вписать вывод переменной voltage.
}
// дальще как было...
в прерывании пока так.
Код: Выделить всё
#pragma vector =ADC_vect//Ïðåðûâàíèå ïî çàâåðøåíèþ ïðåîáðàçîâàíèÿ íàïðÿæåíèÿ
__interrupt void ADC_vector(void)
{
voltage=ADC;//Äëÿ áîëüøåé òî÷íîñòè íàêàïëèâàåì èçìåðåíèÿ
// count_adc++;//Ñäåëàíî åùå îäíî ïðåîáðàçîâàíèå
}
ADC.h такой
Спойлер
Код: Выделить всё
unsigned short voltage_in=0,voltage=0;
volatile unsigned char count_adc;//Êîëè÷åñòâî îòñ÷åòîâ äëÿ ÀÖÏ
void adc_init()//Ôóíêöèÿ èíèöèàëèçàöèè ÀÖÏ
{
CB(DDR_ADC,PIN_ADC);
ADMUX|=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)|(0<<MUX4)|(0<<REFS0)|(0<<REFS1)|(0<<ADLAR);
SFIOR|=(0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);
ADCSRA|=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADIF)|(1<<ADPS2)|(0<<ADPS1)|(1<<ADPS0)|(0<<ADATE);
// ADCSRA|=(1<<ADSC);//Äåëàåì ïåðâûé îòñ÷åò
}
void Start_ADC_Convert()
{
ADCSRA|=(1<<ADSC);
}
void ADC_Result()
{
if(count_adc==5)//Åñëè ñäåëàëè 5 çàìåðîâ íàïðÿæåíèÿ
{
voltage_in=voltage;
count_adc=0;//Îáíóëÿåì êîë-âî çàìåðîâ
voltage=0;//Îáíóëÿåì ïåðåìåííóþ äëÿ ñóììèðîâàíèÿ
}
}
всё. теперь у тебя в voltage должно быть значение от 0 до 1023 соответствующие вольтажу от 0 до 5В (если схема на 5В).
потом уже усредняй.
-
AaNnDdRrEeYy
- Встал на лапы
- Сообщения: 100
- Зарегистрирован: Ср дек 24, 2008 11:59:24
- Откуда: Москва
- __Alexander
- Потрогал лапой паяльник
- Сообщения: 335
- Зарегистрирован: Вт сен 11, 2007 10:27:08
- Откуда: Киев
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Настройка АЦП в ATMega32.
ADC_Result вызывается в
REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.
Код: Выделить всё
void tranceive_array_load()//Функция отправки показаний датчиков и приема команд
{
ADC_Result();
Start_ADC_Convert();
бла-бла-бла.
}
REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-
AaNnDdRrEeYy
- Встал на лапы
- Сообщения: 100
- Зарегистрирован: Ср дек 24, 2008 11:59:24
- Откуда: Москва
Re: Настройка АЦП в ATMega32.
во второй строчке написано
для того что бы источник опорного напряжения брался с ноги AREF. выстави REFS1 = 0 а REFS0 =1
вот статья обучалка в ней есть код
Код: Выделить всё
//ион - напряжение питания, выравнивание влево, нулевой канал
ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
вот еще цитата с этого сайта
Регистр ADMUX
Модулю АЦП для работы нужен источник опорного напряжения (ИОН). За выбор ИОНа отвечают биты REFS1, REFS0. В нашем случае опорное напряжение это напряжение питания (именно поэтому мы завели вывод AVcc на +5В) поэтому REFS1 - 0, REFS0 - 1
и там же по ссылки схема подключения
-
AaNnDdRrEeYy
- Встал на лапы
- Сообщения: 100
- Зарегистрирован: Ср дек 24, 2008 11:59:24
- Откуда: Москва
Re: Настройка АЦП в ATMega32.
Pika4u писал(а):ADC_Result вызывается вКод: Выделить всё
void tranceive_array_load()//Функция отправки показаний датчиков и приема команд
{
ADC_Result();
Start_ADC_Convert();
бла-бла-бла.
}
REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.
а чем напряжение меняется на ножке МК? резистор переменный?
- __Alexander
- Потрогал лапой паяльник
- Сообщения: 335
- Зарегистрирован: Вт сен 11, 2007 10:27:08
- Откуда: Киев
Re: Настройка АЦП в ATMega32.
AaNnDdRrEeYy писал(а):во второй строчке написано
для того что бы источник опорного напряжения брался с ноги AREF. выстави REFS1 = 0 а REFS0 =1
Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.
AaNnDdRrEeYy писал(а):вот еще цитата с этого сайтаСпойлер
Регистр ADMUX
Модулю АЦП для работы нужен источник опорного напряжения (ИОН). За выбор ИОНа отвечают биты REFS1, REFS0. В нашем случае опорное напряжение это напряжение питания (именно поэтому мы завели вывод AVcc на +5В) поэтому REFS1 - 0, REFS0 - 1
и там же по ссылки схема подключения
Тут всё правильно. Но у ТС совершенно не так подключено.
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Настройка АЦП в ATMega32.
__Alexander писал(а):AaNnDdRrEeYy писал(а):во второй строчке написано
для того что бы источник опорного напряжения брался с ноги AREF. выстави REFS1 = 0 а REFS0 =1
Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.AaNnDdRrEeYy писал(а):вот еще цитата с этого сайтаСпойлер
Регистр ADMUX
Модулю АЦП для работы нужен источник опорного напряжения (ИОН). За выбор ИОНа отвечают биты REFS1, REFS0. В нашем случае опорное напряжение это напряжение питания (именно поэтому мы завели вывод AVcc на +5В) поэтому REFS1 - 0, REFS0 - 1
и там же по ссылки схема подключения
Тут всё правильно. Но у ТС совершенно не так подключено.
У меня AREF и AVCC заведены на +5,конденсатор стоит вплотную к AREF.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- __Alexander
- Потрогал лапой паяльник
- Сообщения: 335
- Зарегистрирован: Вт сен 11, 2007 10:27:08
- Откуда: Киев
Re: Настройка АЦП в ATMega32.
Pika4u писал(а):У меня AREF и AVCC заведены на +5,конденсатор стоит вплотную к AREF.
я знаю. читать тему с первого сообщения не разучился. )
И дал вам правильный рабочий код. Вы его хоть проверили?
-
AaNnDdRrEeYy
- Встал на лапы
- Сообщения: 100
- Зарегистрирован: Ср дек 24, 2008 11:59:24
- Откуда: Москва
Re: Настройка АЦП в ATMega32.
__Alexander писал(а):Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.
Тут всё правильно. Но у ТС совершенно не так подключено.
так мы про биты выясняли а не про то как там ТС спаял. Кстати без конденсатора у меня тоже нормально работает.
- __Alexander
- Потрогал лапой паяльник
- Сообщения: 335
- Зарегистрирован: Вт сен 11, 2007 10:27:08
- Откуда: Киев
Re: Настройка АЦП в ATMega32.
AaNnDdRrEeYy писал(а):так мы про биты выясняли а не про то как там ТС спаял. Кстати без конденсатора у меня тоже нормально работает.
Ну так вы про биты неправильно сказали. А то, что у вас там работает без чего либо... это оставьте себе и не советуйте делать так-же.
Короче, устал, по таблице
REFS1 REFS0
0 0 - ИОН берется с ноги AREF. Внутренний ИОН выключен.
0 1 - ИОН берется с ноги AVCC, с подключенным конденсатором к выводу AREF.
1 0 - нет
1 1 - ИОН внутренний на 2.56 В
Если 5В заведено напрямую на AREF, что надо выставить?
-
AaNnDdRrEeYy
- Встал на лапы
- Сообщения: 100
- Зарегистрирован: Ср дек 24, 2008 11:59:24
- Откуда: Москва
Re: Настройка АЦП в ATMega32.
соединить вместе AREF AVCC и + 5 вольт. без кондера вообще
в регистр записать 0 1
в регистр записать 0 1