Atmega32 измерение напряжение и вывод на LCD

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
motoalex
Родился
Сообщения: 5
Зарегистрирован: Вс дек 18, 2011 19:21:38

Atmega32 измерение напряжение и вывод на LCD

Сообщение motoalex »

Всем большое МЯУ!

Необходимо измерить напряжение с ЛАТРа, решил использовать Atmega 32 в TQFP, собрать делитель напряжения и уже через него мерять. Работаю в CVA. Но возникли вопросы

1. Как сделать обвязку АЦП, на одном из сайтов прочитал, что выходы AREF и AVCC необходимо соединить между собой. А после в даташите нашёл обвязку AVCC- через 100 mH на VCC, и 100 нФ. Как правильно собрать.
2. На канал, которым я собираюсь измерять поцепил кондер на 100нФ через землю и последовательно измеряемому каналу резистор на 330 Ом.
3. научился выводить переменные на LCD , теперь бы вывести туда значение измеряемого напряжения, т. е. мне нужна помощь в написании программы.

Спасибо за внимание!
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Alkul »

motoalex писал(а): 1. Как сделать обвязку АЦП, на одном из сайтов прочитал, что выходы AREF и AVCC необходимо соединить между собой. А после в даташите нашёл обвязку AVCC- через 100 mH на VCC, и 100 нФ. Как правильно собрать.
Правильно - как в даташите.
В качестве источника опорного напряжения (AREF) используйте встроенный ИОН - сконфигурируйте контроллер соответствующим образом.
Имейте в виду, что АЦП измеряет напряжение в диапазоне от GND до уровня AREF, поэтому рассчитывайте делитель так, чтобы "пик" синусоиды не превышал уровня AREF.
motoalex писал(а):2. На канал, которым я собираюсь измерять поцепил кондер на 100нФ через землю и последовательно измеряемому каналу резистор на 330 Ом.
После делителя.
motoalex писал(а):3. научился выводить переменные на LCD , теперь бы вывести туда значение измеряемого напряжения, т. е. мне нужна помощь в написании программы.
На Си не пишу. На ассемблере помог бы.
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение pyzhman »

На ассемблере помог бы.
Вы и напишите на ассемблере. А тс вставит это в С:

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

#asm
;ваш код
#endasm
Docendo discimus
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Alkul »

Хорошо. На ассемблере - так:

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

;Вот этот код разместить в начале программы после инициализации стека и конфигурации портов

	ldi R16, (1<<REFS1)|(1<<REFS0)	;Выбор внутреннего АЦП (2,56В), вывод AREF подключить на землю
					                        ;через конденсатор 0,1мкФ 
	out ADMUX,R16			                ;Установить биты REFS1...0 в рег.ADMUX, при этом в качестве входа АЦП
					                        ;выбран вход ADC0. Для выбора входов ADC1...ADC7 в младший ниббл
					                        ;регистра ADMUX нужно записать значения 1...7 соответственно.
	ldi R16,0x15			                ;Очистить флаг ADIF, установить такты АЦП как системный clock/32
	out ADCSRA,R16			        ;
;В данном режиме АЦП будет работать не по прерываниям, а "вручную" - цикл преобразования начнется при установке 
;бита ADSC в регистре ADCSRA. Завершение цикла определеятся путем опроса флага ADIF в регистре ADCSRA.


;Вот этот код размещается там, где требуется выполнить преобразование 
	sbi ADCSRA,ADEN		               ;Включить АЦП
	nop			                               ;
	nop			                               ;Пауза для гарантии корректного включения АЦП
	nop			                               ;
	sbi ADCSRA,ADSC		               ;Начать преобразование

IZM: 	sbis ADCSRA,ADIF	                       ;Дождаться окончания
	rjmp IZM		                               ;измерения	
	in YL,ADCL		                               ;Занести в рег.пару Y
	in YH,ADCH		                       ;измеренное АЦП значение

	cbi ADCSRA,ADEN		               ;Отключить преобразования АЦП
	sbi ADCSRA,ADIF		               ;Обнулить флаг завершения преобразования
;После выполнения этого кода в рег.паре Y будет код АЦП, пропроциональный измеренному напряжению
;Связь полученного кода АЦП с измеренным значением такова (объясняю на пальцах):
;Так как наш АЦП 10-разрядный и измеряет напряжение от GND до значения опорного напряжения (в нашем случае 2,56В), ;то на один дискрет АЦП приходится 2,56/1024=0,0025В
;Если АЦП, к примеру, выдал код 0х64 (100D), то измеренное напряжение равно 100*0,0025=0,25В 
Я привел пример самого простого использования АЦП. Вообще-то, АЦП может вызываться по наступлению какого-либо события - переполнению таймер-счетчика 0 или 1, по срабатыванию аналогового компаратора, по приходу прерывания INT0 и т.д. Выбор осуществляется битами ADTS2...0 в регистре SFIOR, по умолчанию там 000 - режим свободного запуска.
окончание преобразования также может обрабатываться в прерывании. Например, сделал старт преобразования (установил бит ADSC) и начал заниматься чем-то другим, по окончании вызовется прерывание, в котором можно будет сохранить результат.
Реклама
Эиком - электронные компоненты и радиодетали
motoalex
Родился
Сообщения: 5
Зарегистрирован: Вс дек 18, 2011 19:21:38

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение motoalex »

Alkul писал(а): Правильно - как в даташите.
В качестве источника опорного напряжения (AREF) используйте встроенный ИОН - сконфигурируйте контроллер соответствующим образом.
Имейте в виду, что АЦП измеряет напряжение в диапазоне от GND до уровня AREF, поэтому рассчитывайте делитель так, чтобы "пик" синусоиды не превышал уровня AREF.
Спасибо то отозвались.

1. Я подключил AVCC как в прикреплённом ниже файле, только индуктивности пока нет, соединил пока так с шиной + 5 вольт. Понимаю что измерения могут при этом врать.
2 В Code Wizard я установил в Volt Ref: AREF pin, т. е. я буду от него отталкиваться при измерениях. Теперь как его подключить:

1. Через конденсатор на землю.
2. Соединить его вместе с AVCC
3. Сделать обвязку как у AVCC
Вложения
AVCC.JPG
подключение AVCC
(42.05 КБ) 825 скачиваний
Реклама
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Alkul »

motoalex писал(а):2 В Code Wizard я установил в Volt Ref: AREF pin, т. е. я буду от него отталкиваться при измерениях. Теперь как его подключить:
1. Через конденсатор на землю.
Я не работаю в Code Wizard.
Я уже писал Вам, что нужно установить биты REFS1 и REFS0 в регистре ADMUX.
При этом будет подключен внутренний ИОН напряжением 2,56В. Вывод AREF при этом нужно соединить с GND через конденсатор 0,1мкФ. Я Вам об этом уже писал в примере кода (в комментарии к строке 2).

Вы не читаете, что-ли то, что вам пишут?
Реклама
motoalex
Родился
Сообщения: 5
Зарегистрирован: Вс дек 18, 2011 19:21:38

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение motoalex »

Alkul писал(а): Я не работаю в Code Wizard.
Я уже писал Вам, что нужно установить биты REFS1 и REFS0 в регистре ADMUX.
При этом будет подключен внутренний ИОН напряжением 2,56В. Вывод AREF при этом нужно соединить с GND через конденсатор 0,1мкФ. Я Вам об этом уже писал в примере кода (в комментарии к строке 2).

Вы не читаете, что-ли то, что вам пишут?

Извините, это были мысли вслух. Я уже всё подключил, попробывал Ваш код пишет переменные не определены. благодарю Вас за ваш труд.
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Alkul »

motoalex писал(а):Извините, это были мысли вслух. Я уже всё подключил, попробывал Ваш код пишет переменные не определены. благодарю Вас за ваш труд.
Какие именно переменные не определены?
Подключен ли у Вас файл описания "m32def.inc"? Или его аналог для Си-компилятора?
Я так понимаю, что Вы инклюдируете мой код в Си?

Да, еще замените имена регистров YL на R28, а YH - на R29. Ну, или можете подставить вместо них любые другие, которые могут образовывать регистровые пары.
motoalex
Родился
Сообщения: 5
Зарегистрирован: Вс дек 18, 2011 19:21:38

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение motoalex »

Alkul писал(а): Какие именно переменные не определены?
Подключен ли у Вас файл описания "m32def.inc"? Или его аналог для Си-компилятора?
Я так понимаю, что Вы инклюдируете мой код в Си?

Да, еще замените имена регистров YL на R28, а YH - на R29. Ну, или можете подставить вместо них любые другие, которые могут образовывать регистровые пары.
Извните всё тщетно, я ещё не такк сильно шарю. Лучше мне сразу всё писать на Си. А лучше в CODE VISION AVR
Последний раз редактировалось motoalex Вс янв 29, 2012 19:17:19, всего редактировалось 1 раз.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение ploop »

Господа, учимся не цитировать предыдущее сообщение полностью.
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Alkul »

motoalex писал(а):Извните всё тщетно, я ещё не такк сильно шарю. Лучше мне сразу всё писать на Си. А лучше в CODE VISION AVR
Простите, на Си не пишу. Может, еще кто отзовется.
Но Вы хоть напишите, на какой вывод контроллера (на какой канал АЦП) Вы подаете измеряемый сигнал?
Это пригодится тем, кто будет Вам помогать.
Последний раз редактировалось Alkul Вс янв 29, 2012 19:52:46, всего редактировалось 2 раза.
motoalex
Родился
Сообщения: 5
Зарегистрирован: Вс дек 18, 2011 19:21:38

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение motoalex »

Alkul писал(а): Простите, на Си не пишу. Может, еще кто отзовется.
Большое Вам спасибо за потраченное на меня время!
Аватара пользователя
Cricket2107
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 19, 2008 14:48:19
Откуда: Харьков

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Cricket2107 »

Всем мяу! Я вот тоже хочу освоить измерение синуса микроконтроллером. Везде пишут что нужно измерять среднеквадратичное (а во всех тестерах, мультиметрах) измеряют средне выпрямленное. Т. к я с математикой не дружу о чем речь смутно себе представляю. Подскажите кто знает, вот если микроконтроллером измерить полуволну например 20 раз потом найти максимальное ее значение и умножить его на 0,707 и результат вывести на дисплей. Будет ли правильно показывать напряжение например в сети 220В 50 Гц (Микроконтроллер понятно не на прямую в сеть)? Или измеряют синус как-то более мудрено? Вот заклинило сделать свое реле напряжение например как вот такое http://t2.gstatic.com/images?q=tbn:ANd9 ... Yv6rJp67OQ
Муррр.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Jack_A »

Cricket2107 писал(а): (Микроконтроллер понятно не на прямую в сеть)]
А жаль . Так бы бдддызнуло !
Cricket2107 писал(а): Будет ли правильно показывать напряжение например в сети 220В 50 Гц
Кончно, нет .
Чтобы получить действ. значение, а не цену на арбузы в Астрахани, нужно :
1. Подать на вход АЦП переменный сигнал, уменьшенный до уровня 2 * Uamp < Uref, смешанное с постоянной "подставкой" Uref/2 .
2. Снять N отсчетов на одном или целом числе периодов.
3. Вычислить уровень нуля U0 = Sum(Ui) / N .
4. Вычислить действующее значение
Ueff = Sqrt ( Sum ( (Ui - U0) ^ 2) / N ) .

Вот и получим действующее значение в квантах АЦП. А чтобы получить в Вольтах, умножим на цену деления В/квант . Делов-то ...
Тема эта всплывает периодически раз в полгода, впору ее в обучалку.
Азбучно прописано в Вики. Правда, там для неквантованного сигнала, с интегралами :)

PS А для этого реле измерения средневыпрямленного значения, я думаю, хватило бы. Это если в сети не синус, а черт те что с хвостиком -- тогда да.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение s_black »

Cricket2107 писал(а): Подскажите кто знает, вот если микроконтроллером измерить полуволну например 20 раз потом найти максимальное ее значение и умножить его на 0,707 и результат вывести на дисплей. Будет ли правильно показывать напряжение например в сети 220В 50 Гц
С учётом того, что в сети синус относительно правильный и постоянный, а также, что для Ваших целей исключительная точность не нужна предлагаю свою реализацию Вашей задумки.
Аватара пользователя
Cricket2107
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 19, 2008 14:48:19
Откуда: Харьков

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Cricket2107 »

Jack_A писал(а):
Cricket2107 писал(а): (Микроконтроллер понятно не на прямую в сеть)]
А жаль . Так бы бдддызнуло !
Cricket2107 писал(а): Будет ли правильно показывать напряжение например в сети 220В 50 Гц
Кончно, нет .
Чтобы получить действ. значение, а не цену на арбузы в Астрахани, нужно :
1. Подать на вход АЦП переменный сигнал, уменьшенный до уровня 2 * Uamp < Uref, смешанное с постоянной "подставкой" Uref/2 .
2. Снять N отсчетов на одном или целом числе периодов.
3. Вычислить уровень нуля U0 = Sum(Ui) / N .
4. Вычислить действующее значение
Ueff = Sqrt ( Sum ( (Ui - U0) ^ 2) / N ) .

Вот и получим действующее значение в квантах АЦП. А чтобы получить в Вольтах, умножим на цену деления В/квант . Делов-то ...
Тема эта всплывает периодически раз в полгода, впору ее в обучалку.
Азбучно прописано в Вики. Правда, там для неквантованного сигнала, с интегралами :)

PS А для этого реле измерения средневыпрямленного значения, я думаю, хватило бы. Это если в сети не синус, а черт те что с хвостиком -- тогда да.
Спасибо за хоть какое-то прояснение, но остались несколько вопросов:
1) Это ^ означает корень я правильно понял?
2) N отсчетов это сколько? 10? 100? 1000?
Муррр.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Jack_A »

Щас прибежит модератор и настучит ата-та по попе за оверквотинг. Если ответ идет сразу за отвечаемым постом, можно вообще не квотить.

^ 2 означает "в квадрате", а функция квадратного корня Sqrt () .
N чем больше, тем лучше, но ограничивается временем преобразования АЦП. Лучше брать степень двойки, тогда деление будет простым сдвигом -- очень быстро. 64 вполне годится.
Чтоб совсем не вводить автора в ступор, я не упомянул о такой "малости" : частота выборок должна быть синхронизирована с частотой 50Гц, которая не факт, что она именно 50Гц, чтобы окно выборки "накрывало" ровно 1 или несколько периодов.
Это делается отслеживанием точки перехода через 0 и постоянной коррекцией таймера, которым синхронизируется запуск АЦП. Иначе показания будут "гулять" с частотой биений.
Но для неокрепших умов новичков это уже чересчур.
Аватара пользователя
Cricket2107
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 19, 2008 14:48:19
Откуда: Харьков

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Cricket2107 »

Нет так то я понимаю что нужно делать контроллеру, а вот когда запускаешь CVAVR первая мысли "Ну и??" И все. Но не подумайте что я в программировании 0 например мерить постоянку уже научился.
Муррр.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Jack_A »

Насчет CV AVR я не копенгаген :) , пишу на асме и компилирую в Студии.
Аватара пользователя
Cricket2107
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 19, 2008 14:48:19
Откуда: Харьков

Re: Atmega32 измерение напряжение и вывод на LCD

Сообщение Cricket2107 »

А я наоборот на асме даже мигалку светодиодом не напишу :(
Муррр.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»