Настройка АЦП в ATMega32.

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Re: Настройка АЦП в ATMega32.

Сообщение __Alexander »

мда. с ходу и не поправишь.
первое. у вас остались REFSы а единицах. Должны быть в нулях.
И вот это void ADC_Result() где вызывается? Где результат нужен?
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Re: Настройка АЦП в ATMega32.

Сообщение __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В).

потом уже усредняй.
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва

Re: Настройка АЦП в ATMega32.

Сообщение AaNnDdRrEeYy »

__Alexander писал(а):
AaNnDdRrEeYy писал(а):нет должно быть так REFS1 =0 REFS0=1

А давайте вы сейчас сделаете снимок страницы из документации, где вы вычитали этот бред.


вторая строчка в таблице.

Изображение
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Re: Настройка АЦП в ATMega32.

Сообщение __Alexander »

AaNnDdRrEeYy писал(а):вторая строчка в таблице.
Изображение


Уже лучше. И что же написано во второй строчке?
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Настройка АЦП в ATMega32.

Сообщение Pika4u »

ADC_Result вызывается в

Код: Выделить всё

void tranceive_array_load()//Функция отправки показаний датчиков и приема команд
{
  ADC_Result();
 Start_ADC_Convert();
бла-бла-бла.
}

REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва

Re: Настройка АЦП в ATMega32.

Сообщение 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


и там же по ссылки схема подключения
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва

Re: Настройка АЦП в ATMega32.

Сообщение AaNnDdRrEeYy »

Pika4u писал(а):ADC_Result вызывается в

Код: Выделить всё

void tranceive_array_load()//Функция отправки показаний датчиков и приема команд
{
  ADC_Result();
 Start_ADC_Convert();
бла-бла-бла.
}

REFS в единицы я поставил,чтобы посмотреть,что будет при внутреннем ИОН,ничего не изменилось.


а чем напряжение меняется на ножке МК? резистор переменный?
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Re: Настройка АЦП в ATMega32.

Сообщение __Alexander »

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.

Сообщение Pika4u »

__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.

Сообщение __Alexander »

Pika4u писал(а):У меня AREF и AVCC заведены на +5,конденсатор стоит вплотную к AREF.


я знаю. читать тему с первого сообщения не разучился. )
И дал вам правильный рабочий код. Вы его хоть проверили?
AaNnDdRrEeYy
Встал на лапы
Сообщения: 100
Зарегистрирован: Ср дек 24, 2008 11:59:24
Откуда: Москва

Re: Настройка АЦП в ATMega32.

Сообщение AaNnDdRrEeYy »

__Alexander писал(а):Там так не написано. Слово capacitor ниче не говорит? Переведите что-ли гуглом.

Тут всё правильно. Но у ТС совершенно не так подключено.


так мы про биты выясняли а не про то как там ТС спаял. Кстати без конденсатора у меня тоже нормально работает.
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Re: Настройка АЦП в ATMega32.

Сообщение __Alexander »

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.

Сообщение AaNnDdRrEeYy »

соединить вместе AREF AVCC и + 5 вольт. без кондера вообще
в регистр записать 0 1
Ответить

Вернуться в «AVR»