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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Babulesnik писал(а):
Если удаляю скобку,вылазит куча ошибок

Скобку надо удалить. А что пишет в ошибках?
Babulesnik
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Вт мар 06, 2012 19:59:00

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

Сообщение Babulesnik »

Блин,вообще ппц. Залил hex файл отсюда http://avrlab.com/node/80 дисплей повесил на порты как в примере.Даже подключил другой ЖКИ,аналогичный только с синей подсветкой.Все идентично с примером но не работает((((
Babulesnik
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Вт мар 06, 2012 19:59:00

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

Сообщение Babulesnik »

Профи,помогите пожалуйста,извелся весь.
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.

Какой у тебя компилятор-то??
Babulesnik
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Вт мар 06, 2012 19:59:00

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

Сообщение Babulesnik »

R_ura писал(а):
Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.

Какой у тебя компилятор-то??


Программирую в AVRStudio 5 .Компилятор AVR/GNU C Compiller
Babulesnik
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Вт мар 06, 2012 19:59:00

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

Сообщение Babulesnik »

Есть идеи с чем это может быть связано? Интересуют любые зацепки
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки


А схему нельзя посмотреть?

Вот выложил здесь проект протеуса +прошивка. Посмотри как ЖКИ подключен правильно. Можешь там же убедится, что работает нормально. Там таже бибилотека для ЖКИ, что скидывал тебе выше.
Babulesnik
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Вт мар 06, 2012 19:59:00

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

Сообщение Babulesnik »

R_ura писал(а):
Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки


А схему нельзя посмотреть?

Вот выложил здесь проект протеуса +прошивка. Посмотри как ЖКИ подключен правильно. Можешь там же убедится, что работает нормально. Там таже бибилотека для ЖКИ, что скидывал тебе выше.

Спасибо,только я не вижу прикрепленных файлов или ссылки.
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Babulesnik писал(а):
Спасибо,только я не вижу прикрепленных файлов или ссылки.


Пардон, пропустил..
viewtopic.php?f=21&t=66939

там последнее сообщение сейчас. Архив.. Если у тебя есть мега32, можешь ее прошить этой прошивкой и вживую проверить свой жки..
Babulesnik
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Вт мар 06, 2012 19:59:00

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

Сообщение Babulesnik »

Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Babulesnik писал(а):Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).

Работает?
А что юзать-то будешь?
Я только не помню, там для двухстрочного дисплея надо что-то в инициализации менять или нет? В даташите посмотри. Или сделай такой же проект в протеусе и замени этот 4-х строчный индикатор на двухстрочный. Увидишь тогда. Мне кажется что должен нормально работать и с двустрочным. .
Аватара пользователя
uni
Встал на лапы
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург
Контактная информация:

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

Сообщение uni »

Вот бедолаги. Наваял я код для супер пупер более менее универсальной работы с этим контроллером. Правда он на С++, но это только обёртка. Методы класса CLCD легко выдираются в отдельные функции, если кому оно надо. Код работы с ЖКИ у меня унифицирован максимально, причём работает одновременно в двух компиляторах: IAR AVR и AVR GCC.

Вот оно счастье, работающее, для тех, кто понимает:
На С++: https://mysvn.ru/schoolbell/pbiidemo/LCD.cpp
На бейсике: https://mysvn.ru/schoolbell/pbiidemo/bascom/

На бейсик я просто портировал с С++, это более ограниченная версия, которую я сделал только для того, чтобы удобно выводить там (bascom) русские символы. Исходник на С++ заточен пока на 4-х проводный интерфейс, хотя там есть код и для полного соединения через 8-битную шину, но я его не тестировал. Что же касается 4-проводного взаимодействия, то вы можете все выводы управления индикатором сажать на абсолютно любые ноги контроллера, т.е. вообще, хоть по одному выводу на каждом порту. Я говорю про: E, RW, RS и D4-D7. RW можно либо использовать, либо нет (отключаемо).

Методы, реализованные в классе, смотрите тут: https://mysvn.ru/schoolbell/pbiidemo/LCD.h
Есть почти всё, даже такое извращение, как использование 8-ми пользовательских символов для отображения буфера из ОЗУ контроллера на экране индикатора (static void Draw( uint8_t Buffer[], uint8_t Row, uint8_t Col );).

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

Инициализация для индикаторов WH1602B-YGK-CTK, WH1602B-YMI-CTK, WH2004A-YYH-CP для двустрочного отображения инфы:
LCD_16x2_Init.gif
Инициализация WH1602B
(130.09 КБ) 42145 скачиваний

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

    WriteLow4bits( 0x03 );
    WriteStrobe( 40 );          // -> 0x03
    WriteStrobe( 40 );          // -> 0x03

    WriteLow4bits( 0x02 );
    WriteStrobe( 40 );          // -> 0x02
    WriteStrobe( 40 );          // -> 0x02

    WriteLow4bits( 0x2C );
    WriteStrobe( 40 );          // -> 0x0C

    WriteData( TYPE_COMMAND, 0x06 ); // 1, I/D, SH

    Clear(); // -> 0x01

    WriteData( TYPE_COMMAND, 0x0C ); // 1, D, C, B

    Home(); // -> 0x02

Работает это заклинание везде. Написано в терминах моего класса. Везде - это в железе, в IAR, в AVR GCC, в Proteus. Собственно, это малая часть чуть большего проекта.
Внимание. Не забываем, что, если не используется RW, то он должен жёстко сидеть на земле, а если используем, то настраиваем на вывод перед инициализацией. В моём примере используется функция WriteLow4bits(), которая это подразумевает. Я очень долго отыскивал у себя баг, когда просто напросто забыл настроить на вывод RS и RW перед инициализацией. Понял я это только после убийства кучи времени и наблюдением за состоянием вывода RS на осциллографе. Меня очень удивил имевшийся там потенциал, поэтому у меня в коде инициализации я сначала настраиваю эти линии. Я это пишу для тех, кто привык к другим вариантам работы с LCD, т.к. у меня WriteLow4bits() изменяет состояние только 4-х линий данных и не более того. Об этом нужно помнить.

Добавлю только, что класс ещё до конца не дописан, т.к. мне осталось работу с курсорами доделать и прочие мелочи жизни, но все основные функции он исполняет. Я видел только две более менее нормальные библиотеки для работы с HD44780. Одна на асме, другая на Си (для AVR). Поскольку я давно уже отошёл от асма и от Си, то они мне не очень были по душе. Ссылки, к сожалению, я забыл где видел. Может быть даже здесь.

Пробуйте. Да, кстати, перевод каретки функция WriteString() понимает, правда переводит пока только на вторую строку. Это нужно для хранения инициализации экрана во флеш в виде одной строки, вот так:

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

FLASHSTR_DECLARE( char, frmDisplay,
"Дисплей         \n"
"                " );
А считывание и отображение я делаю вот так:

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

    CLCD::Clear();
    CLCD::Home();
    CLCD::WriteString( frmDisplay, 0 ,0 );
   
    FormPaint();
   
    // Отображаем пользовательские символы
    CLCD::Goto( 1, 0 );
    for ( uint8_t i = 0; i < 8; i++ ) CLCD::PutChar(i);
Надеюсь, что таблица перекодировки вам тоже понравится ;)

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

/*   +----------+
     |Таблица символов|
     |Windows (ANSI)  |
     +----------+      +----------+
     |0123456789ABCDEF|      |0123456789ABCDEF|
     +----------+      +----------+
0x00 |( пропущено )   | 0x80 |( пропущено )   |
0x10 |( пропущено )   | 0x90 |( пропущено )   |
0x20 | !"#$%&'()*+,-./| 0xA0 |( пропущено )   |
0x30 |0123456789:;<=>?| 0xB0 |( пропущено )   |
0x40 |@ABCDEFGHIJKLMNO| 0xC0 |АБВГДЕЖЗИЙКЛМНОП|
0x50 |PQRSTUVWXYZ[\]^_| 0xD0 |РСТУФХЦЧШЩЪЫЬЭЮЯ|
0x60 |`abcdefghijklmno| 0xE0 |абвгдежзийклмноп|
0x70 |pqrstuvwxyz{|}~ | 0xF0 |рстуфхцчшщъыьэюя|
     +----------+      +----------+
*/

// Таблица перекодировки из CP1251 (WIN)
#ifdef __ICCAVR__
    __flash uint8_t CP1251_TO_CPHD44780[ 256 ] = {
#elif defined __GNUC__
    PROGMEM uint8_t _CP1251_TO_CPHD44780[ 256 ] = {
#endif
//PROGMEM unsigned char CP1251_TO_CPHD44780[ 256 ] = {
      /* +----------+
         |  00  |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  0A  |  0B  |  0C  |  0D  |  0E  |  0F  | */
/* CGRAM:  (1)    (2)    (3)    (4)    (5)    (6)    (7)    (8)    (1)    (2)    (3)    (4)    (5)    (6)    (7)    (8)    */
/* 0x00 */ 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0A , 0x0B , 0x0C , 0x0D , 0x0E , 0x0F , //

/* 0x10 */ 0x10 , 0x11 , 0x12 , 0x13 , 0x14 , 0x15 , 0x16 , 0x17 , 0x18 , 0x19 , 0x1A , 0x1B , 0x1C , 0x1D , 0x1E , 0x1F , //
/* 0x20 */ 0x20 , 0x21 , 0x22 , 0x23 , 0x24 , 0x25 , 0x26 , 0x27 , 0x28 , 0x29 , 0x2A , 0x2B , 0x2C , 0x2D , 0x2E , 0x2F , //
/* 0x30 */ 0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 , 0x37 , 0x38 , 0x39 , 0x3A , 0x3B , 0x3C , 0x3D , 0x3E , 0x3F , //
/* 0x40 */ 0x40 , 0x41 , 0x42 , 0x43 , 0x44 , 0x45 , 0x46 , 0x47 , 0x48 , 0x49 , 0x4A , 0x4B , 0x4C , 0x4D , 0x4E , 0x4F , //
/* 0x50 */ 0x50 , 0x51 , 0x52 , 0x53 , 0x54 , 0x55 , 0x56 , 0x57 , 0x58 , 0x59 , 0x5A , 0x5B , 0x20 , 0x5D , 0x5E , 0x5F , //
/* 0x60 */ 0x60 , 0x61 , 0x62 , 0x63 , 0x64 , 0x65 , 0x66 , 0x67 , 0x68 , 0x69 , 0x6A , 0x6B , 0x6C , 0x6D , 0x6E , 0x6F , //
/* 0x70 */ 0x70 , 0x71 , 0x72 , 0x73 , 0x74 , 0x75 , 0x76 , 0x77 , 0x78 , 0x79 , 0x7A , 0x5B , 0x20 , 0x5D , 0xE9 , 0x7F , //
       /*|  00  |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  0A  |  0B  |  0C  |  0D  |  0E  |  0F  | */
/* 0x80 */ 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , //
/* 0x90 */ 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , //
/* 0xA0 */ 0xCB , 0x20 , 0x49 , 0x69 , 0x04 , 0x20 , 0xFE , 0xEF , 0xA2 , 0xCC , 0x00 , 0xC9 , 0x20 , 0x20 , 0x20 , 0x02 , //
/* 0xB0 */ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xB5 , 0x4E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , //
/* 0xC0 */ 0x41 , 0xA0 , 0x42 , 0xA1 , 0xE0 , 0x45 , 0xA3 , 0xA4 , 0xA5 , 0xA6 , 0x4B , 0xA7 , 0x4D , 0x48 , 0x4F , 0xA8 , //
/* 0xD0 */ 0x50 , 0x43 , 0x54 , 0xA9 , 0xAA , 0x58 , 0xE1 , 0xAB , 0xAC , 0xE2 , 0xAD , 0xAE , 0x62 , 0xAF , 0xB0 , 0xB1 , //
/* 0xE0 */ 0x61 , 0xB2 , 0xB3 , 0xB4 , 0xE3 , 0x65 , 0xB6 , 0xB7 , 0xB8 , 0xB9 , 0xBA , 0xBB , 0xBC , 0xBD , 0x6F , 0xBE , //
/* 0xF0 */ 0x70 , 0x63 , 0xBF , 0x79 , 0xE4 , 0x78 , 0xE5 , 0xC0 , 0xC1 , 0xE6 , 0xC2 , 0xC3 , 0xC4 , 0xC5 , 0xC6 , 0xC7 , //
      /* |  00  |  01  |  02  |  03  |  04  |  05  |  06  |  07  |  08  |  09  |  0A  |  0B  |  0C  |  0D  |  0E  |  0F  |
         +----------+ */
};
#ifdef __GNUC__
    FU08T_PTR CP1251_TO_CPHD44780(_CP1251_TO_CPHD44780);
#endif
Россия навсегда!
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Здравствуйте!
Не уверен что пишу в нужную тему, но более подходящего не нашел, а создавать мусор не хочется.

Подскажите пожалуйста распиловку ЖКИ LCM1602K-FSW-GBW-R, и на каком контролере она устроена.

Пытался найти сам, но нечего путного не вышло.

В заранее спасибо!
STM32F4 Discovery + KEIL + Windows 7
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Mr.Denis писал(а):Подскажите пожалуйста распиловку :) ЖКИ LCM1602K-FSW-GBW-R,


По первой же ссылке Гуголя имеем PDF, из которого и контроллер KS0066U, и распиловка

http://www.displayfuture.com/engineerin ... M1602K.pdf
Аватара пользователя
techlab
Родился
Сообщения: 17
Зарегистрирован: Сб дек 03, 2011 18:03:34
Откуда: Khark0xFF.UA
Контактная информация:

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

Сообщение techlab »

Уважаемые коты!
Есть вот такая библиотечка для работы с HD44780, что-то не могу понять как выводить данные, пока только курсором управлять могу.

ну и собственно header

Писано в IAR 5.3
Вот такая вариация на тему putchar что-то не работает.

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

void lcd_puts(char *s, char clr)
{
  if(clr) LCDClear();
  LCDxy(0,0);
  printf(s);
}

Есть у кого какие мысли?
Есть. Код оформляем как вложение.
Gudd-Head
Опыт прямо пропорционален количеству аппаратуры выведенной из строя...
Аватара пользователя
T-Xen
Родился
Сообщения: 15
Зарегистрирован: Пн янв 30, 2012 17:09:59
Откуда: Тучково

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

Сообщение T-Xen »

Использую lcd_lib с сайта Cheap-Enable. МК- ATmega32. Прошиваю через PonyProg2000. В Протеусе всё работает, вот в железе не хочет(((
Смотрю осциллографом - никаких импульсов МК не выдает на дисплей. Хотя простой хрестоматийный пример со светодиодом работает...
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

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

Сообщение phanis »

А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

phanis писал(а):А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.

не препроцессор, а при помощи команды в makefile или простого батничка - можно
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
uni
Встал на лапы
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург
Контактная информация:

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

Сообщение uni »

Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART? Препроцессор и изменение исходника на этапе компиляции - это статические методы, если захочется чего-то большего, то всё равно будете использовать таблицу перекодировки. Если вам так дорог каждый байт, то можно использовать только верхние 128 символов таблицы, проверяя код символа перед преобразованием: если меньше 128, то посылаете как есть, если больше, то перекодируете. Т.о. можно сохранить 128 байт флеша или 64 команды. Вряд ли ради этого стоит создавать дополнительные усложнения.
Россия навсегда!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

uni писал(а):Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART?
проблема явно высосана из пальца: на 2 строки в 16 знаков выводить что-то принятое по USART - это из разряда задач "от нечего делать". в этом случае можно и внутреннюю перекодировку реализовать, раз делать нечего. а в реальности вывод на дисплей ведется ИЗНУТРИ МК, и статические строки нужнее и востребованнее.
битва с дураками проиграна, победители торжествуют. слава победителям!
Ответить

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