реклама на сайте
подробности

 
 
> ЖКИ BC2004B, Как заставить работать на четыре строки?
AVR
сообщение Jan 23 2006, 23:26
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Есть символьный дисплей BC2004B 20х4.
У этого дисплея четыре строки, но внутрення организация у него как у двухстрочного (3-я строка продолжение первой, 4-я - продолжение второй).
Поэтому для работы с ним я включаю режим работы на две строки. Но в результате, на ЖКИ первая строка пишется в первый ряд ЖКИ как и положено, однако вторая пишется в третий ряд, а 3-я и 4-я вовсе не появляются на экране. В чем может быть ошибка? Как можно задействовать все четыре строки?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BVU
сообщение Jan 25 2006, 15:04
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(AVR @ Jan 24 2006, 02:26) *
Есть символьный дисплей 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).


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
AVR
сообщение Feb 2 2006, 11:03
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Спасибо за помощь. Сделал код инициализации такой же как у Вас и расставил задержки при изменении управляющих сигналов не менее минимальных (минимум 500 нс, я поставил 5 мкс), но индикатор по прежнему отображал только 1-ю и 3-ю строки. Потом я пошел и заменил в магазине ЖКИ модуль на такой же. Подключил - а ситуация обратная: на нём уже работает 2-я и 4-я строка, это при том что программа, зашитая в управляющий контроллер всё та же самая. Как Вы думаете, это всё же бракованные индикаторы или это у меня руки не совсем прямые?
У меня возникли подозрения на тему того что я мог сделать не так:
1) Если я задал задержки при управляющих сигналах больше чем рекоммендуется, то может это сказаться на работоспособности? Хотя при фиксированной задержке в 5 мкс всё нормально пишется/читается...
2) Если у меня порядок начальных установок после инициализации не совсем такой как в документации MT-20S4A, то могло ли из-за этого не заработать?

Сообщение отредактировал AVR - Feb 2 2006, 11:16


--------------------
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 2 2006, 11:44
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Брак ЖКИ думаю, что маловероятен.
Цитата(AVR @ Feb 2 2006, 14:03) *
1) Если я задал задержки при управляющих сигналах больше чем рекоммендуется, то может это сказаться на работоспособности? Хотя при фиксированной задержке в 5 мкс всё нормально пишется/читается...

Для инициализации и выполнения команд контроллера приведены задержки которые должны быть не менее указанных в документации на индикатор. Но если Вы их будете необоснованно 'затягивать' это лишь увеличит время доступа к ЖКИ.
Цитата(AVR @ Feb 2 2006, 14:03) *
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-х битный)?

Сообщение отредактировал BVU - Feb 2 2006, 13:23
Прикрепленные файлы
Прикрепленный файл  BOLYMIN.rar ( 323.55 килобайт ) Кол-во скачиваний: 11231
Прикрепленный файл  Instruction_table.rar ( 175.31 килобайт ) Кол-во скачиваний: 9183
 


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016