Страница 45 из 123

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

Добавлено: Чт мар 08, 2012 23:57:05
R_ura
Babulesnik писал(а):
Если удаляю скобку,вылазит куча ошибок
Скобку надо удалить. А что пишет в ошибках?

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

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

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

Добавлено: Пт мар 09, 2012 21:47:59
Babulesnik
Профи,помогите пожалуйста,извелся весь.

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

Добавлено: Пт мар 09, 2012 23:36:33
R_ura
Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.
Какой у тебя компилятор-то??

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

Добавлено: Сб мар 10, 2012 11:41:45
Babulesnik
R_ura писал(а):
Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.
Какой у тебя компилятор-то??
Программирую в AVRStudio 5 .Компилятор AVR/GNU C Compiller

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

Добавлено: Вт мар 13, 2012 14:34:31
Babulesnik
Есть идеи с чем это может быть связано? Интересуют любые зацепки

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

Добавлено: Вт мар 13, 2012 20:18:28
R_ura
Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки
А схему нельзя посмотреть?

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

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

Добавлено: Вт мар 13, 2012 21:46:37
Babulesnik
R_ura писал(а):
Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки
А схему нельзя посмотреть?

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

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

Добавлено: Вт мар 13, 2012 21:54:08
R_ura
Babulesnik писал(а):
Спасибо,только я не вижу прикрепленных файлов или ссылки.
Пардон, пропустил..
http://radiokot.ru/forum/viewtopic.php?f=21&t=66939

там последнее сообщение сейчас. Архив.. Если у тебя есть мега32, можешь ее прошить этой прошивкой и вживую проверить свой жки..

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

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

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

Добавлено: Вт мар 13, 2012 22:21:53
R_ura
Babulesnik писал(а):Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).
Работает?
А что юзать-то будешь?
Я только не помню, там для двухстрочного дисплея надо что-то в инициализации менять или нет? В даташите посмотри. Или сделай такой же проект в протеусе и замени этот 4-х строчный индикатор на двухстрочный. Увидишь тогда. Мне кажется что должен нормально работать и с двустрочным. .

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

Добавлено: Чт мар 15, 2012 21:14:23
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 КБ) 42175 скачиваний

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

    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

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

Добавлено: Сб мар 17, 2012 17:42:06
Mr.Denis
Здравствуйте!
Не уверен что пишу в нужную тему, но более подходящего не нашел, а создавать мусор не хочется.

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

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

В заранее спасибо!

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

Добавлено: Сб мар 17, 2012 22:01:47
Jack_A
Mr.Denis писал(а):Подскажите пожалуйста распиловку :) ЖКИ LCM1602K-FSW-GBW-R,
По первой же ссылке Гуголя имеем PDF, из которого и контроллер KS0066U, и распиловка

http://www.displayfuture.com/engineerin ... M1602K.pdf

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

Добавлено: Вс мар 25, 2012 22:43:22
techlab
Уважаемые коты!
Есть вот такая библиотечка для работы с HD44780, что-то не могу понять как выводить данные, пока только курсором управлять могу. ну и собственно header Писано в IAR 5.3
Вот такая вариация на тему putchar что-то не работает.

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

void lcd_puts(char *s, char clr)
{
  if(clr) LCDClear();
  LCDxy(0,0);
  printf(s);
}
Есть у кого какие мысли?
Есть. Код оформляем как вложение.
Gudd-Head

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

Добавлено: Пн мар 26, 2012 16:30:05
T-Xen
Использую lcd_lib с сайта Cheap-Enable. МК- ATmega32. Прошиваю через PonyProg2000. В Протеусе всё работает, вот в железе не хочет(((
Смотрю осциллографом - никаких импульсов МК не выдает на дисплей. Хотя простой хрестоматийный пример со светодиодом работает...

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

Добавлено: Чт мар 29, 2012 10:57:59
phanis
А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.

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

Добавлено: Чт мар 29, 2012 10:59:37
Мастер Ломастер
phanis писал(а):А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
не препроцессор, а при помощи команды в makefile или простого батничка - можно

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

Добавлено: Сб мар 31, 2012 19:29:48
uni
Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART? Препроцессор и изменение исходника на этапе компиляции - это статические методы, если захочется чего-то большего, то всё равно будете использовать таблицу перекодировки. Если вам так дорог каждый байт, то можно использовать только верхние 128 символов таблицы, проверяя код символа перед преобразованием: если меньше 128, то посылаете как есть, если больше, то перекодируете. Т.о. можно сохранить 128 байт флеша или 64 команды. Вряд ли ради этого стоит создавать дополнительные усложнения.

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

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