Скобку надо удалить. А что пишет в ошибках?Babulesnik писал(а):
Если удаляю скобку,вылазит куча ошибок
Работа с ЖКИ на контроллере HD44780 и его аналогах
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
- Реклама
-
Babulesnik
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Блин,вообще ппц. Залил hex файл отсюда http://avrlab.com/node/80 дисплей повесил на порты как в примере.Даже подключил другой ЖКИ,аналогичный только с синей подсветкой.Все идентично с примером но не работает((((
-
Babulesnik
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Профи,помогите пожалуйста,извелся весь.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Какой у тебя компилятор-то??Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.
-
Babulesnik
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Программирую в AVRStudio 5 .Компилятор AVR/GNU C CompillerR_ura писал(а):Какой у тебя компилятор-то??Babulesnik писал(а):Профи,помогите пожалуйста,извелся весь.
- Реклама
-
Babulesnik
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Есть идеи с чем это может быть связано? Интересуют любые зацепки
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А схему нельзя посмотреть?Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки
Вот выложил здесь проект протеуса +прошивка. Посмотри как ЖКИ подключен правильно. Можешь там же убедится, что работает нормально. Там таже бибилотека для ЖКИ, что скидывал тебе выше.
-
Babulesnik
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Спасибо,только я не вижу прикрепленных файлов или ссылки.R_ura писал(а):А схему нельзя посмотреть?Babulesnik писал(а):Есть идеи с чем это может быть связано? Интересуют любые зацепки
Вот выложил здесь проект протеуса +прошивка. Посмотри как ЖКИ подключен правильно. Можешь там же убедится, что работает нормально. Там таже бибилотека для ЖКИ, что скидывал тебе выше.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Пардон, пропустил..Babulesnik писал(а):
Спасибо,только я не вижу прикрепленных файлов или ссылки.
http://radiokot.ru/forum/viewtopic.php?f=21&t=66939
там последнее сообщение сейчас. Архив.. Если у тебя есть мега32, можешь ее прошить этой прошивкой и вживую проверить свой жки..
-
Babulesnik
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Вт мар 06, 2012 19:59:00
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Работает?Babulesnik писал(а):Спасибо большое буду юзать.У меня только 8 и 88 меги + 3 винстаровских ЖКИ(16х2).
А что юзать-то будешь?
Я только не помню, там для двухстрочного дисплея надо что-то в инициализации менять или нет? В даташите посмотри. Или сделай такой же проект в протеусе и замени этот 4-х строчный индикатор на двухстрочный. Увидишь тогда. Мне кажется что должен нормально работать и с двустрочным. .
- uni
- Встал на лапы
- Сообщения: 137
- Зарегистрирован: Пт дек 07, 2007 11:17:40
- Откуда: г. Екатеринбург
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Вот бедолаги. Наваял я код для супер пупер более менее универсальной работы с этим контроллером. Правда он на С++, но это только обёртка. Методы класса 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
Россия навсегда!
-
Mr.Denis
- Прорезались зубы
- Сообщения: 220
- Зарегистрирован: Пт авг 07, 2009 22:06:49
- Откуда: Россия, Москва
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Здравствуйте!
Не уверен что пишу в нужную тему, но более подходящего не нашел, а создавать мусор не хочется.
Подскажите пожалуйста распиловку ЖКИ LCM1602K-FSW-GBW-R, и на каком контролере она устроена.
Пытался найти сам, но нечего путного не вышло.
В заранее спасибо!
Не уверен что пишу в нужную тему, но более подходящего не нашел, а создавать мусор не хочется.
Подскажите пожалуйста распиловку ЖКИ LCM1602K-FSW-GBW-R, и на каком контролере она устроена.
Пытался найти сам, но нечего путного не вышло.
В заранее спасибо!
STM32F4 Discovery + KEIL + Windows 7
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
По первой же ссылке Гуголя имеем PDF, из которого и контроллер KS0066U, и распиловкаMr.Denis писал(а):Подскажите пожалуйста распиловкуЖКИ LCM1602K-FSW-GBW-R,
http://www.displayfuture.com/engineerin ... M1602K.pdf
- techlab
- Родился
- Сообщения: 17
- Зарегистрирован: Сб дек 03, 2011 18:03:34
- Откуда: Khark0xFF.UA
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Уважаемые коты!
Есть вот такая библиотечка для работы с 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
Опыт прямо пропорционален количеству аппаратуры выведенной из строя...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Использую lcd_lib с сайта Cheap-Enable. МК- ATmega32. Прошиваю через PonyProg2000. В Протеусе всё работает, вот в железе не хочет(((
Смотрю осциллографом - никаких импульсов МК не выдает на дисплей. Хотя простой хрестоматийный пример со светодиодом работает...
Смотрю осциллографом - никаких импульсов МК не выдает на дисплей. Хотя простой хрестоматийный пример со светодиодом работает...
-
phanis
- Вымогатель припоя
- Сообщения: 513
- Зарегистрирован: Сб фев 19, 2011 18:04:08
- Откуда: Татарстан, пос. Актюбинский
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
не препроцессор, а при помощи команды в makefile или простого батничка - можноphanis писал(а):А нельзя сделать так чтоб препроцессор перекодировал символы кириллицы.?
Пишешь например по русски а препроцессор подставляет вместо этого нужные коды из таблицы.
битва с дураками проиграна, победители торжествуют. слава победителям!
- uni
- Встал на лапы
- Сообщения: 137
- Зарегистрирован: Пт дек 07, 2007 11:17:40
- Откуда: г. Екатеринбург
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART? Препроцессор и изменение исходника на этапе компиляции - это статические методы, если захочется чего-то большего, то всё равно будете использовать таблицу перекодировки. Если вам так дорог каждый байт, то можно использовать только верхние 128 символов таблицы, проверяя код символа перед преобразованием: если меньше 128, то посылаете как есть, если больше, то перекодируете. Т.о. можно сохранить 128 байт флеша или 64 команды. Вряд ли ради этого стоит создавать дополнительные усложнения.
Россия навсегда!
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
проблема явно высосана из пальца: на 2 строки в 16 знаков выводить что-то принятое по USART - это из разряда задач "от нечего делать". в этом случае можно и внутреннюю перекодировку реализовать, раз делать нечего. а в реальности вывод на дисплей ведется ИЗНУТРИ МК, и статические строки нужнее и востребованнее.uni писал(а):Как правило это не имеет смысла делать. Как в этом случае, к примеру, выводить строки текста, полученные по USART?
битва с дураками проиграна, победители торжествуют. слава победителям!


