Технический форум по робототехнике.
Lockdog » 03 фев 2009, 22:53
Вот есть код:
Код: Выделить всё • Развернуть 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). Как это можно сделать?
Myp » 03 фев 2009, 23:07
наверноп рочитать курс АВРчика особенно задание где он объясняет как работать с дисплеем
Lockdog » 03 фев 2009, 23:24
Кто б сомневался, что кто-нибудь так ответит. Я знаю с помощью каких функций выводить СТРОКОВЫЕ данные, а тут тип unsigned int - это вывести у меня не получается.(((
avr123.nm.ru » 03 фев 2009, 23:40
Lockdog писал(а): результат записывается в ADCW, мне надо это значение вывести на дисплей (HD44780). Как это можно сделать?
Несколько способов, выбирайте -
http://avr123.nm.ru/z5.htm И в примерах к CVAVR посмотрите.
Lockdog » 03 фев 2009, 23:56
Вы все издеваетесь что-ли? Там 4\5 урока про усарт и несколько функций для LCD. Там не описано ничего, кроме как выводить СТРОКИ
snayperAlfa » 04 фев 2009, 00:02
Щас я те напишу.
Код: Выделить всё • Развернуть a=ADCH; [color=#40BF00]//измениш тут свой регистр[/color] // 20ms delay delay_ms(20); // вот ут сразу посчитать напряжение //float shag =0.01953125; //float result; //result=a*shag; //sprintf(buffer,"%f",result); lcd_clear(); sprintf(buffer,"Volt= %d\n",a); lcd_puts(buffer); delay_ms(500);
Lockdog » 04 фев 2009, 00:17
Вот сделал так:
Код: Выделить всё • Развернуть unsigned char adc_sharp; char buffer; adc_sharp=ADCW; lcd_gotoxy(0,1); sprintf(buffer,"adc= %d\n",adc_sharp); lcd_puts(buffer);
Две ошибки одинаковые вылезает:
Error: E:\Documents\Robotics\CAVR\main\main2.c(204): function argument #1 of type 'unsigned char' is incompatible with required parameter of type 'unsigned char *'
snayperAlfa » 04 фев 2009, 00:28
Забыл написать
Код: Выделить всё • Развернуть char buffer[20];
Lockdog » 04 фев 2009, 00:48
Спасибо, заработало.
avr123.nm.ru » 04 фев 2009, 00:57
Lockdog писал(а): Вы все издеваетесь что-ли? Там 4\5 урока про усарт и несколько функций для LCD.
Правильно. Там рассказано как преобразовать данные для форматированого вывода КУДА ЛИБО - аналогично и на UART и на LCD
Lockdog писал(а): Там не описано ничего, кроме как выводить СТРОКИ
ВРАНЬЕ очевидное ! Вам и надо строку вывести на LCD содержащую ваши данные с АЦП.
КАК И УКАЗАНО ! Открываем хелп CVAVR и смотрим пример
Код: Выделить всё • Развернуть /* prepare the displayed temperatures */ /* in the display_buffer */ sprintf(display_buffer, "t0=%-i.%-u%cC\nt1=%-i.%-u%cC", t0/10,abs(t0%10),0xdf,t1/10,abs(t1%10),0xdf); /* display the temperatures */ lcd_clear(); lcd_puts(display_buffer);
====================
Кроме того
в посте я вам написал что вывод есть в примерах CVAVR - смотрите thermlcd.c
Lockdog » 04 фев 2009, 01:17
Мне сказали искать про вывод данных на LCD, там sprintf не описывался. Можно было сразу написать, за что спасибо snayperAlfa , а не отсылать на километровые страницы курса.
avr123.nm.ru » 04 фев 2009, 01:24
Lockdog писал(а): Мне сказали искать про вывод данных на LCD, там sprintf не описывался.
Ну это же не единственый способ вывода.
Там описан вывод отдельных символов. Вы можете преобразовать данные в символы и вывести их.
Ведь
sprintf сильно расходует память программ - первый вызов занимет около 430 слов памяти программ.
Добавлено спустя 5 минут 6 секунд: Lockdog писал(а): а не отсылать на километровые страницы курса.
Я СРАЗУ в посте и написал:
И в примерах к CVAVR посмотрите. Вы посмотрели ?