Страница 1 из 1

Помогите с АЦП ATTiny 45. Как вольты записать то???

Добавлено: Вт май 12, 2009 18:39:54
mr_smit
Итак: CodeVisionAVR. ATTiny 45. Proteus.

Изображение Изображение Изображение

Изображение

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

while (1)
      {
      float volt;
      volt=read_adc(0);
      if (volt>200) {PORTB.0=0;}
      else {PORTB.0=1;}
      };
В каких величинах volt???(Вольты, милливольты) С чем сравнивать?

Re: Помогите с АЦП ATTiny 45. Как вольты записать то???

Добавлено: Вт май 12, 2009 19:00:27
ikarab
ИМХО разумно прикладыват mr вопросу архив с проектами CVAVR PROTEUS.
mr_smit писал(а):В каких величинах volt???(Вольты, миливольты) С чем сравнивать?
Это зависит наверно от того какой тип вы ей дали.

А read_adc(0); возвращает результат в 1024 долях опрного напряжения АЦП.

Добавлено: Вт май 12, 2009 19:10:37
mr_smit
ikarab писал(а):Это зависит наверно от того какой тип вы ей дали.
Я имел ввиду возвращаемое значение.
ikarab писал(а):А read_adc(0); возвращает результат в 1024 долях опрного напряжения АЦП.
Т.е. реальное напряжение = volt*(5/1024) ?

P.S. Вот исходники.

Добавлено: Вт май 12, 2009 19:54:16
mr_smit
Не работает

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

while (1)
      {
      float volt;
      volt=read_adc(0)*(5/1024);
      if (volt>2) {PORTB.0=0;}
      else {PORTB.0=1;}
      };

Добавлено: Вт май 12, 2009 20:30:25
ikarab
А вы посмотрите пример АЦП в папке CVAVR.

Добавлено: Вт май 12, 2009 21:31:32
DrWatson
А фьюз RSTDISBL в протеусе в свойствах тиньки запрограммирован (установлен в 0)?
А то ресет будет работать как ресет - вот и не работает.
Чтоб не мучаться старайтесь не использовать Reset как порт без крайней необходимости.

Добавлено: Ср май 13, 2009 03:45:57
Vov123
Вообще-то возвращаемое значение при 10-битном преобразовании -INT.
Максимальное значение при этом получите 1023.А привязать его можете хоть к чему.Может у вас весы,значит в килограммах,а если поток света в канделах и т.д.

Добавлено: Ср май 13, 2009 14:43:52
mr_smit
ikarab писал(а):А вы посмотрите пример АЦП в папке CVAVR.
Там, почему то, они используют:

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

interrupt [ADC_INT] void adc_isr(void)
А мне CVAVR другой код выдает.

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

unsigned int read_adc(unsigned char adc_input)

Главное при 0 В светодиод не горит, 0.5 В загорается, между 0.5 и 1 В моргнет один раз и потом до 5 В горит постоянно.

Добавлено: Ср май 13, 2009 17:11:40
mr_smit
Ну что сделать то??? Всем лень что либо конкретное писать. :( :cry:

Добавлено: Ср май 13, 2009 17:46:02
sachok

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

volt=read_adc(0); //+5
volt=ADCW;
volt=5120/1024*volt;
Так результат вроде в мили вольтах должен бить. 2,5В=2500мВ

Добавлено: Ср май 13, 2009 17:50:18
sachok
Доделал:) У меня работало.

Добавлено: Ср май 13, 2009 18:10:31
mr_smit
Вот настоящий человек. Спасибо sachok!!!!!!!!

Только я не понял эту строчку:

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

volt=5120/1024*volt;
Можно поподробней.

Добавлено: Ср май 13, 2009 19:30:59
sachok
5120(Vref) - это опорное напряжение в мили вольтах. Почему 5,12В - потому что так точнее у меня меряет, делится нацело.:)
1024 - 2^10 - 10-ти битный режим АЦП.
потом это всё умножаем на результат преобразавания АЦП можна в ДШ посмотреть формулу там есть.

Добавлено: Ср май 13, 2009 20:28:46
mr_smit
Спасибо