Страница 104 из 123

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

Добавлено: Чт янв 05, 2017 10:58:51
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.

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

Добавлено: Чт янв 05, 2017 11:06:14
Z_h_e
Порты не забыли инициализировать как выход?

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

Добавлено: Чт янв 05, 2017 11:26:44
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 корректен. На практике – не работает.

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

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

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

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

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

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

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

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

Лишнего вроде бы ничего нет. Но может глаз замылился. Поэтому и прошу помощи.

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

Добавлено: Чт янв 05, 2017 13:42:33
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);

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

Добавлено: Чт янв 05, 2017 13:48:22
СКАЗОЧНИК
Не знаю.
Я бы все равно, сначала сконфигурировал все порты и сбросил их в ноль.
Потом бы уже дал начальную задержку.

Потом уже выставил в порт 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С

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

Добавлено: Чт янв 05, 2017 13:59:13
trengtor
Я мурыжу этот код на рабочем девайсе. Вот в чем фокус-покус.

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

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

М-да, «несложный протокол» называется...

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

Добавлено: Чт янв 05, 2017 14:14:13
СКАЗОЧНИК
Так значит и искать надо проблему в этой U

:kill:

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

Добавлено: Чт янв 05, 2017 14:24:44
trengtor
СКАЗОЧНИК писал(а):Так значит и искать надо проблему в этой U

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


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

Добавлено: Вс янв 08, 2017 20:37:23
trengtor
Z_h_e писал(а):Порты не забыли инициализировать как выход?
Ох, как же неловко признаваться в собственной глупости рассеянности, но Вы оказались правы :facepalm:

Сама процедура инициализации была в порядке. Вот что значит по полгода не брать шашку в руки. Saleae logic помог.

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

Добавлено: Пт янв 13, 2017 11:18:11
trengtor
Gudd-Head писал(а):Кстати, для OLED контроллера WS0010 вообще не нужны задержки :)
Только после подачи питания и очистки дисплея.
Это справедливо для любых версий? Просто есть несколько штук из первого выпуска, отметившегося своей неполной совместимостью по инициализации. И на них проскакивают горизонтальные полоски при дефолтных таймингах HD44780.

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

Добавлено: Пт янв 13, 2017 18:11:02
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

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

Добавлено: Пт янв 13, 2017 18:21:09
Мурато Мяуконни
Неправильная инициализация. В даташите написано что и как надо

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

Добавлено: Пт янв 13, 2017 18:25:41
ROMan2947
Мурато Мяуконни писал(а):Неправильная инициализация. В даташите написано что и как надо
данный код по даташиту и писался, только кажется либо я недопонимаю, либо мы про разные шит говорим...
вот мой

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

Добавлено: Пт янв 13, 2017 18:32:43
trengtor
ROMan2947 писал(а):
Мурато Мяуконни писал(а):Неправильная инициализация. В даташите написано что и как надо
данный код по даташиту и писался, только кажется либо я недопонимаю, либо мы про разные шит говорим...
вот мой
А надо хитачевский для HD44780U

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

Добавлено: Пт янв 13, 2017 18:37:09
MOHCTEP
Сходу:
1 Вы как-то очень уж вольно обращаетесь с портом. Похоже, стробом стираете данные.
2 Не увидел включения дисплея в инсталяторе. (0х0С).
3 Зачем манипулируете DDRD в функции Write_Command?

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

Добавлено: Пт янв 13, 2017 20:46:57
ARV
я вообще не понимаю, почему не применять готовые проверенные наработки? в чем сакральный смысл изобретения велосипеда?

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

Добавлено: Пт янв 13, 2017 20:48:17
СКАЗОЧНИК
ARV писал(а):в чем сакральный смысл изобретения велосипеда?
:) Для меня, например, в том, чтобы понять как это работает и изучить. Иначе можно и до Ардуины скатиться. :dont_know:

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

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