Страница 2 из 2
Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 17:04:24
__Alexander
мда. с ходу и не поправишь.
первое. у вас остались REFSы а единицах. Должны быть в нулях.
И вот это void ADC_Result() где вызывается? Где результат нужен?
Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 17:27:55
__Alexander
Короче. Давай пока без усреднения, для проверки работоспособности.
В 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В).
потом уже усредняй.
Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 18:27:54
AaNnDdRrEeYy
__Alexander писал(а):
AaNnDdRrEeYy писал(а):
нет должно быть так REFS1 =0 REFS0=1
А давайте вы сейчас сделаете снимок страницы из документации, где вы вычитали этот бред.
вторая строчка в таблице.

Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 19:48:04
__Alexander
AaNnDdRrEeYy писал(а):
вторая строчка в таблице.

Уже лучше. И что же написано во второй строчке?
Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 19:51:37
Pika4u
ADC_Result вызывается в
Код: Выделить всё
void tranceive_array_load()//Функция отправки показаний датчиков и приема команд
{
ADC_Result();
Start_ADC_Convert();
бла-бла-бла.
}
REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.
Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 22:49:16
AaNnDdRrEeYy
__Alexander писал(а):AaNnDdRrEeYy писал(а):
вторая строчка в таблице.

Уже лучше. И что же написано во второй строчке?
во второй строчке написано
для того что бы источник опорного напряжения брался с ноги 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
и там же по ссылки схема подключения
Re: Настройка АЦП в ATMega32.
Добавлено: Вт окт 01, 2013 22:59:44
AaNnDdRrEeYy
Pika4u писал(а):ADC_Result вызывается в
Код: Выделить всё
void tranceive_array_load()//Функция отправки показаний датчиков и приема команд
{
ADC_Result();
Start_ADC_Convert();
бла-бла-бла.
}
REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.
а чем напряжение меняется на ножке МК? резистор переменный?
Re: Настройка АЦП в ATMega32.
Добавлено: Ср окт 02, 2013 09:07:42
__Alexander
AaNnDdRrEeYy писал(а):
во второй строчке написано
для того что бы источник опорного напряжения брался с ноги AREF. выстави REFS1 = 0 а REFS0 =1
Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.
AaNnDdRrEeYy писал(а):
вот еще цитата с этого сайта
Спойлер
Регистр ADMUX
Модулю АЦП для работы нужен источник опорного напряжения (ИОН). За выбор ИОНа отвечают биты REFS1, REFS0. В нашем случае опорное напряжение это напряжение питания (именно поэтому мы завели вывод AVcc на +5В) поэтому REFS1 - 0, REFS0 - 1
и там же по ссылки схема подключения
Тут всё правильно. Но у ТС совершенно не так подключено.
Re: Настройка АЦП в ATMega32.
Добавлено: Ср окт 02, 2013 09:17:37
Pika4u
__Alexander писал(а):AaNnDdRrEeYy писал(а):
во второй строчке написано
для того что бы источник опорного напряжения брался с ноги AREF. выстави REFS1 = 0 а REFS0 =1
Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.
AaNnDdRrEeYy писал(а):
вот еще цитата с этого сайта
Спойлер
Регистр ADMUX
Модулю АЦП для работы нужен источник опорного напряжения (ИОН). За выбор ИОНа отвечают биты REFS1, REFS0. В нашем случае опорное напряжение это напряжение питания (именно поэтому мы завели вывод AVcc на +5В) поэтому REFS1 - 0, REFS0 - 1
и там же по ссылки схема подключения
Тут всё правильно. Но у ТС совершенно не так подключено.
У меня AREF и AVCC заведены на +5,конденсатор стоит вплотную к AREF.
Re: Настройка АЦП в ATMega32.
Добавлено: Ср окт 02, 2013 09:22:19
__Alexander
Pika4u писал(а):
У меня AREF и AVCC заведены на +5,конденсатор стоит вплотную к AREF.
я знаю. читать тему с первого сообщения не разучился. )
И дал вам правильный рабочий код. Вы его хоть проверили?
Re: Настройка АЦП в ATMega32.
Добавлено: Ср окт 02, 2013 10:23:20
AaNnDdRrEeYy
__Alexander писал(а):
Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.
Тут всё правильно. Но у ТС совершенно не так подключено.
так мы про биты выясняли а не про то как там ТС спаял. Кстати без конденсатора у меня тоже нормально работает.
Re: Настройка АЦП в ATMega32.
Добавлено: Ср окт 02, 2013 10:31:50
__Alexander
AaNnDdRrEeYy писал(а):
так мы про биты выясняли а не про то как там ТС спаял. Кстати без конденсатора у меня тоже нормально работает.
Ну так вы про биты неправильно сказали. А то, что у вас там работает без чего либо... это оставьте себе и не советуйте делать так-же.
Короче, устал, по таблице
REFS1 REFS0
0 0 - ИОН берется с ноги AREF. Внутренний ИОН выключен.
0 1 - ИОН берется с ноги AVCC, с подключенным конденсатором к выводу AREF.
1 0 - нет
1 1 - ИОН внутренний на 2.56 В
Если 5В заведено напрямую на AREF, что надо выставить?
Re: Настройка АЦП в ATMega32.
Добавлено: Ср окт 02, 2013 10:38:27
AaNnDdRrEeYy
соединить вместе AREF AVCC и + 5 вольт. без кондера вообще
в регистр записать 0 1