Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Как с помощью функции lcd_putch(); (из библиотеки уважаемого Alex)вывести однозначное десятичное число?
Если пробую lcd_putch(5); выводится невесть что...
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

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

lcd_putch выводит символ с ASCII-кодом, который передаём в функцию.
Чтобы вывести число, нужно его преобразовать в строку (массив символов) и выводить по-символьно, либо с помощью lcd_puts (что тоже самое).

Если оно у Вас не больше 9-ти, то можно так:

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

unsigned char val=5;

lcd_putch(val + '0');
goldskif
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт окт 25, 2013 17:13:03

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение goldskif »

А кто-нибудь сталкивался с таким:
ЖКИ на базе GDM1601a (аналог HD44780) отображает только 8 символов на экране. Из 16. Дальше - пусто.
---
Сам себе отвечу.
Указал в коде
Config Lcd = 16 * 1
а надо было
Config Lcd = 16 * 1a
----
Нее.. все равно глюк вылезает. ((
Когда нужно писать на экране
Time:00:59 - минуты упорно не хотят отображаться
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение *Trigger* »

А Вы знаете, что дисплей в 16 символов и 1 строку - это 8*2, у которого строки друг за другом. Если просто так в него писать (как в одну строку), то символы после восьмого не отобразятся. Процедура записи состоит из двух частей. Сначала левую половину пишем, потом правую.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
goldskif
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт окт 25, 2013 17:13:03

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение goldskif »

Я понял в чем глюк был. Когда я просто пишу:
Lcd " Длинное слово ", то И протеус, и железка отображают его правильно.
А вот когда указывал место через:
Locate 1 , 6
Lcd Minut
То протеус отображал правильно, а железка обрезала все после 8 символа.
Команда Locate по разному понимается Протеусом и железкой.
Видимо, железка считает, что если есть 1 строка, то должна быть и 2.
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение nirq »

Не "понял, в чём глюк", а пытаешься угадать правильную последовательность нажимания кнопок.

Набираем в интернете название дисплея, открываем первую попавшуюся сссылку, рассматриваем картинку с словами "Display character address code: Display position / DDRAM address".
Не помогло.

В том же самом интернете набираем "lcd.pdf 44780 ктц мк" (это не выводится из каких-либо рассуждений, просто магические символы), получаем документ с надписью "КТЦ-МК".
Там всё даже по-русски, но... многабукв ни о чём, а кнопки-то какие нажимать? Чтоб железка не считала строки через Locate? Глюк же! И протеус!
triest
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вт апр 09, 2013 20:43:04

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение triest »

А как на индикатор данные расчетов вывести (из регистра)?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

Преобразовать число из регистра в цифры, например в двоично-десятичном формате.
Далее смотрим таблицу символов 44780 — откуда начинаются цифры (30h) и к цифре прибавляем этот адрес. Всё, печатаем очередную цифру.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
pioneer1234
Встал на лапы
Сообщения: 109
Зарегистрирован: Вт янв 17, 2012 00:13:14
Откуда: Кременчуг

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение pioneer1234 »

Добрый вечер уважаемые коты.
Помогите советом, подарили символьный ЖКИ 4*20 подключил его к LTP а он не хочет нормально работать,
третья строка практически не показывает а четвертая не показывает первые три символа.
Подскажите что с пациентом

Изображение
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение vitalik_1984 »

Пациент скорее мертв, чем жив. Очень похоже на ситуацию, когда резиновые шлейфы не прилегают как положено...
Аватара пользователя
pioneer1234
Встал на лапы
Сообщения: 109
Зарегистрирован: Вт янв 17, 2012 00:13:14
Откуда: Кременчуг

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение pioneer1234 »

vitalik_1984 писал(а):Пациент скорее мертв, чем жив. Очень похоже на ситуацию, когда резиновые шлейфы не прилегают как положено...

А такое кто нибудь пробовал лечить? А то жалко как то...
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение nirq »

Разбираешь, собираешь. Без гарантии. Дела на полчаса с перекурами, конструкция на уровне табуретки по сложности. Разрешение нужно? Я разрешаю.
Или пользуешься как есть. Нижние две строки можно закрыть картонкой, чтоб не смущали. Для отладочных целей вообще без разницы.

У меня "чиненный" уже года три как живёт.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Полтергейст какой-то: выводятся только первые 2 символа. Если убрать команды на их вывод, выводятся символы на 3 и 4 месте. А чтобы все сразу?
Спойлер// MK pic16f72
// работа с LCD
#include <pic.h>
#include "lcd.h"
//----------
__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); // биты конфигурации программатора
//----------

volatile unsigned char cnt_pause = 0;

//----------
void interrupt isr(void) // обработчик прерываний
{
if (T0IF && T0IE) // ветка опроса флага прерывания по переполнению TMR0
{
T0IF = 0; // сброс флага прерывания по переполнению TMR0
TMR0+= 6; // предзагрузка TMR0
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0

if(cnt_pause==1) cnt_pause--;

} // конец ППОП TMR0
}
//----------
void podgot (void) // настройки
{
ADCON1 = 0b111; // отключение АЦП
TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
RBPU = 0; // подтягивающие R порта В (0-вкл, 1-выкл) бит регистра OPTION
// Начало настройки TMR0 ----------
T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI
T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт)
PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT
PS2 = 0; // bit 2 Настройка предделителя
PS1 = 0; // bit 1 Настройка предделителя
PS0 = 1; // bit 0 Настройка предделителя
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
T0IF = 0;
// Конец настройки TMR0 ----------
GIE = 1; // разрешены все немаскированные прерывания
}
void pause100 (void)
{
while(cnt_pause) continue; // если cnt_pause не равен 0, продолжение цикла.
cnt_pause=100;
}
// конец объявления функций, используемые в файле----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{
unsigned char cnt_ch=0;
unsigned char val=0;
podgot(); //настройки
lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея
//
for(;;)
{
lcd_gotoxy(0,0);
val=0;
lcd_putch(val + '0');
pause100(); //----------
lcd_gotoxy(0,1);
val=4;
lcd_putch(val + '0');
pause100(); //----------
lcd_gotoxy(0,2);
val=8;
lcd_putch(val + '0');
pause100(); //----------
lcd_gotoxy(0,3);
val=0;
lcd_putch(val + '0');
pause100(); //----------
}
}// end main
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

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

Попробуйте lcd_gotoxy поставить только один раз (на координаты 0,0). Незачем его тыкать перед каждым выводом символа - курсор сам передвинится на следующее знакоместо.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Увы, не помогает: выводятся только первых 2 знака.
Убрал функцию pause100() - без изменений.
P.S. Мне этих символов выводить и выводить. Вот эскиз интерфейса терморегулятора
Вложения
Untitled-1.jpg
(231.52 КБ) 478 скачиваний
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение vitalik_1984 »

как то так можно упростить этот код :roll:

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

{ char val[]={0,8,4,0};
char i;
lcd_gotoxy(0,0);
for (i=0;i<4;i++) {
    lcd_putch(val[i]+'0');
    pause100();
    };
}
 
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

vitalik_1984
Спасибо за идею, но числа-то будут получаться с АЦП. Т.е. одно за одним, от младших разрядов к старшим. Громоздко получается...
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение vitalik_1984 »

Так можно вообще то в обратную сторону листать for(i=4;i<0;i– – ) ;) либо воспользоваться стандартными функциями вывода sprintf () например...
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Решил полностью изменить алоритм вывода: попробовал вывести содержимое массива. И опять выводятся только 2 первых символа!
Спойлер// MK pic16f72
// работа с LCD
#include <pic.h>
#include "lcd.h"
//----------
__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); // биты конфигурации программатора
//----------
const char hello_str[]="Hello !!!";
volatile unsigned char cnt_pause=0;
//----------
void interrupt isr(void) // обработчик прерываний
{
if (T0IF && T0IE) // ветка опроса флага прерывания по переполнению TMR0
{
T0IF = 0; // сброс флага прерывания по переполнению TMR0
TMR0+= 6; // предзагрузка TMR0
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0

if(cnt_pause==1) cnt_pause--;

} // конец ППОП TMR0
}
//----------
void podgot (void) // настройки
{
ADCON1 = 0b111; // отключение АЦП
TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
RBPU = 0; // подтягивающие R порта В (0-вкл, 1-выкл) бит регистра OPTION
// Начало настройки TMR0 ----------
T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI
T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт)
PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT
PS2 = 0; // bit 2 Настройка предделителя
PS1 = 0; // bit 1 Настройка предделителя
PS0 = 1; // bit 0 Настройка предделителя
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
T0IF = 0;
// Конец настройки TMR0 ----------
GIE = 1; // разрешены все немаскированные прерывания
}
void pause100 (void)
{
while(cnt_pause) continue; // если cnt_pause не равен 0, продолжение цикла.
cnt_pause=100;
}
// конец объявления функций, используемые в файле----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{
unsigned char cnt_ch=0;
podgot(); //настройки
lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея
lcd_gotoxy(0,0);
//
for(;;)
{
while(hello_str[cnt_ch])
{
lcd_putch(hello_str[cnt_ch++]);
while(cnt_pause) continue;
cnt_pause=100;
}
}
}// end main

передвинул курсор на другую позицию - без изменений.
Кот гуляет сам по себе, но вблизи холодильника.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Отладчик что показывает?
Ответить

Вернуться в «Периферия»