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

LCD + CVAVR

Добавлено: Пн фев 22, 2016 19:18:20
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);
Суть проблемы в том, что измеряемое напряжение меняется и при попытке циклически выводить получается ерунда и на жки остаются лишние ранее выведенные знаки.
Пробовал очищать экран перед выводом нового значения - видно как экран мерцает, перед выводом значения выводить в нужные позиции "пустые символы" - мерцает меньше, но всё равно на некоторых ЖКИ весьма заметно. :( Отсюда вопрос как умные люди это делают? Исходник приложил и файл в протеусе тоже на всякий случай.

Re: LCD + CVAVR

Добавлено: Пн фев 22, 2016 23:50:48
Аlex
Кроме как очищать экран или выводить пустые символы, вариантов нет.

Re: LCD + CVAVR

Добавлено: Вт фев 23, 2016 07:38:45
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)]);

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

Re: LCD + CVAVR

Добавлено: Вт фев 23, 2016 09:32:08
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);
и проблема вроде решилась