Скобку надо удалить. А что пишет в ошибках?Babulesnik писал(а):
Если удаляю скобку,вылазит куча ошибок
Работа с ЖКИ на контроллере HD44780 и его аналогах
- Реклама
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Блин,вообще ппц. Залил hex файл отсюда http://avrlab.com/node/80 дисплей повесил на порты как в примере.Даже подключил другой ЖКИ,аналогичный только с синей подсветкой.Все идентично с примером но не работает((((
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Какой у тебя компилятор-то??Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Программирую в AVRStudio 5 .Компилятор AVR/GNU C CompillerR_ura писал(а):Какой у тебя компилятор-то??Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.
- Реклама
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Есть идеи с чем это может быть связано? Интересуют любые зацепки
А схему нельзя посмотреть?Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки
Вот выложил здесь проект протеуса +прошивка. Посмотри как ЖКИ подключен правильно. Можешь там же убедится, что работает нормально. Там таже бибилотека для ЖКИ, что скидывал тебе выше.
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Спасибо,только я не вижу прикрепленных файлов или ссылки.R_ura писал(а):А схему нельзя посмотреть?Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки
Вот выложил здесь проект протеуса +прошивка. Посмотри как ЖКИ подключен правильно. Можешь там же убедится, что работает нормально. Там таже бибилотека для ЖКИ, что скидывал тебе выше.
Пардон, пропустил..Babulesnik писал(а):
Спасибо,только я не вижу прикрепленных файлов или ссылки.
http://radiokot.ru/forum/viewtopic.php?f=21&t=66939
там последнее сообщение сейчас. Архив.. Если у тебя есть мега32, можешь ее прошить этой прошивкой и вживую проверить свой жки..
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).
Работает?Babulesnik писал(а):Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).
А что юзать-то будешь?
Я только не помню, там для двухстрочного дисплея надо что-то в инициализации менять или нет? В даташите посмотри. Или сделай такой же проект в протеусе и замени этот 4-х строчный индикатор на двухстрочный. Увидишь тогда. Мне кажется что должен нормально работать и с двустрочным. .
Вот бедолаги. Наваял я код для супер пупер более менее универсальной работы с этим контроллером. Правда он на С++, но это только обёртка. Методы класса 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 для двустрочного отображения инфы:
Работает это заклинание везде. Написано в терминах моего класса. Везде - это в железе, в IAR, в AVR GCC, в Proteus. Собственно, это малая часть чуть большего проекта.
Внимание. Не забываем, что, если не используется RW, то он должен жёстко сидеть на земле, а если используем, то настраиваем на вывод перед инициализацией. В моём примере используется функция WriteLow4bits(), которая это подразумевает. Я очень долго отыскивал у себя баг, когда просто напросто забыл настроить на вывод RS и RW перед инициализацией. Понял я это только после убийства кучи времени и наблюдением за состоянием вывода RS на осциллографе. Меня очень удивил имевшийся там потенциал, поэтому у меня в коде инициализации я сначала настраиваю эти линии. Я это пишу для тех, кто привык к другим вариантам работы с LCD, т.к. у меня WriteLow4bits() изменяет состояние только 4-х линий данных и не более того. Об этом нужно помнить.
Добавлю только, что класс ещё до конца не дописан, т.к. мне осталось работу с курсорами доделать и прочие мелочи жизни, но все основные функции он исполняет. Я видел только две более менее нормальные библиотеки для работы с HD44780. Одна на асме, другая на Си (для AVR). Поскольку я давно уже отошёл от асма и от Си, то они мне не очень были по душе. Ссылки, к сожалению, я забыл где видел. Может быть даже здесь.
Пробуйте. Да, кстати, перевод каретки функция WriteString() понимает, правда переводит пока только на вторую строку. Это нужно для хранения инициализации экрана во флеш в виде одной строки, вот так:А считывание и отображение я делаю вот так:
Надеюсь, что таблица перекодировки вам тоже понравится
Вот оно счастье, работающее, для тех, кто понимает:
На С++: 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 для двустрочного отображения инфы:
Код: Выделить всё
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
Внимание. Не забываем, что, если не используется 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
Россия навсегда!
Здравствуйте!
Не уверен что пишу в нужную тему, но более подходящего не нашел, а создавать мусор не хочется.
Подскажите пожалуйста распиловку ЖКИ LCM1602K-FSW-GBW-R, и на каком контролере она устроена.
Пытался найти сам, но нечего путного не вышло.
В заранее спасибо!
Не уверен что пишу в нужную тему, но более подходящего не нашел, а создавать мусор не хочется.
Подскажите пожалуйста распиловку ЖКИ LCM1602K-FSW-GBW-R, и на каком контролере она устроена.
Пытался найти сам, но нечего путного не вышло.
В заранее спасибо!
STM32F4 Discovery + KEIL + Windows 7
По первой же ссылке Гуголя имеем PDF, из которого и контроллер KS0066U, и распиловкаMr.Denis писал(а):Подскажите пожалуйста распиловкуЖКИ LCM1602K-FSW-GBW-R,
http://www.displayfuture.com/engineerin ... M1602K.pdf
Уважаемые коты!
Есть вот такая библиотечка для работы с HD44780, что-то не могу понять как выводить данные, пока только курсором управлять могу.
ну и собственно header
Писано в IAR 5.3
Вот такая вариация на тему putchar что-то не работает.
Есть у кого какие мысли?
Есть. Код оформляем как вложение.
Gudd-Head
Есть вот такая библиотечка для работы с HD44780, что-то не могу понять как выводить данные, пока только курсором управлять могу.
Код: Выделить всё
...Код: Выделить всё
...Вот такая вариация на тему putchar что-то не работает.
Код: Выделить всё
void lcd_puts(char *s, char clr)
{
if(clr) LCDClear();
LCDxy(0,0);
printf(s);
}
Есть. Код оформляем как вложение.
Gudd-Head
Опыт прямо пропорционален количеству аппаратуры выведенной из строя...
Использую lcd_lib с сайта Cheap-Enable. МК- ATmega32. Прошиваю через PonyProg2000. В Протеусе всё работает, вот в железе не хочет(((
Смотрю осциллографом - никаких импульсов МК не выдает на дисплей. Хотя простой хрестоматийный пример со светодиодом работает...
Смотрю осциллографом - никаких импульсов МК не выдает на дисплей. Хотя простой хрестоматийный пример со светодиодом работает...
А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
не препроцессор, а при помощи команды в makefile или простого батничка - можноphanis писал(а):А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
битва с дураками проиграна, победители торжествуют. слава победителям!
Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART? Препроцессор и изменение исходника на этапе компиляции - это статические методы, если захочется чего-то большего, то всё равно будете использовать таблицу перекодировки. Если вам так дорог каждый байт, то можно использовать только верхние 128 символов таблицы, проверяя код символа перед преобразованием: если меньше 128, то посылаете как есть, если больше, то перекодируете. Т.о. можно сохранить 128 байт флеша или 64 команды. Вряд ли ради этого стоит создавать дополнительные усложнения.
Россия навсегда!
проблема явно высосана из пальца: на 2 строки в 16 знаков выводить что-то принятое по USART - это из разряда задач "от нечего делать". в этом случае можно и внутреннюю перекодировку реализовать, раз делать нечего. а в реальности вывод на дисплей ведется ИЗНУТРИ МК, и статические строки нужнее и востребованнее.uni писал(а):Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART?
битва с дураками проиграна, победители торжествуют. слава победителям!


