Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

WiseLord писал(а):Send_Nibble(0x0C); - не совсем понятно это. Почему 0x0C? Нестандартный (не 5x8 символы) дисплей? По идее, 1) там должно быть 0x08, 2) прямо перед этим ещё одно 0x02, уже в 4-х битном режиме, ранее установленном.


1) В любом случае, дело не в этом (пробовал и с 0, и с 1).

2) Потому что этот нибл УЖЕ стоит на шине. Остается лишь дать ему повторный строб.

Добавлено after 1 hour 29 minutes 3 seconds:
ps. Дисплей и схема рабочие: проверено стандартной микропаскалевской библиотекой LCD.
Изображение
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Z_h_e »

Порты не забыли инициализировать как выход?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

Z_h_e писал(а):Порты не забыли инициализировать как выход?


Разумеется:

Код: Выделить всё

program LCD_test;

uses
  ULCD;

var
  ULCD_RS : sbit at PORTC4_bit;
  ULCD_EN : sbit at PORTC5_bit;
  ULCD_D4 : sbit at PORTD4_bit;
  ULCD_D5 : sbit at PORTD5_bit;
  ULCD_D6 : sbit at PORTD6_bit;
  ULCD_D7 : sbit at PORTD7_bit;
  ULCD_RS_Direction : sbit at DDC4_bit;
  ULCD_EN_Direction : sbit at DDC5_bit;
  ULCD_D4_Direction : sbit at DDD4_bit;
  ULCD_D5_Direction : sbit at DDD5_bit;
  ULCD_D6_Direction : sbit at DDD6_bit;
  ULCD_D7_Direction : sbit at DDD7_bit;

begin
  ULCD_Init;
end.


Проверка: если ULCD_ заменяем на LCD_ (обращаемся к стандартной библиотеке), то всё работает.

Не могу понять, в чем именно затык. Формально код ULCD_Init корректен. На практике – не работает.
Изображение
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение СКАЗОЧНИК »

Задержки при инициализации можно делать гораздо длиннее, чем даже указано в даташите (теоретически до бесконечности).

Send_Nibble(0x03);
Delay_ms(5);
// Разрядность 8
Strobe_EN;

Плохо знаю паскаль, но на все другие языки он все равно похож. Однако, лень разгребать. У вас процедурка описана Send_Nibble, в которой уже указано, что строб надо дергать. Потом в тексте у вас задержка на 5 мсек и опять строб?
Не помню сейчас полной его инициализации, может там лишнее чего? :dont_know:
Станислав
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

СКАЗОЧНИК писал(а):Задержки при инициализации можно делать гораздо длиннее, чем даже указано в даташите (теоретически до бесконечности).

Send_Nibble(0x03);
Delay_ms(5);
// Разрядность 8
Strobe_EN;

Плохо знаю паскаль, но на все другие языки он все равно похож. Однако, лень разгребать. У вас процедурка описана Send_Nibble, в которой уже указано, что строб надо дергать. Потом в тексте у вас задержка на 5 мсек и опять строб?
Не помню сейчас полной его инициализации, может там лишнее чего? :dont_know:

Потому, что нужный нибл уже стоит на шине.

Лишнего вроде бы ничего нет. Но может глаз замылился. Поэтому и прошу помощи.
Изображение
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

У меня подобный код на C работает. Вот как он выглядит в переводе на этот диалект:

Код: Выделить всё

    Send_Nibble(0x30);
    Delay_ms(20);
    Strobe_EN();
    Delay_ms(5);
    Strobe_EN();
    Delay_us(120);
    Strobe_EN();

    Delay_us(100);
    Send_Nibble(0x02);
    Delay_us(100);
    Strobe_EN();
    Send_Nibble(0x08);
    Delay_us(100);

    Send_Nibble(0x00);
    Send_Nibble(0x0C);
    Delay_us(100);
    Send_Nibble(0x00);
    Send_Nibble(0x01);
    Delay_ms(2);
    Send_Nibble(0x00);
    Send_Nibble(0x06);
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение СКАЗОЧНИК »

Не знаю.
Я бы все равно, сначала сконфигурировал все порты и сбросил их в ноль.
Потом бы уже дал начальную задержку.

Потом уже выставил в порт 0011 (и убедился, что они стоят именно на DB7-DB4
Затем три строба с задержкой между ними в 10-15 милисек.

Затем команду для переключения на 4 линии 0010
Потом строб и еще такую же задержку.

Затем вторую тетраду этой команды (4 лини и две строки)


// Разрядность 4
Send_Nibble(0x02); Отправляем старший полубайт. Он его проглатывает.
Delay_us(40);
// Разрядность 4 и параметры (2 строки, дисплей включен)
Strobe_EN; Снова старший полубайт
Send_Nibble(0x0C); Здесь я отправляю команду 1000 (0х08)
Delay_us(40);


Для очистки дисплея отправляю команду 00000001 , т.е. по вашему будет 0х00 и 0х01
После них сразу длиииинннааааая задержка, т.к. чистится он долго

Потом установка режима ВЫВОда данных 00000110, т.е. 0х00 и 0х06

После уже включаю дисплей (курсор погашен) 0b00001100, т.е. 0х00 и 0х0С
Станислав
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

Я мурыжу этот код на рабочем девайсе. Вот в чем фокус-покус.

И если я в тест-программе поменяю в именах ULCD_ на LCD_ (т.е. перейду на стандартную библиотеку компилятора) – то всё оживёт, разумеется.

И с таймингами уже играл.

М-да, «несложный протокол» называется...
Изображение
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение СКАЗОЧНИК »

Так значит и искать надо проблему в этой U

:kill:
Станислав
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

СКАЗОЧНИК писал(а):Так значит и искать надо проблему в этой U

:kill:


Формально там вроде бы всё Ок... Ладно, надо отложить на пару дней. Переключить контекст :)

Изображение
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

Z_h_e писал(а):Порты не забыли инициализировать как выход?


Ох, как же неловко признаваться в собственной глупости рассеянности, но Вы оказались правы :facepalm:

Сама процедура инициализации была в порядке. Вот что значит по полгода не брать шашку в руки. Saleae logic помог.
Изображение
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

Gudd-Head писал(а):Кстати, для OLED контроллера WS0010 вообще не нужны задержки :)
Только после подачи питания и очистки дисплея.


Это справедливо для любых версий? Просто есть несколько штук из первого выпуска, отметившегося своей неполной совместимостью по инициализации. И на них проскакивают горизонтальные полоски при дефолтных таймингах HD44780.
Изображение
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ROMan2947 »

Приветствую!!!
Вынужден обратиться за помощью.. :cry: что здесь не так как надо


# define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>




//RS PDO
//RW PD1
//E PD2
//DATA_BUS PD5-PD7

#define RW_READ PORTD=1<<1
#define RW_WRITE PORTD=0<<1

#define RS_DATA PORTD=1<<0
#define RS_COMAND PORTD=0<<0
#define DATA_BUS PORTD


void init_LCD()
{
_delay_ms(20);
Write_Command(0x30);
_delay_ms(5);
Write_Command(0x30);
_delay_us(110);
Write_Command(0x30);

Write_Command(0x20);
Write_Command(0x28);
Write_Command(0x08);
Write_Command(0x01);
Write_Command(0x02);

}

////////////////////////////////////////////////////
///////функция записи//////

void Write_Command(int DATA)
{
RS_COMAND; // первый полубайт
RW_WRITE;
DDRD=0xF0;
PORTD=1<<2; // взводим строб
_delay_us(1);
DATA_BUS|=DATA&0b11110000;
_delay_us(1);
PORTD=0<<2; // сигнал на запись
DDRD|=DDRD&0x00;

RS_COMAND; // второй полубайт
RW_WRITE;
DDRD=0xF0;
PORTD=1<<2; // взводим строб
_delay_us(1);
DATA_BUS|=DATA<<4;

_delay_us(1);
PORTD=0<<2; //сигнал на запись
DDRD|=DDRD&0x00;

}

int main(void)
{
DDRD=0xFF;
PORTD=0x00;

init_LCD();
while (1)

{

}
}




ЖКИ LCD 1602A
Мурато Мяуконни
Прорезались зубы
Сообщения: 203
Зарегистрирован: Сб ноя 19, 2016 21:05:48

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Мурато Мяуконни »

Неправильная инициализация. В даташите написано что и как надо
Подпись убрал вместе с автором. aen
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ROMan2947 »

Мурато Мяуконни писал(а):Неправильная инициализация. В даташите написано что и как надо

данный код по даташиту и писался, только кажется либо я недопонимаю, либо мы про разные шит говорим...
вот мой
Вложения
LCD1602.pdf
(842.43 КБ) 148 скачиваний
Аватара пользователя
trengtor
Сверлит текстолит когтями
Сообщения: 1299
Зарегистрирован: Вт мар 31, 2015 22:56:07
Откуда: Мы люди простые, живем в лесу, на пенек молимся
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение trengtor »

ROMan2947 писал(а):
Мурато Мяуконни писал(а):Неправильная инициализация. В даташите написано что и как надо

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


А надо хитачевский для HD44780U
Изображение
MOHCTEP
Опытный кот
Сообщения: 768
Зарегистрирован: Вс янв 19, 2014 00:55:09

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение MOHCTEP »

Сходу:
1 Вы как-то очень уж вольно обращаетесь с портом. Похоже, стробом стираете данные.
2 Не увидел включения дисплея в инсталяторе. (0х0С).
3 Зачем манипулируете DDRD в функции Write_Command?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение СКАЗОЧНИК »

ARV писал(а):в чем сакральный смысл изобретения велосипеда?

:) Для меня, например, в том, чтобы понять как это работает и изучить. Иначе можно и до Ардуины скатиться. :dont_know:
Станислав
MOHCTEP
Опытный кот
Сообщения: 768
Зарегистрирован: Вс янв 19, 2014 00:55:09

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение MOHCTEP »

ARV, СКАЗОЧНИК прав, имхо. На полуфабрикатах, шеф поваром не станешь. :) К тому же чужие коды либо избыточны, в угоду универсальности, либо напротив - слишком узконаправлены. Вытащить из них и применить нужный "сакрал", без некоторого опыта, слабо реально.
Ответить

Вернуться в «Периферия»