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

 
 
 
Reply to this topicStart new topic
> ЖКИ 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
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
AVR
сообщение Feb 2 2006, 18:34
Сообщение #5


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

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



Цитата(BVU @ Feb 2 2006, 14:44) *
Брак ЖКИ думаю, что маловероятен.
...
Задаю попутно вопросы:
1. При регулировании контрастности у индикатора 'позиции' всех строк подсвечиваются?
2. Каким компилятором 'C' пользуетесь?
3. Какой режим щины данных ЖКИ используете (8-ми битный/4-х битный)?

1) Самое странное, что при регулировке контрастности сначала "перенасыщается" одна пара строк через одну, затем только вторая пара доходит до полной засветки.
Является ли это признаком брака, что если регулируем контрастность яркость меняется у всех строк неодновременно? Причем даже если полностью засвечивается одна пара строк и на ней уже не разглядеть еткст, то на второй он не появляется вовсе и так до полной засветки.
2) IAR C/C++ Compiler for AVR 4.11A/W32 [Evaluation] (4.11.1.3)
3) 8-ми битный.


--------------------
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 3 2006, 07:29
Сообщение #6


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

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



Цитата(AVR @ Feb 2 2006, 21:34) *
1) Самое странное, что при регулировке контрастности сначала "перенасыщается" одна пара строк через одну, затем только вторая пара доходит до полной засветки.
Является ли это признаком брака, что если регулируем контрастность яркость меняется у всех строк неодновременно? Причем даже если полностью засвечивается одна пара строк и на ней уже не разглядеть еткст, то на второй он не появляется вовсе и так до полной засветки.

Не выполнена инициализация дисплея... sad.gif .
Должно быть так, как того рекомендует 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
}
Цитата(AVR @ Feb 2 2006, 21:34) *
2) IAR C/C++ Compiler for AVR 4.11A/W32 [Evaluation] (4.11.1.3)

Адаптируйте параметры своей тактовой састоты для функций задержки:
#define ClkFreq ..... <- частота кварцевого резонатора или частота внешнего или внутреннего генератора (смотря, что используется).
Цитата(AVR @ Feb 2 2006, 21:34) *
3) 8-ми битный.

Параметр установки поправлен для Вашего 8-ми битного режима: 0x38 (DL=1):
LCD_write_comand(0x38); // 8 bit mode, 2/20 duty, 5x8 font


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


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

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



BVU, огромнейшее Вам спасибо!
Вы были изначально правы, предположив что я недоинициализировал ЖКИ. Именно в этом и была проблема.


--------------------
Go to the top of the page
 
+Quote Post
BVU
сообщение Feb 7 2006, 15:53
Сообщение #8


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

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



Цитата(AVR @ Feb 7 2006, 00:08) *
BVU, огромнейшее Вам спасибо!
Вы были изначально правы, предположив что я недоинициализировал ЖКИ. Именно в этом и была проблема.

You are welcome!


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

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

 


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


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