1891ВМ12Я 0 23 января, 2006 Опубликовано 23 января, 2006 · Жалоба Есть символьный дисплей BC2004B 20х4. У этого дисплея четыре строки, но внутрення организация у него как у двухстрочного (3-я строка продолжение первой, 4-я - продолжение второй). Поэтому для работы с ним я включаю режим работы на две строки. Но в результате, на ЖКИ первая строка пишется в первый ряд ЖКИ как и положено, однако вторая пишется в третий ряд, а 3-я и 4-я вовсе не появляются на экране. В чем может быть ошибка? Как можно задействовать все четыре строки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 25 января, 2006 Опубликовано 25 января, 2006 · Жалоба Есть символьный дисплей BC2004B 20х4. У этого дисплея четыре строки, но внутрення организация у него как у двухстрочного (3-я строка продолжение первой, 4-я - продолжение второй). Поэтому для работы с ним я включаю режим работы на две строки. Но в результате, на ЖКИ первая строка пишется в первый ряд ЖКИ как и положено, однако вторая пишется в третий ряд, а 3-я и 4-я вовсе не появляются на экране. В чем может быть ошибка? Как можно задействовать все четыре строки? Возможно Вы 'недоинициализировали' LCD. Когдато я делал для WH1604A, что немногим отличается от BC2004B (количество позиций в строке). Вот код инициализации: void LCD_init(void) { PORTB = STROB_DOWN; PORTB = RS_COMAND; PORTD = WRITE_LCD; DelayMs(100); PORTB = (DATA_IO_LCD | 0x03); // To establish word length of the interface LCD_strobe(); DelayUs(40); LCD_strobe(); DelayUs(40); LCD_strobe(); DelayUs(40); LCD_write_comand(0x28); // 4 bit mode, 2/16 duty, 5x8 font LCD_write_comand(0x08); // display off LCD_write_comand(0x0C); // display on, blink curson off LCD_write_comand(0x06); // entry mode } так же необходимо четко выдерживать все временные соотношения рекомендуемые к инициализации контроллера - DelayMs(), DelayUs(40): #define ClkFreq 16000000 #define _1us (unsigned long)((ClkFreq / 1000000) / 1.25) #define _1ms (unsigned long)(ClkFreq / 1000) void DelayMs(unsigned int d) { while(d--)__delay_cycles(_1ms); } void DelayUs(unsigned int d) { while(d--)__delay_cycles(_1us); } длительность строба LCD_strobe() так же должна быть не меньше минимально допустимой. Рекомендую посмотреть документацию на MT-20S4A, что является практически аналогом для BC2004B. Там достаточно подробное описание модуля (http://www.melt.aha.ru/work/display/150). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 (изменено) · Жалоба Спасибо за помощь. Сделал код инициализации такой же как у Вас и расставил задержки при изменении управляющих сигналов не менее минимальных (минимум 500 нс, я поставил 5 мкс), но индикатор по прежнему отображал только 1-ю и 3-ю строки. Потом я пошел и заменил в магазине ЖКИ модуль на такой же. Подключил - а ситуация обратная: на нём уже работает 2-я и 4-я строка, это при том что программа, зашитая в управляющий контроллер всё та же самая. Как Вы думаете, это всё же бракованные индикаторы или это у меня руки не совсем прямые? У меня возникли подозрения на тему того что я мог сделать не так: 1) Если я задал задержки при управляющих сигналах больше чем рекоммендуется, то может это сказаться на работоспособности? Хотя при фиксированной задержке в 5 мкс всё нормально пишется/читается... 2) Если у меня порядок начальных установок после инициализации не совсем такой как в документации MT-20S4A, то могло ли из-за этого не заработать? Изменено 2 февраля, 2006 пользователем AVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 (изменено) · Жалоба Брак ЖКИ думаю, что маловероятен. 1) Если я задал задержки при управляющих сигналах больше чем рекоммендуется, то может это сказаться на работоспособности? Хотя при фиксированной задержке в 5 мкс всё нормально пишется/читается... Для инициализации и выполнения команд контроллера приведены задержки которые должны быть не менее указанных в документации на индикатор. Но если Вы их будете необоснованно 'затягивать' это лишь увеличит время доступа к ЖКИ. 2) Если у меня порядок начальных установок после инициализации не совсем такой как в документации MT-20S4A, то могло ли из-за этого не заработать? Однозначно! С этим надо разобраться в первую очередь... Посмотрев инициализацию на контроллеры Bolymin, предлагаю такой вариант инициализации задержек (так же учтите, что данная настройка для 4-х битного режима ЖКИ): #define STROB_UP (PORTB | (1 << PB4)) #define STROB_DOWN (PORTB & (~(1 << PB4))) #define RS_DATA (PORTB | (1 << PB5)) #define RS_COMAND (PORTB & (~(1 << PB5))) #define READ_LCD (PORTD | (1 << PD0)) #define WRITE_LCD (PORTD & (~(1 << PD0))) #define DATA_IO_LCD (PORTB & 0xf0) void LCD_init(void) { PORTB = STROB_DOWN; PORTB = RS_COMAND; PORTD = WRITE_LCD; DelayMs(20); PORTB = (DATA_IO_LCD | 0x03); // To establish word length of the interface LCD_strobe(); DelayMs(5); LCD_strobe(); DelayUs(120); LCD_strobe(); LCD_write_comand(0x28); // 4 bit mode, 2/16 duty, 5x8 font LCD_write_comand(0x08); // display off LCD_write_comand(0x0C); // display on, blink curson off LCD_write_comand(0x06); // entry mode } Задаю попутно вопросы: 1. При регулировании контрастности у индикатора 'позиции' всех строк подсвечиваются? 2. Каким компилятором 'C' пользуетесь? 3. Какой режим щины данных ЖКИ используете (8-ми битный/4-х битный)? BOLYMIN.rar Instruction_table.rar Изменено 2 февраля, 2006 пользователем BVU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба Брак ЖКИ думаю, что маловероятен. ... Задаю попутно вопросы: 1. При регулировании контрастности у индикатора 'позиции' всех строк подсвечиваются? 2. Каким компилятором 'C' пользуетесь? 3. Какой режим щины данных ЖКИ используете (8-ми битный/4-х битный)? 1) Самое странное, что при регулировке контрастности сначала "перенасыщается" одна пара строк через одну, затем только вторая пара доходит до полной засветки. Является ли это признаком брака, что если регулируем контрастность яркость меняется у всех строк неодновременно? Причем даже если полностью засвечивается одна пара строк и на ней уже не разглядеть еткст, то на второй он не появляется вовсе и так до полной засветки. 2) IAR C/C++ Compiler for AVR 4.11A/W32 [Evaluation] (4.11.1.3) 3) 8-ми битный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 3 февраля, 2006 Опубликовано 3 февраля, 2006 · Жалоба 1) Самое странное, что при регулировке контрастности сначала "перенасыщается" одна пара строк через одну, затем только вторая пара доходит до полной засветки. Является ли это признаком брака, что если регулируем контрастность яркость меняется у всех строк неодновременно? Причем даже если полностью засвечивается одна пара строк и на ней уже не разглядеть еткст, то на второй он не появляется вовсе и так до полной засветки. Не выполнена инициализация дисплея... :( . Должно быть так, как того рекомендует Bolymin: void LCD_init(void) { PORTB = STROB_DOWN; PORTB = RS_COMAND; PORTD = WRITE_LCD; DelayMs(20); PORTB = (DATA_IO_LCD | 0x03); // To establish word length of the interface LCD_strobe(); DelayMs(5); LCD_strobe(); DelayUs(120); LCD_write_comand(0x38); // 8 bit mode, 2/20 duty, 5x8 font LCD_write_comand(0x08); // display off LCD_write_comand(0x0C); // display on, blink curson off LCD_write_comand(0x06); // entry mode } 2) IAR C/C++ Compiler for AVR 4.11A/W32 [Evaluation] (4.11.1.3) Адаптируйте параметры своей тактовой састоты для функций задержки: #define ClkFreq ..... <- частота кварцевого резонатора или частота внешнего или внутреннего генератора (смотря, что используется). 3) 8-ми битный. Параметр установки поправлен для Вашего 8-ми битного режима: 0x38 (DL=1): LCD_write_comand(0x38); // 8 bit mode, 2/20 duty, 5x8 font Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 6 февраля, 2006 Опубликовано 6 февраля, 2006 · Жалоба BVU, огромнейшее Вам спасибо! Вы были изначально правы, предположив что я недоинициализировал ЖКИ. Именно в этом и была проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 7 февраля, 2006 Опубликовано 7 февраля, 2006 · Жалоба BVU, огромнейшее Вам спасибо! Вы были изначально правы, предположив что я недоинициализировал ЖКИ. Именно в этом и была проблема. You are welcome! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться