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

 
 
> Инициализация текстового LCD-дисплея
POLL
сообщение Dec 18 2011, 08:21
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 300
Регистрация: 11-06-11
Пользователь №: 65 640



Изучаю работу с LCD-экранчиками и вот с нуля пишу программку инициализации oled-дисплейчика на кристалле ws0010 в режиме 4bit.
Мучаюсь который день, че-то не получается. С каждой подачей питания на экране то выводятся всякие стрелочки, точечки, то квадратики, бывает вообще ничего нет. Иногда курсор на первой позиции мигающий появляется, бывает так и мигает, а бывает хоп и исчезает. (при инициализации я специально курсор и его блинк вывожу)...

Так вот - подскажите, что я ни так делаю?
Описываю логику инициализации.

В даташите на этот экран в режиме 4bit даются 2 такие схемы.
1 схема
2 схема

Из первой схемы узнаем что перед подачей команд нужно подождать 500ms для стабилизации питания.
Из второй схемы, что после паузы в отличие от привычных контроллеров HD44780 этому нужно подать 5 раз сигнал LOW на DB7-DB4.

Итак, что я делаю в инициализации.

Код
1) выставляю пины МК подключенные к DB7-DB4 в output (DDRB = 0b00001111)
2) пины RS, RW, E выставляю в output (DDRD = 0b11100000)
3) на RS, RW, E подаю LOW (PORTD |= 0b00000000)
4) задержка для стабилизации питания _delay_ms(1500);
5) подаю команды как указано в схемах.
   А) Подаю на линию данных 0000 (PORTB |= 0b00000000)
   команду подаю так:
   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0000
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0

   таких последовательностей подаю 5 раз, как в даташите.

6) делаю небольшую задержку _delay_ms(100);

7) Подаю команды Function Set.
   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0010
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0

   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0010
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0
   - DB7-DB4 ставлю в 1000
   - E ставлю в 1
   _delay_ms(10);
   - E ставлю в 0
   - функция проверки флага занятости
   - RW ставлю в 0

8) Подаю команды Display on
   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0000
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0
   - DB7-DB4 ставлю в 1111
   - E ставлю в 1
   _delay_ms(10);
   - E ставлю в 0
   - функция проверки флага занятости
   - RW ставлю в 0

9) Подаю команды Entry mode set
   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0000
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0
   - DB7-DB4 ставлю в 0111
   - E ставлю в 1
   _delay_ms(10);
   - E ставлю в 0
   - функция проверки флага занятости
   - RW ставлю в 0

10) Подаю команды Return home
   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0000
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0
   - DB7-DB4 ставлю в 0010
   - E ставлю в 1
   _delay_ms(10);
   - E ставлю в 0
   - функция проверки флага занятости
   - RW ставлю в 0

11) Подаю команды Display clear
   - RS, RW, E ставлю в 0
   - DB7-DB4 ставлю в 0000
   - E ставлю в 1
   - _delay_ms(10);
   - E ставлю в 0
   - DB7-DB4 ставлю в 0001
   - E ставлю в 1
   _delay_ms(10);
   - E ставлю в 0
   - функция проверки флага занятости
   - RW ставлю в 0

конец инициализации



Может я команды неправильно отдаю, флашки не в такой последовательности выставляю?
Насчет функции проверки флага занятости.
Логика такая.
Код
- выставляем порты DB7-DB4 в input
- RS, RW ставлю в 0
- E ставлю в 1
- пауза _nop_(); _delay_ms(5);
- считываю значение порта DB7
int val = ((PIN(PORTB) & _BV(3))==0)?0:1;
#define PIN(x) (*(&x - 2))
- E ставлю в 0
- E ставлю в 1
- _nop_();
- E ставлю в 0
- цикл длится пока while(val!= 0);
Go to the top of the page
 
+Quote Post



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

 


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


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