LINUX.ORG.RU

LCD/дисплей HDM20416L/HD66730 -> HD66712, avr/arduino

 , ,


0

1

добрый день

HDM20416L-T-L3PP - LCD дисплей

HD66730 or HD66712 - контроллер дисплея

существует две версии данного дисплея, 16 и 18 пинов, не принципиально

«даташита» - в инете полно, но практически нет «применений» с AVR/Arduino

набегом запустить с пом-ю NewliquidCrystal - не получилось предполагаю, что в данном контроллере (*) «другие параметры», поэтому печать не совсем корректна

(*) - размер буфера, адресация итд

ВОПРОС 1: кто ни-будь сталкивался/запустил данный дисплей?

ВОПРОС 2: мысли, идеи, соображения, просто балагурим...(все сгодится до кучи :о)

p.s. за совет, типа «выкурить даташит и написать свою реализацию» - отдельная благодарность и спасибки :о)

...

#include <LiquidCrystal.h>

//
// Arduino PDx	7, 6,   5,   4,   3,   2
// LCD pin	   RS, E, DB4, DB5, DB6, DB7
//
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

void setup()
{
lcd.begin(20, 4);

//				  12345678901234567890
//lcd.setCursor(0, 0); lcd.print("<0........0>"); // строка, которая еще не "дублируется переносом на 2ю строкку"
  lcd.setCursor(0, 0); lcd.print("<0................0>");
  lcd.setCursor(0, 1); lcd.print("<1................1>");
  lcd.setCursor(0, 2); lcd.print("<2................2>");
  lcd.setCursor(0, 3); lcd.print("<3................3>");
}

void loop(){ }

вывод на дисплей

http://i104.fastpic.ru/big/2018/0713/b0/_fabeb9fe154a9ba74121ddba78f662b0.jpg

Arduino-1.5.8 (and other)

HDM20416L-T-L3PP / HD66730

NewliquidCrystal-1.3.5

https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

### UPDATE ###

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

маркировка на шлейфе HDM20416L-T-L3PP

ессть след. вариации

HDM20416L   - 16 pin / HD44780
HDM20416L-M - 18 pin / HD66730
HDM20416L-T - 16 pin / HD66712

судя по всему наш - HDM20416L-T / HD66712

★★★★

Последнее исправление: sunjob (всего исправлений: 3)

не верю. контроллер стандартный. размер дисплея 20x4.
Контроллер держит по умолчанию 2 строчки, емнип.
ps вот если бы ты сказал, что под stm8 нет библиотек — я бы поверил

sehellion ★★★★★
()
Ответ на: комментарий от sehellion

Впрочем, создание кроссплатформенной гнодной библиотеки под этот контроллер я бы сильно одобрил, даже очень

sehellion ★★★★★
()

Бегло посмотрел даташит: код для hd44780 тут явно не подойдёт. Так что если библиотеки не нашёл, надо писать свою.

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

а бегло сделать выкладку «почему не подойдет»? (как в квн-не - гиппотетически понятно, но все же ... :о)

дисплей как ни как печатает :о)

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

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

Я не нашёл в ДШ процедуру инициализации дисплея (которая нужна для hd44780), так что возможно ему можно сразу после включения тупо писать в RAM и он что-то покажет. Но это надо уже подробнее изучать.

DuMOHsmol
()

А, да, увидел фотку. Раз он что-то напечатал, то, видимо, можно просто писать в RAM. Но без использования команд даже курсор в начало не передвинешь, все равно придётся возиться с этим.

DuMOHsmol
()

А теперь я заметил UPD про HD66712. Вот этот контроллер вроде совместим :o)

DuMOHsmol
()

В таком случае там, вероятно, при инициализации неправильно устанавливается размер дисплея или что-то такое. Можно пропатчить библиотеку для hd44780.

DuMOHsmol
()
Последнее исправление: DuMOHsmol (всего исправлений: 1)
Ответ на: комментарий от DuMOHsmol

about HD66712U datashet

A single HD66712 is capable of displaying a 
- single 24-character line
- two    24-character lines
- four   12-character lines

у нас 4 строки по 20 символов, м.б. в этом собака зарылась?

не спроста только 12 символов «рисуются» без «забега» на след. строку...

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

В ДШ на HD66712 сказано, что там добавлен режим четырёх строк (по сравнению с HD44780, где такого режима не было). Я бы копал в эту сторону.

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

ну дак я и говорю, что есть режим 4 строки НО ПО 12 символов... (или я что-то не так понимаю, можно ссылку или контекст в даташите)

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

Я тоже этого прикола про 12 символов не понимаю. Если верить даташиту, то дисплей 20x4 вообще с ним сделать нельзя :) Но с даташитами на HD44780 такая фигня тоже есть.

Этот режим на 4 строки вроде по умолчанию выключен. Вот я бы попытался включить и посмотреть что получится.

DuMOHsmol
()
Ответ на: комментарий от sunjob

Неа. Там посылается команда для включения режима двух строк (так как у HD44780 режима на четыре строки нет). А уже библиотека делает вид, что их четыре. И контроллер, который имитирует HD44780 делает вид, что строки две, а сам выводит четыре.

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

но с другой стороны ... и строки «практически» правильно отрабатывают

lcd.setCursor(0, 0); lcd.print("<0................0>");
lcd.setCursor(0, 1); lcd.print("<1................1>");
lcd.setCursor(0, 2); lcd.print("<2................2>");
lcd.setCursor(0, 3); lcd.print("<3................3>");

думаю, тут в «длине буфера» и «распределении» строки вся собачатина

в обычном 2х16/44780 контроллере - сиутация такая с буфером - видимая строка 16 символов, а еще 16 за границей видимости, и можно строку туда-сюда гонять, как бегучку...

в этом дисплее, возможно, какое-либо иное «устройство» :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

Если в этом дисплее ровно 80 байт RAM (как говорит даташит), то пустых мест вообще быть не должно, так как 20x4 — это как раз восемьдесят символов. И копирование строки — это очень странно. Я бы ставил на то, что ему надо обязательно давать дополнительные команды для перехода в четырёхстрочный режим.

DuMOHsmol
()
Последнее исправление: DuMOHsmol (всего исправлений: 1)
Ответ на: комментарий от DuMOHsmol

вон тут «продаван» пытается утверждать что это обычные Hitachi 44780 :o)

https://meshok.net/item/79625167_%D0%AD%D0%BA%D1%80%D0%B0%D0%BD_LCD_20x4_HDM20416L_T

p.s. за команды спасибо... :о) можно бы и поподробнее прокомментировать... :о) читаем форум не только мы :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

Лениво мне комментировать. Даташит, страница 48. Первая команда включает бит RE, который нужен, чтобы выполнить вторую команду. Во второй команде включается режим четырёх строк, в третьей бит RE выключается назад. Не уверен, что это будет работать, но вроде так :D

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

ну ... вот и славно, трам пайрам!

зы. это не одно и то же? наткнулся в своих «выкусах» ... :о)

lcd.command(0x2c); // Function set: 4 bit mode, 2 line mode, enable RE bit
lcd.command(0x0d); // display control: 5x8 font mode, enable 4 line mode (ignores 2 line mode)
lcd.command(0x28); // Function set: 4 bit mode, disable RE bit
sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от DuMOHsmol

ну дык эт... понятно... бело по черному написано :о)

sunjob ★★★★
() автор топика
Ответ на: комментарий от DuMOHsmol

!!! Решение найдено !!!

1. LCD Library by Bill Perrу (великолепная библиотека, автор трудяга и молодчина и ... комсомолец, наверное :о)

2. дополнительная инициализация (спасибки DuMOHsmol)

#include <Arduino.h>
#include <Wire.h>

#include "lib/hd44780.cpp"
#include "lib/hd44780.h"
#include "lib/hd44780_pinIO.h"

// Arduino PDx     7,  6,   5,   4,   3,   2
// LCD pin        RS,  E, DB4, DB5, DB6, DB7
hd44780_pinIO lcd( 7,  6,   5,   4,   3,   2);

void setup()
{
lcd.begin  (20,4);

lcd.command(0x2C); delay(5);
lcd.command(0x09); delay(5);
lcd.command(0x28); delay(5);

lcd.setCursor(0, 0); lcd.print("<0................0>");
lcd.setCursor(0, 1); lcd.print("<1................1>");
lcd.setCursor(0, 2); lcd.print("<2................2>");
lcd.setCursor(0, 3); lcd.print("<3................3>");
}

void loop(){ }

результат - то, чЁ дохтур прописал!

http://i105.fastpic.ru/big/2018/0714/5f/38a08fffefaae83fa312111df939bc5f.jpg

p.s.

остается открытым вопрос - ЧТО ЗА ТАКОЙ РАСШИРЕННЫЙ РЕЖИМ, который используется в контроллере HD66712, в чем он «заключается»? доп. набор ROM или что еще?!

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от DuMOHsmol

непонятки с командами дисплея, даташит, стр.48 ...

пытался набегом разобратьяс с «командами», пока не все понятно

instruction: Clear display
description: Clears entire display and sets DDRAM address 0 in address counter.
command    :
RE  RS RW D7 D6 D5 D4 D3 D2 D1 D0
0/1  0  0  0  0  0  0  0  0  0 1

я так понимаю, что в данной «таблице» RE - это спец.бит (не пин дисплея Enable) и он обозначен как 0/1 (это фронт сигнала/переход 0->1 или что?)

... с остальными командами еще более запутаннее ...

допустим «Function set»

instruction: Function set
description: Sets interface data length(DL), number of display lines (L), 
and extension register write enable (RE).

command    :
RE  RS RW D7 D6 D5 D4 D3 D2 D1 D0
0    0  0  0  0  1 DL  N RE  -  -

DL - data length
RE - extension register write enable
L  - number of display lines (может опечатка и должно быть 'N'?)
N  - 3й бит в команде (неописанный) ?

... ну и так далее, все «не совсем явно и понятно»

если не сложно, пара мывслей для внесения ясности :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)

я так понимаю, что в данной «таблице» RE - это спец.бит (не пин дисплея Enable) и он обозначен как 0/1 (это фронт сигнала/переход 0->1 или что?)

0/1 — это уровень сигнала на одной из ног шины данных. А заносятся данные/команды по столбу на ноге E. Погугли туториалы по HD44780, там это наглядно расписано.

Насчёт function set: да, там опечатка, перепутали L и N.

DuMOHsmol
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.