LCD + CVAVR

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 10
Зарегистрирован: Пн янв 26, 2009 22:49:48

Сообщение aske12345 »

Доброго времени суток!
Написал небольшой код, который по задумке должен опрашивать 4 канала ацп mcp3208(12бит), преобразовывать и выводить полученные значения на 4-строчный жки.
Проблема с выводрм на ЖКИ.
3 из 4-х значений надо выводить с точностью до десятых(макс.зн-е 50,0)
попытаюсь объяснить проблему на его примере. Делаю так:
Код:

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

     sprintf(lcd_buffer,"%i,%u",In_NIn/10,In_NIn%10);
     lcd_gotoxy(10,3);  
     lcd_puts(lcd_buffer);
Суть проблемы в том, что измеряемое напряжение меняется и при попытке циклически выводить получается ерунда и на жки остаются лишние ранее выведенные знаки.
Пробовал очищать экран перед выводом нового значения - видно как экран мерцает, перед выводом значения выводить в нужные позиции "пустые символы" - мерцает меньше, но всё равно на некоторых ЖКИ весьма заметно. :( Отсюда вопрос как умные люди это делают? Исходник приложил и файл в протеусе тоже на всякий случай.
Вложения
CVavr1.rar
(140.12 КБ) 131 скачивание
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Кроме как очищать экран или выводить пустые символы, вариантов нет.
Реклама
Вымогатель припоя
Сообщения: 536
Зарегистрирован: Пт ноя 05, 2010 12:53:36
Откуда: Беларусь Витебск

Сообщение Minor/2 »

Попробуйте использовать putchar();
Выводить каждый разряд можно четко в нужное место, что со sprintf делать не совсем удобно.
Писанины чуть больше, но за то незначащие ноли убирать проще и stdio.h можно выкинуть, а это реально сбережет памяти кусок.


***************************************

char digits [10] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

тыр там пыр-тыр ...

lcd_gotoxy(туда,сюда);
lcd_putchar(digits[(In_NIn/100)]);
lcd_putchar(digits[(In_NIn%100)/10]);
lcd_putchar(",");
lcd_putchar(digits[(In_NIn%10)]);

****************************************
Контактная информация:
Родился
Сообщения: 10
Зарегистрирован: Пн янв 26, 2009 22:49:48

Сообщение aske12345 »

Minor/2 писал(а):Попробуйте использовать putchar();
Выводить каждый разряд можно четко в нужное место, что со sprintf делать не совсем удобно.
Писанины чуть больше, но за то незначащие ноли убирать проще и stdio.h можно выкинуть, а это реально сбережет памяти кусок.


***************************************

char digits [10] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

тыр там пыр-тыр ...

lcd_gotoxy(туда,сюда);
lcd_putchar(digits[(In_NIn/100)]);
lcd_putchar(digits[(In_NIn%100)/10]);
lcd_putchar(",");
lcd_putchar(digits[(In_NIn%10)]);

****************************************
спасибо за помощь, правда я сделал по другому :

вместо

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

sprintf(lcd_buffer,"%i,%u",In_NIn/10,In_NIn%10);
написал

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

sprintf(lcd_buffer,"%3i,%1u",In_NIn/10,In_NIn%10);
и проблема вроде решилась
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

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