Например TDA7294

Форум РадиоКот :: Просмотр темы - Вывести значение с АЦП
Форум РадиоКот
https://radiokot.ru/forum/

Вывести значение с АЦП
https://radiokot.ru/forum/viewtopic.php?f=20&t=13465
Страница 1 из 1

Автор:  Lockdog [ Вт фев 03, 2009 22:58:49 ]
Заголовок сообщения:  Вывести значение с АЦП

Вот есть код:
Код:
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;

Получается, что результат записывается в ADCW, мне надо это значение вывести на дисплей (HD44780). Как это можно сделать?
Через функции lcd_putsf или lcd_puts не получается, так как ADCW имеет тип unsigned char.
Прошу вашей помощи.

Автор:  xDevs [ Ср фев 04, 2009 09:30:02 ]
Заголовок сообщения: 

Код:
unsigned char adc_value[4];

sprintf(adc_value,"%04X",ADCW);
for (int i=0;i<4;i++) lcd_putchar(adc_value[i]);


Наподобие этого. выводит 4 цифры в hex.

Автор:  Danko [ Ср фев 04, 2009 10:10:16 ]
Заголовок сообщения: 

версия для 8 бит ADC
Код:
               unsigned char  fd;

                fd=read_adc(1); // считать АЦП со входа 1
               
                i=0;
                while (fd>=100) {
                        fd-=100;
                        i++;
                }
                lcd_putchar('0' + i);
               
                i=0;
                while (fd>=10) {
                        fd-=10;
                        i++;
                }
                lcd_putchar('0' + i);
               
                lcd_putchar('0' + fd);

Автор:  Sounds [ Пт фев 06, 2009 03:19:44 ]
Заголовок сообщения: 

Помогите разобраться с расчётом АЦП.
Как мне посчитать чему будет равен АЦП при 1 и 2 вольтах?
Если я правильно понял то это делается так(Для 10 битного АЦП):
210 - это не 210, а два в 10-той степени!!!
Для одного вольта - 1*(210-1)/5=1023/5=204.6=1V
Для двух вольт - 2*(210-1)/5=2046/5=409.2=2V
Правильный это подсчёт или нет?

Автор:  Иван23 [ Пт фев 06, 2009 23:56:40 ]
Заголовок сообщения: 

самое простое есть разрядность ацп к примеру 10, или 1024 состояния,и есть опорное напр. например 5.12в,то на одну единицу приходится 0,005в или 5мв, если опорное 2.56 то на шаг получится 0,0025в или 2,5мв,дальше умножаем и усе :shock:

Автор:  Sounds [ Сб фев 07, 2009 00:57:22 ]
Заголовок сообщения: 

Спасибо за ответ!
А можно это в виде формулы изложить?

Автор:  diehard [ Сб фев 07, 2009 01:13:15 ]
Заголовок сообщения: 

Гы, пажалста! :))
Формула: Vref/2^N * ADCW :)))

Например Vref 5,12; ADCW=512; Разрядность 10
5,12/2^10*512=2,56V

Только надо учесть "шум" ADC для корректировки значения. Его обычно отнимают от полученного значения.
Тогда получится так : Vref/2^N * (ADCW-Noise), где Noise и есть значение "шума".

Автор:  sachok [ Вс фев 08, 2009 18:28:37 ]
Заголовок сообщения: 

Разъясните ещё мне как вывести значение напряжения на АЦП на ЖКИ 16*2.
Делал так:
Код:
// Place your code here
      volt=read_adc(0);
      volt=5/1024*volt;
      lcd_gotoxy(0,0);                      //почати вивід тексту з 0,0
      lcd_putsf("U=");                      //вивести на LCD
      lcd_putchar (volt/1000+0x30);         //показати значення одиниць
      lcd_putsf (",");                      //вивести на LCD
      lcd_putchar ((volt/100)%10+0x30);     //показати значення десятих                           
      lcd_putchar ((volt/10)%10+0x30);      //показати значення сотих
      lcd_putsf ("V");                      //вивести на LCD

ничего не работает(

Автор:  dosikus [ Вс фев 08, 2009 19:18:26 ]
Заголовок сообщения: 

Проще простого...
http://www.remexpert.com/ipb/index.php?showtopic=1285

Код:
unsigned char asc[5];
void itoa2(unsigned int binval)
{
int step[]={10000,1000,100,10,1};
unsigned int temp,val;
unsigned char i,atemp;
val=binval;
for (i=0 ; i<5>= temp)

  {
   atemp++;
   val-=temp;
  }
  asc[i]=atemp;
}
}


Смотрите по ссылке , движок форума правит код по своему...

Автор:  sachok [ Вс фев 08, 2009 19:53:09 ]
Заголовок сообщения: 

Что то у меня ничего не получилось(

Автор:  sachok [ Вс фев 08, 2009 22:08:23 ]
Заголовок сообщения: 

Нашол кусок исходника для настройки АЦП ATmega8 4MHz но нечего не понимаю в нем. Может можна както переделать для ATmega16 11.0592MHz???
Код:
// инициализация АЦП на PC0(ADC0)
ADMUX &= 0xdf & 0x7e & 0xf0; ADMUX |= 0x40 ;            //10бит;Vref=AVCC;канал-1 PC0
ADCSRA &=0xfb; ADCSRA |= 0x80 | 0x40 | 0x02 | 0x03;     //Fацп=125кГц

Автор:  GRAF [ Пн фев 09, 2009 01:30:06 ]
Заголовок сообщения: 

Код:
/* Настройка АЦП*/

ACSR= _BV(ACD);//отключаем аналоговый компаратор
ADMUX=0x03;// Аналоговый канал- вывод ADC3

/* Несихронизированный режим АЦП с делением частоты на 64*/
ADCSRA= _BV(ADEN) | _BV(ADSC)| _BV(ADFR) |
 _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);

Я вот так АЦП настраивал, всё просто вроде.

8-я мега.

Автор:  dt_andrew [ Вт фев 10, 2009 08:30:36 ]
Заголовок сообщения: 

sachok писал(а):
Разъясните ещё мне как вывести значение напряжения на АЦП на ЖКИ 16*2.
Делал так:
Код:
// Place your code here
      volt=read_adc(0);
      volt=5/1024*volt;
      lcd_gotoxy(0,0);                      //почати вивід тексту з 0,0
      lcd_putsf("U=");                      //вивести на LCD
      lcd_putchar (volt/1000+0x30);         //показати значення одиниць
      lcd_putsf (",");                      //вивести на LCD
      lcd_putchar ((volt/100)%10+0x30);     //показати значення десятих                           
      lcd_putchar ((volt/10)%10+0x30);      //показати значення сотих
      lcd_putsf ("V");                      //вивести на LCD

ничего не работает(


странно а у меня все работает
код взят из цикла статей Рюмика - правильно

Автор:  sachok [ Вт фев 10, 2009 13:43:00 ]
Заголовок сообщения: 

Та я уже сам всё настроил:)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/