Страница 1 из 1
Вывести значение с АЦП
Добавлено: Вт фев 03, 2009 22:58:49
Lockdog
Вот есть код:
Код: Выделить всё
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.
Прошу вашей помощи.
Добавлено: Ср фев 04, 2009 09:30:02
xDevs
Код: Выделить всё
unsigned char adc_value[4];
sprintf(adc_value,"%04X",ADCW);
for (int i=0;i<4;i++) lcd_putchar(adc_value[i]);
Наподобие этого. выводит 4 цифры в hex.
Добавлено: Ср фев 04, 2009 10:10:16
Danko
версия для 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);
Добавлено: Пт фев 06, 2009 03:19:44
Sounds
Помогите разобраться с расчётом АЦП.
Как мне посчитать чему будет равен АЦП при 1 и 2 вольтах?
Если я правильно понял то это делается так(Для 10 битного АЦП):
210 - это не 210, а два в 10-той степени!!!
Для одного вольта - 1*(210-1)/5=1023/5=204.6=1V
Для двух вольт - 2*(210-1)/5=2046/5=409.2=2V
Правильный это подсчёт или нет?
Добавлено: Пт фев 06, 2009 23:56:40
Иван23
самое простое есть разрядность ацп к примеру 10, или 1024 состояния,и есть опорное напр. например 5.12в,то на одну единицу приходится 0,005в или 5мв, если опорное 2.56 то на шаг получится 0,0025в или 2,5мв,дальше умножаем и усе

Добавлено: Сб фев 07, 2009 00:57:22
Sounds
Спасибо за ответ!
А можно это в виде формулы изложить?
Добавлено: Сб фев 07, 2009 01:13:15
diehard
Гы, пажалста!
Формула: Vref/2^N * ADCW
Например Vref 5,12; ADCW=512; Разрядность 10
5,12/2^10*512=2,56V
Только надо учесть "шум" ADC для корректировки значения. Его обычно отнимают от полученного значения.
Тогда получится так : Vref/2^N * (ADCW-Noise), где Noise и есть значение "шума".
Добавлено: Вс фев 08, 2009 18:28:37
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
ничего не работает(
Добавлено: Вс фев 08, 2009 19:18:26
dosikus
Проще простого...
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;
}
}
Смотрите по ссылке , движок форума правит код по своему...
Добавлено: Вс фев 08, 2009 19:53:09
sachok
Что то у меня ничего не получилось(
Добавлено: Вс фев 08, 2009 22:08:23
sachok
Нашол кусок исходника для настройки АЦП 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кГц
Добавлено: Пн фев 09, 2009 01:30:06
GRAF
Код: Выделить всё
/* Настройка АЦП*/
ACSR= _BV(ACD);//отключаем аналоговый компаратор
ADMUX=0x03;// Аналоговый канал- вывод ADC3
/* Несихронизированный режим АЦП с делением частоты на 64*/
ADCSRA= _BV(ADEN) | _BV(ADSC)| _BV(ADFR) |
_BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
Я вот так АЦП настраивал, всё просто вроде.
8-я мега.
Добавлено: Вт фев 10, 2009 08:30:36
dt_andrew
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
ничего не работает(
странно а у меня все работает
код взят из цикла статей Рюмика - правильно
Добавлено: Вт фев 10, 2009 13:43:00
sachok
Та я уже сам всё настроил:)