Вольтметр на atmega16a

Обсуждаем контроллеры компании Atmel.
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Вольтметр на atmega16a

Сообщение aleksei18rus »

Добрый вечер коты ученые, решил собрать вольтметр, написал код, а он как попало изменяет. Максимальное измеряемое напряжение 30в., R1 10кОм, R2 2кОм, опорное напряжение 5вольт AVCC потянул к 5 вольтам, сгенерировал код, получилось что то такое...

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

#include <mega16a.h> 
#include <delay.h>
#asm
 .equ __lcd_port=0x12;
#endasm
#include <lcd.h>
#include <stdio.h>
#define ADC_VREF_TYPE ((0«REFS1) | (1«REFS0) | (0«ADLAR))
unsigned char volt;
char buffer [33];
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1«ADSC);
while ((ADCSRA & (1«ADIF))==0);
ADCSRA|=(1«ADIF);
return ADCW;
}
void main(void)
{ADMUX=ADC_VREF_TYPE;
 ADCSRA=(1«ADEN) | (0«ADSC) | (0«ADATE) | (0«ADIF) | (0«ADIE) | (1«ADPS2) | (1«ADPS1) | (0«ADPS0);
 SFIOR=(0«ADTS2) | (0«ADTS1) | (0«ADTS0);
 lcd_init(16);
while (1)
 {volt=read_adc(0)*0.029*5.00;
 sprintf(buffer, "Volt=%i.%u", volt);
 lcd_gotoxy(0,0);
 lcd_puts(buffer);
 delay_ms (500);
 
 }
}
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

сгенерировал код, ... а он как попало изменяет...
Вот подлец... И с кем же изменяет, гад?

Вот этот код - "sprintf(buffer, "Volt=%i.%u", volt);" - под какую курительную смесь был "сгенерирован"?
А этот - "volt=read_adc(0)*0.029*5.00;"?
И что такое R1 и R2?
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

L.O.D писал(а):
сгенерировал код, ... а он как попало изменяет...
Вот подлец... И с кем же изменяет, гад?

Вот этот код - "sprintf(buffer, "Volt=%i.%u", volt);" - под какую курительную смесь был "сгенерирован"?
А этот - "volt=read_adc(0)*0.029*5.00;"?
И что такое R1 и R2?

Ахахаха, Т9 ска...
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

Подозрения насчет травы оправдались. Смотри не передозь там.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

R1 и R2 резистивный делитель, а по какой тогда формуле рассчитывать, 2 день уже пытаюсь измерить напряжение.
Алгоритм такой сначала 30/1024=0.029в затем ADCW*0.029 (512*0.029=14.84) я так понял.
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

aleksei18rus писал(а):R1 и R2 резистивный делитель, ...
Это и из первого поста было понятно, так что - никакой доп.информации не поступило. Исходя из того, как "сгенерирован" код этого "вольтметра" вполне можно ожидать, что R1 и R2 включены в схему как-нибудь нетадиционно... например, только одним контактом. Отсюда и вопрос...
aleksei18rus писал(а):Алгоритм такой сначала 30/1024=0.029 затем ...
Коэффициенты в данный момент неважны, важнее то, что ожидалось получить скажем вот таким образом:

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

volt=read_adc(0) ...;
или что ожидалось увидеть после такого чуда:

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

sprintf(buffer, "Volt=%i.%u", volt);
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Вольтметр на atmega16a

Сообщение Novice user »

я тоже с вольтметром из хелпа не разобрался,так и осталась эта тема для меня не известной...
думаю вам никто не поможет-дохлый номер
может поможет http://avr-start.ru/?p=590
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

Novice user писал(а):думаю вам никто не поможет-дохлый номер
Зачем так категорично? Тем более, что процесс уже стартовал.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

В общем, помощи недождался и сделал сам и все работает.

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

#include <mega16a.h>
#include <stdio.h>
#include <delay.h>
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
ADCSRA|=(1<<ADSC);
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}     
void main (void)
 {float result;
  char lcd_buffer [30];
  ADMUX=ADC_VREF_TYPE;
  ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
  SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
  lcd_init(16);
  lcd_putsf ("   voltmetr");
  delay_ms (500);
  lcd_clear();
   while (1)
   {  lcd_gotoxy (0,0);
      result=((30.00*read_adc(0))/1024.00);
      sprintf(lcd_buffer,"U=%.2fV",result);
      lcd_puts(lcd_buffer);
   }
 }     
   

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

result=((30.00*read_adc(0))/1024.00);

в этой строчке 30.00 это максимальное измеряемое напряжение при резистивном делителе 10кОм и 2кОм, read_adc(0) показания с 0 входа АЦП, 1024.00 это разрядность АЦП
Изображение
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вольтметр на atmega16a

Сообщение COKPOWEHEU »

Жаль отказались от помощи. Радует, что хотя бы методом тыка проблему решить удалось. Остается надеяться, что дальше попытаетесь оптимизировать и разобраться почему этот вариант работает.
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

COKPOWEHEU писал(а):Жаль отказались от помощи. Радует, что хотя бы методом тыка проблему решить удалось. Остается надеяться, что дальше попытаетесь оптимизировать и разобраться почему этот вариант работает.

Загвоздка была в этих строчках и всего то

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

result=((30.00*read_adc(0))/1024.00);
      sprintf(lcd_buffer,"U=%.2fV",result);
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

aleksei18rus писал(а):Загвоздка была в этих строчках и всего то

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

result=((30.00*read_adc(0))/1024.00);
      sprintf(lcd_buffer,"U=%.2fV",result);

Именно на них вам и указывали с самого начала. :)
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вольтметр на atmega16a

Сообщение Аlex »

Да ладно, это он сам во всём разобрался, а помощи не было вообще никакой :)))
Вот такие вот они, Удмурты :)))
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Re: Вольтметр на atmega16a

Сообщение L.O.D »

Насчет "разобрался" есть некоторые сомнения. :)
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вольтметр на atmega16a

Сообщение COKPOWEHEU »

Да что вы, откуда сомнения?! Явно ведь не из-за использования в такой задаче чисел и плавающей точкой. И не из-за использования умножения + деления вместо умножения на константу. И не незнания порядка записи переменных в арифметических выражениях. И даже не из-за указания printf'у двух параметров и передачи одного. Ведь все профессианальные программисты так и делают.
Эту фразу я не распарсил, поэтому прокомментировать не могу
опорное напряжение 5вольт AVCC потянул к 5 вольтам
В смысле опорное напряжение (AREF) притянул к питанию (плохая идея, очевидно) или AVCC (аналоговое питание) соединил с цифровым (необходимое условие, хотя стоило бы поставить индуктивность).
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

Ну не пинайте так сильно, я только начал разбираться, вот и просил помощи у вас на форуме... А помощи никакой ни не дождался, сами то наверно тоже не все с первого раза поняли.
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

опорное напряжение 5вольт AVCC потянул к 5 вольтам
В смысле опорное напряжение (AREF) притянул к питанию (плохая идея, очевидно) или AVCC (аналоговое питание) соединил с цифровым (необходимое условие, хотя стоило бы поставить индуктивность).

ошибся я
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

Сегодня посидел, прикрутил еще часы реального времени, датчик ds18b20 ну и соответственно вольтметр.
Вложения
Y0disTaoqWU.jpg
(126.54 КБ) 558 скачиваний
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Вольтметр на atmega16a

Сообщение COKPOWEHEU »

aleksei18rus писал(а):А помощи никакой ни не дождался, сами то наверно тоже не все с первого раза поняли.
А думаете, почему задавали наводящие вопросы, чего вы хотели добиться своим кодом? Тоже сразу не понятно было, хотели помочь, но вы же отказываетесь описывать свою логику, как тут поможешь.
aleksei18rus писал(а):опорное напряжение 5вольт AVCC потянул к 5 вольтам
...
ошибся я
Так что имелось в виду, AREF или AVCC?
aleksei18rus
Открыл глаза
Сообщения: 75
Зарегистрирован: Пн ноя 21, 2011 13:03:33

Re: Вольтметр на atmega16a

Сообщение aleksei18rus »

AVCC имел ввиду
Ответить

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