LPT+LCD (HD44780) (Подключение и эксплуатация)

Все, что не подходит под определение "старого софта и железа", обсуждается здесь
Аватара пользователя
Downgrademan
Member
Сообщения: 189
Зарегистрирован: 27.08.2007,23:27
Откуда: Europe.Ukraine.Kyiv

LPT+LCD (HD44780)

Сообщение Downgrademan » 04.12.2010,20:07

Подключение и эксплуатация

Здравствуйте, уважаемые форумчани!
Недавно появилось желание купить LCD дисплей на контроллере HD44780. У меня есть два типа, один (16x1) второй (16x2).
Было все это дело припаяно к LPT (бывший centronic). Запустил программу LCD Smartie, настроил – текст выводиться…
Далее появилось желание написать программу на Borland C++ Builder 6 которая будет выводить какой-то текст на экран. Установил port95nt. Подключил в программе inpout32.dll. Где-то намутил программу, а она не работает… И почему – не знаю. Прошу помощи!
Даташит на HD44780:
http://pdf1.alldatasheet.com/datasheet- ... 44780.html

Схема, по которой было все дело спаяно:
Изображение

Дисплеи, которые имеются в наличии:
SC1601ASLB-SH-HB-R (готов к тестам)
WH1602A-YGH-CTK# (готов к тестам)
HW1602B-TMI-CT# (условно рабочий)
PLC1602D1W-SYL (еще не паяный)

Все дисплеи работают в LCD SMARTIE.

Код написанный в C++ Builder 6. Консольное приложение.

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

#include <vcl.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream.h>

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;
        hLib = LoadLibrary("inpout32.dll");
     if (hLib == NULL) {
          printf("LoadLibrary Failed.\n");
          return -1;
     }
        inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
     if (inp32 == NULL) {
          printf("GetProcAddress for Inp32 Failed.\n");
          return -1;
     }
        oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
     if (oup32 == NULL) {
          printf("GetProcAddress for Oup32 Failed.\n");
          return -1;
     }

/*******************************************************/


char string[] = "My test string";


char init[3];
init[0] = 0x0F;
init[1] = 0x01;  // clear display
init[2] = 0x38;  // 38 - 2 line  30 - 1 line



                cout << (inp32)(0x37A) << endl;
                (oup32)(0x37A, (inp32)(0x37A) | 0x0F);          //Reset control port
                cout << (inp32)(0x37A) << endl;
                (oup32)(0x37A, (inp32)(0x37A) ^ 0x0F);          //Reset RS
                cout << (inp32)(0x37A) << endl;


 for (int count = 0; count < 3; count++)
 {
        (oup32)(0x378, 0xA0);

       (oup32)(0x37A, (inp32)(0x37A) | 0x01);          //Set Enable (E == 1)
  Sleep(20);
       (oup32)(0x37A, (inp32)(0x37A) & 0x0E);          //Reset Enable (E == 0)
  Sleep(20);
 }
        (oup32)(0x37A, (inp32)(0x37A) | 0x08);          //Reset RS




 int len = strlen(string);
 for (int count = 0; count < len; count++)
 {
        (oup32)(0x378, string[count]);

        (oup32)(0x37A, (inp32)(0x37A) | 0x01);          //Set Enable
  Sleep(20);
        (oup32)(0x37A, (inp32)(0x37A) & 0x0E);          //Reset Enable
  Sleep(20);
 }


/*******************************************************/

     FreeLibrary(hLib);
     system("pause");
     return 0;
}

 /*

 lpt

 378  --  2,3,4,5,6,7,8,9       data  (0-7)
 37A  --  1,14,16,17            control  (0-3)

          1,2,4,8,16,32,64,128
                  10,20,40,80

        lcd      lpt
    RS  4        16
    E   6        1
        7:14     2:9

 */
При запуске программы – вообще дисплеи не реагируют и ничего не выводят. Только горит строка инициализации.

В общем, что есть – написано. Далее надо написать прогу, которая будет что-то выводить на экран. Команды на LPT подаются. Проверял самопалом со светодиодами, который подключается к LPT. Прошу помощи. Заранее благодарен!
Скорость - 'это страсть....'
"Мираж - скорость"

0leg
Advanced Member
Сообщения: 2265
Зарегистрирован: 06.10.2007,09:19
Откуда: Город-герой Тула
Контактная информация:

Сообщение 0leg » 04.12.2010,22:56

Downgrademan,
> Далее надо написать прогу, которая будет
Если хочецца на C, можешь поковырять исходники Mpxplay, конкретно -- файл display/lcd.c. Если пофиг на чём, ковыряй исходники хоть той же LCD Smartie...
Перед тем как постить глупость на форуме - воспользуйтесь поиском. Возможно эту глупость постил кто нибудь до вас. --- r, linux.org.ru

Dmitry Dubrovenko
Advanced Member
Сообщения: 1502
Зарегистрирован: 05.02.2008,14:16
Откуда: Cанкт-Ленинград
Контактная информация:

Сообщение Dmitry Dubrovenko » 04.12.2010,23:47

Downgrademan писал(а):купить LCD дисплей на контроллере HD44780. У меня есть два типа
Так в чём всё-таки вопрос?
Купить, есть, или программа не работает?
По команды дисплея могу помочь, про программу, увы...
ICQ нет, и в ближайшее время не будет!

Аватара пользователя
Downgrademan
Member
Сообщения: 189
Зарегистрирован: 27.08.2007,23:27
Откуда: Europe.Ukraine.Kyiv

Сообщение Downgrademan » 04.12.2010,23:56

Dmitry Dubrovenko
Тогда, пожалуйста, скажите что надо посылать на линии дисплея. Был бы очень благодарен ))
Программа, которая выше написана - у меня не работает...
Скорость - 'это страсть....'
"Мираж - скорость"

Dmitry Dubrovenko
Advanced Member
Сообщения: 1502
Зарегистрирован: 05.02.2008,14:16
Откуда: Cанкт-Ленинград
Контактная информация:

Сообщение Dmitry Dubrovenko » 05.12.2010,11:17

Downgrademan, ну, для начала, если у Вас действительно HD44780, то его надо продавать коллекционерам. :biggrin:
В основном, всё давно на клонах делается. Кстати, кто производитель дисплея?

Правильно ли выполнена инициализация (стр. 45-46 в/у даташита)?
ICQ нет, и в ближайшее время не будет!

emax
Member
Сообщения: 161
Зарегистрирован: 10.06.2009,19:49
Откуда: Пермь

Сообщение emax » 05.12.2010,12:52

Использовал похожий дисплей в
http://www.phantom.sannata.ru/forum/ind ... l=#pp87413

там правда на асме писал, но подсказать кое что смогу.
Проверь строку инициализации, сейчас посмотрел, у меня было 38H,8,1,6,0FH
8-битные системы 8088,80188,XT

Аватара пользователя
Downgrademan
Member
Сообщения: 189
Зарегистрирован: 27.08.2007,23:27
Откуда: Europe.Ukraine.Kyiv

Сообщение Downgrademan » 05.12.2010,19:20

Dmitry Dubrovenko
Кстати, кто производитель дисплея?

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

Дисплеи, которые имеются в наличии:
SC1601ASLB-SH-HB-R (готов к тестам)
WH1602A-YGH-CTK# (готов к тестам)
HW1602B-TMI-CT# (условно рабочий)
PLC1602D1W-SYL (еще не паяный)
Скорость - 'это страсть....'
"Мираж - скорость"

Аватара пользователя
Alex_reaper
Advanced Member
Сообщения: 370
Зарегистрирован: 10.07.2009,21:48
Откуда: СПб

Сообщение Alex_reaper » 05.12.2010,19:39

Downgrademan
Если тебе не нужно читать состояние внутренних регистров - посади R\W на землю. Тогда дисплей будет только в режиме приема команд и данных и не будет ждать команды чтения.
Нужны ли мы нам?

Dmitry Dubrovenko
Advanced Member
Сообщения: 1502
Зарегистрирован: 05.02.2008,14:16
Откуда: Cанкт-Ленинград
Контактная информация:

Сообщение Dmitry Dubrovenko » 05.12.2010,21:28

Downgrademan писал(а):Дисплеи, которые имеются в наличии:
1. Sunlike Display Tech.
2. WinStar
3. Видимо то же, только буквы указаны наоборот.
4. PALM Technology

Alex_reaper, если не использовать режим чтения, то будет невозможно прочитать флаг окончания записи данных в дисплей. Соответственно, придётся делать на фиксированных задержках, которые, для избежания глюков, придётся делать большие. Таким образом не получится получить оптимальный режим работы.
ICQ нет, и в ближайшее время не будет!

0leg
Advanced Member
Сообщения: 2265
Зарегистрирован: 06.10.2007,09:19
Откуда: Город-герой Тула
Контактная информация:

Сообщение 0leg » 05.12.2010,22:03

Dmitry Dubrovenko,
> придётся делать большие
Не знаю, как у тех дисплеев, что перечислены выше, но у, напр., GDM1602A большинство инструкций выполняются за _десятки_ _микросекунд_. Задержки, скажем, в 0.3 мс сильно повлияют на производительность, да?..

> не получится получить
Ща придёт Fe-Restorator, расскажет про масло масляное ;-)
Перед тем как постить глупость на форуме - воспользуйтесь поиском. Возможно эту глупость постил кто нибудь до вас. --- r, linux.org.ru

Гость

Сообщение Гость » 06.12.2010,00:59

0leg писал(а):Ща придёт Fe-Restorator, расскажет про
Нет необходимости. У моего заместителя, 0leg-а это неплохо получается! :) :)
PS. модератору: раздел - "флейм", и сообщение технически верно. Впрочем, продолжения сей дискуссии не будет.

Ответить