Atmega32 измерение напряжение и вывод на LCD
Atmega32 измерение напряжение и вывод на LCD
Всем большое МЯУ!
Необходимо измерить напряжение с ЛАТРа, решил использовать Atmega 32 в TQFP, собрать делитель напряжения и уже через него мерять. Работаю в CVA. Но возникли вопросы
1. Как сделать обвязку АЦП, на одном из сайтов прочитал, что выходы AREF и AVCC необходимо соединить между собой. А после в даташите нашёл обвязку AVCC- через 100 mH на VCC, и 100 нФ. Как правильно собрать.
2. На канал, которым я собираюсь измерять поцепил кондер на 100нФ через землю и последовательно измеряемому каналу резистор на 330 Ом.
3. научился выводить переменные на LCD , теперь бы вывести туда значение измеряемого напряжения, т. е. мне нужна помощь в написании программы.
Спасибо за внимание!
Необходимо измерить напряжение с ЛАТРа, решил использовать 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
Правильно - как в даташите.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
Вы и напишите на ассемблере. А тс вставит это в С:На ассемблере помог бы.
Код: Выделить всё
#asm
;ваш код
#endasmDocendo discimus
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: Atmega32 измерение напряжение и вывод на LCD
Хорошо. На ассемблере - так:
Я привел пример самого простого использования АЦП. Вообще-то, АЦП может вызываться по наступлению какого-либо события - переполнению таймер-счетчика 0 или 1, по срабатыванию аналогового компаратора, по приходу прерывания INT0 и т.д. Выбор осуществляется битами ADTS2...0 в регистре SFIOR, по умолчанию там 000 - режим свободного запуска.
окончание преобразования также может обрабатываться в прерывании. Например, сделал старт преобразования (установил бит ADSC) и начал заниматься чем-то другим, по окончании вызовется прерывание, в котором можно будет сохранить результат.
Код: Выделить всё
;Вот этот код разместить в начале программы после инициализации стека и конфигурации портов
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В
окончание преобразования также может обрабатываться в прерывании. Например, сделал старт преобразования (установил бит ADSC) и начал заниматься чем-то другим, по окончании вызовется прерывание, в котором можно будет сохранить результат.
Re: Atmega32 измерение напряжение и вывод на LCD
Спасибо то отозвались.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
Я не работаю в Code Wizard.motoalex писал(а):2 В Code Wizard я установил в Volt Ref: AREF pin, т. е. я буду от него отталкиваться при измерениях. Теперь как его подключить:
1. Через конденсатор на землю.
Я уже писал Вам, что нужно установить биты REFS1 и REFS0 в регистре ADMUX.
При этом будет подключен внутренний ИОН напряжением 2,56В. Вывод AREF при этом нужно соединить с GND через конденсатор 0,1мкФ. Я Вам об этом уже писал в примере кода (в комментарии к строке 2).
Вы не читаете, что-ли то, что вам пишут?
Re: Atmega32 измерение напряжение и вывод на LCD
Alkul писал(а): Я не работаю в Code Wizard.
Я уже писал Вам, что нужно установить биты REFS1 и REFS0 в регистре ADMUX.
При этом будет подключен внутренний ИОН напряжением 2,56В. Вывод AREF при этом нужно соединить с GND через конденсатор 0,1мкФ. Я Вам об этом уже писал в примере кода (в комментарии к строке 2).
Вы не читаете, что-ли то, что вам пишут?
Извините, это были мысли вслух. Я уже всё подключил, попробывал Ваш код пишет переменные не определены. благодарю Вас за ваш труд.
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: Atmega32 измерение напряжение и вывод на LCD
Какие именно переменные не определены?motoalex писал(а):Извините, это были мысли вслух. Я уже всё подключил, попробывал Ваш код пишет переменные не определены. благодарю Вас за ваш труд.
Подключен ли у Вас файл описания "m32def.inc"? Или его аналог для Си-компилятора?
Я так понимаю, что Вы инклюдируете мой код в Си?
Да, еще замените имена регистров YL на R28, а YH - на R29. Ну, или можете подставить вместо них любые другие, которые могут образовывать регистровые пары.
Re: Atmega32 измерение напряжение и вывод на LCD
Извните всё тщетно, я ещё не такк сильно шарю. Лучше мне сразу всё писать на Си. А лучше в CODE VISION AVRAlkul писал(а): Какие именно переменные не определены?
Подключен ли у Вас файл описания "m32def.inc"? Или его аналог для Си-компилятора?
Я так понимаю, что Вы инклюдируете мой код в Си?
Да, еще замените имена регистров YL на R28, а YH - на R29. Ну, или можете подставить вместо них любые другие, которые могут образовывать регистровые пары.
Последний раз редактировалось motoalex Вс янв 29, 2012 19:17:19, всего редактировалось 1 раз.
Re: Atmega32 измерение напряжение и вывод на LCD
Господа, учимся не цитировать предыдущее сообщение полностью.
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: Atmega32 измерение напряжение и вывод на LCD
Простите, на Си не пишу. Может, еще кто отзовется.motoalex писал(а):Извните всё тщетно, я ещё не такк сильно шарю. Лучше мне сразу всё писать на Си. А лучше в CODE VISION AVR
Но Вы хоть напишите, на какой вывод контроллера (на какой канал АЦП) Вы подаете измеряемый сигнал?
Это пригодится тем, кто будет Вам помогать.
Последний раз редактировалось Alkul Вс янв 29, 2012 19:52:46, всего редактировалось 2 раза.
Re: Atmega32 измерение напряжение и вывод на LCD
Большое Вам спасибо за потраченное на меня время!Alkul писал(а): Простите, на Си не пишу. Может, еще кто отзовется.
- Cricket2107
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Вт авг 19, 2008 14:48:19
- Откуда: Харьков
Re: Atmega32 измерение напряжение и вывод на LCD
Всем мяу! Я вот тоже хочу освоить измерение синуса микроконтроллером. Везде пишут что нужно измерять среднеквадратичное (а во всех тестерах, мультиметрах) измеряют средне выпрямленное. Т. к я с математикой не дружу о чем речь смутно себе представляю. Подскажите кто знает, вот если микроконтроллером измерить полуволну например 20 раз потом найти максимальное ее значение и умножить его на 0,707 и результат вывести на дисплей. Будет ли правильно показывать напряжение например в сети 220В 50 Гц (Микроконтроллер понятно не на прямую в сеть)? Или измеряют синус как-то более мудрено? Вот заклинило сделать свое реле напряжение например как вот такое http://t2.gstatic.com/images?q=tbn:ANd9 ... Yv6rJp67OQ
Муррр.
Re: Atmega32 измерение напряжение и вывод на LCD
А жаль . Так бы бдддызнуло !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
С учётом того, что в сети синус относительно правильный и постоянный, а также, что для Ваших целей исключительная точность не нужна предлагаю свою реализацию Вашей задумки.Cricket2107 писал(а): Подскажите кто знает, вот если микроконтроллером измерить полуволну например 20 раз потом найти максимальное ее значение и умножить его на 0,707 и результат вывести на дисплей. Будет ли правильно показывать напряжение например в сети 220В 50 Гц
- Cricket2107
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Вт авг 19, 2008 14:48:19
- Откуда: Харьков
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 А для этого реле измерения средневыпрямленного значения, я думаю, хватило бы. Это если в сети не синус, а черт те что с хвостиком -- тогда да.
1) Это ^ означает корень я правильно понял?
2) N отсчетов это сколько? 10? 100? 1000?
Муррр.
Re: Atmega32 измерение напряжение и вывод на LCD
Щас прибежит модератор и настучит ата-та по попе за оверквотинг. Если ответ идет сразу за отвечаемым постом, можно вообще не квотить.
^ 2 означает "в квадрате", а функция квадратного корня Sqrt () .
N чем больше, тем лучше, но ограничивается временем преобразования АЦП. Лучше брать степень двойки, тогда деление будет простым сдвигом -- очень быстро. 64 вполне годится.
Чтоб совсем не вводить автора в ступор, я не упомянул о такой "малости" : частота выборок должна быть синхронизирована с частотой 50Гц, которая не факт, что она именно 50Гц, чтобы окно выборки "накрывало" ровно 1 или несколько периодов.
Это делается отслеживанием точки перехода через 0 и постоянной коррекцией таймера, которым синхронизируется запуск АЦП. Иначе показания будут "гулять" с частотой биений.
Но для неокрепших умов новичков это уже чересчур.
^ 2 означает "в квадрате", а функция квадратного корня Sqrt () .
N чем больше, тем лучше, но ограничивается временем преобразования АЦП. Лучше брать степень двойки, тогда деление будет простым сдвигом -- очень быстро. 64 вполне годится.
Чтоб совсем не вводить автора в ступор, я не упомянул о такой "малости" : частота выборок должна быть синхронизирована с частотой 50Гц, которая не факт, что она именно 50Гц, чтобы окно выборки "накрывало" ровно 1 или несколько периодов.
Это делается отслеживанием точки перехода через 0 и постоянной коррекцией таймера, которым синхронизируется запуск АЦП. Иначе показания будут "гулять" с частотой биений.
Но для неокрепших умов новичков это уже чересчур.
- Cricket2107
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Вт авг 19, 2008 14:48:19
- Откуда: Харьков
Re: Atmega32 измерение напряжение и вывод на LCD
Нет так то я понимаю что нужно делать контроллеру, а вот когда запускаешь CVAVR первая мысли "Ну и??" И все. Но не подумайте что я в программировании 0 например мерить постоянку уже научился.
Муррр.
Re: Atmega32 измерение напряжение и вывод на LCD
Насчет CV AVR я не копенгаген
, пишу на асме и компилирую в Студии.
- Cricket2107
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Вт авг 19, 2008 14:48:19
- Откуда: Харьков
Re: Atmega32 измерение напряжение и вывод на LCD
А я наоборот на асме даже мигалку светодиодом не напишу 
Муррр.


