Перейти к содержанию
    

ЖКИ BC2004B

Есть символьный дисплей BC2004B 20х4.

У этого дисплея четыре строки, но внутрення организация у него как у двухстрочного (3-я строка продолжение первой, 4-я - продолжение второй).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть символьный дисплей 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).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

У меня возникли подозрения на тему того что я мог сделать не так:

1) Если я задал задержки при управляющих сигналах больше чем рекоммендуется, то может это сказаться на работоспособности? Хотя при фиксированной задержке в 5 мкс всё нормально пишется/читается...

2) Если у меня порядок начальных установок после инициализации не совсем такой как в документации MT-20S4A, то могло ли из-за этого не заработать?

Изменено пользователем AVR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Брак ЖКИ думаю, что маловероятен.

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

Изменено пользователем BVU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Брак ЖКИ думаю, что маловероятен.

...

Задаю попутно вопросы:

1. При регулировании контрастности у индикатора 'позиции' всех строк подсвечиваются?

2. Каким компилятором 'C' пользуетесь?

3. Какой режим щины данных ЖКИ используете (8-ми битный/4-х битный)?

1) Самое странное, что при регулировке контрастности сначала "перенасыщается" одна пара строк через одну, затем только вторая пара доходит до полной засветки.

Является ли это признаком брака, что если регулируем контрастность яркость меняется у всех строк неодновременно? Причем даже если полностью засвечивается одна пара строк и на ней уже не разглядеть еткст, то на второй он не появляется вовсе и так до полной засветки.

2) IAR C/C++ Compiler for AVR 4.11A/W32 [Evaluation] (4.11.1.3)

3) 8-ми битный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BVU, огромнейшее Вам спасибо!

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BVU, огромнейшее Вам спасибо!

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

You are welcome!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...