LCD 1x16 - źle steruję czy padnięty ?



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Henry(k)" <henrico_at_nospam_friko6.onet.pl>
Subject: LCD 1x16 - źle steruję czy padnięty ?
Date: Fri, 5 Nov 1999 10:06:37 +0100


Mam taki LCD: HLM3161N
jedna linijka 16 znaków i problem.
Steruję go sobie z LPT programikiem w C++,
widać że coś reaguje na komendy sterujące
(lekko zapala się piersze osiem znaków przy
ustawieniu jako 1-linia (30hex) lub nie (2-linie)
Ale wypisywanych znaków ni widu ni słychu.
Padnięty czy co ??


Programik Turbo C:

/* Register Select - Select Printer (PIN 17) */
/* Enable - Strobe (PIN1) */
/* DATA 0:7 Connected to DATA 0:7 */
#include <dos.h>
#include <string.h>
#define PORTADDRESS 0x378
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2

void main(void)
{
char init[10];
char string[10];
int count;
init[0] = 0x01; /* czysc ekran */
init[1] = 0x38; /* dwie linijki */
init[2] = 0x0E; /* włącz ekran */
init[3] = 0x0F; /* */
init[4] = 0x01; /* */
outportb(CONTROL, inportb(CONTROL) & 0xDF); /* Reset Control Port */
outportb(CONTROL, inportb(CONTROL) | 0x08); /* Set Select Printer */
for (count = 0; count <= 2; count++) /* inicjacja LCD */
{
outportb(DATA, init[count]);
delay(80);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe (Enable)*/
delay(20); /*
Larger Delay for INIT */
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe (Enable)*/
delay(20); /*
Larger Delay for INIT */
}
outportb(CONTROL, inportb(CONTROL) & 0xF7); /* Reset Select Printer
(Register Select) */
string[0] = 0x54; /* T */
string[1] = 0x45; /* E */
string[2] = 0x53; /* S */
string[3] = 0x54; /* T */
for (count = 0; count <=3; count++) /* wyslanie tekstu */
{
outportb(DATA, string[count]);
delay(80);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe */
delay(10);
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe */
delay(20);
}
}

--
Pozdrowionka.
Henry(k) < henrico_at_nospam_friko6.onet.pl >



Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej Fien" <fien_at_nospam_hbury.com>
Subject: Odp: LCD 1x16 - źle steruję czy padnięty ?
Date: Fri, 05 Nov 1999 12:02:25 GMT


Z twojego opisu widac, ze wysiwetlacz nie przeszedl inicjalizacji.
Robisz ja ???

--

AF
mailto: fien_at_nospam_hbury.com



Poprzedni Następny
Wiadomość
Spis treści
From: Jerzy Lelusz <jlelusz_at_nospam_csk.pl>
Subject: Re: LCD 1x16 - =?iso-8859-2?Q?=BCle=20steruj=EA?= czy
Date: Fri, 05 Nov 1999 20:58:06 +0100


Ale z programu nie widac czy dobrze ustawiasz kontrast :)

Jurek

Andrzej Fien wrote:

Z twojego opisu widac, ze wysiwetlacz nie przeszedl inicjalizacji.
Robisz ja ???

--
>
> AF
> mailto: fien_at_nospam_hbury.com

--
----------------------------------
mailto:jlelusz_at_nospam_csk.pl ICQ:35378815

Poprzedni Następny
Wiadomość
Spis treści
From: "Henry(k)" <henrico_at_nospam_friko6.onet.pl>
Subject: Re: LCD 1x16 - źle steruję czy padnięty ?
Date: Sat, 6 Nov 1999 07:18:35 +0100


Właśnie, Należy czytać cały post (nie każdy zna TurboC, ale jest opis).
Jak widać z programu inicjalizacja jest, w dodatku pętle czasowe
są tak duże, że na panelu LM018 (2x40) widać jak pokolei wypisuje literki.
No właśnie, LM018 działa a ten nie. Najdziwniejsze jest że widać jak
przechodzi inicjalizację ale literek brak.
Pozdrowionka.
Henry(k)

Jerzy Lelusz napisał(a) w wiadomości: <382336CE.C5EE33FC_at_nospam_csk.pl>...
Ale z programu nie widac czy dobrze ustawiasz kontrast :)

Jurek

Andrzej Fien wrote:

Z twojego opisu widac, ze wysiwetlacz nie przeszedl inicjalizacji.
Robisz ja ???

AF





Poprzedni Następny
Wiadomość
Spis treści
From: "Henry(k)" <henrico_at_nospam_friko6.onet.pl>
Subject: Re: LCD 1x16 - źle steruję czy padnięty ?
Date: Mon, 8 Nov 1999 10:53:06 +0100


Henry(k) napisał(a) w wiadomości: <38229c87_at_nospam_news.vogel.pl>...
Mam taki LCD: HLM3161N
jedna linijka 16 znaków i problem.



Podłączyłem go do niebieskiego Urmeta zamiast oryginału
(są praktycznie identyczne) i DZIAŁA.
Co jest kurna, na LPT nie działa, a tu działa.
Na tym samym programie LM018 (2x40 znaków) działa.
Czy porypałem kody sterujące, czy o czymś nie wiem.
Heeelp!!!

Pozdrowionka.
Henry(k) < henrico_at_nospam_friko6.onet.pl >



Poprzedni Następny
Wiadomość
Spis treści
From: "Byrek" <byrek_at_nospam_masters.pl>
Subject: Re: LCD 1x16 - źle steruję czy padnięty ?
Date: Tue, 09 Nov 1999 05:34:46 GMT


Podłączyłem go do niebieskiego Urmeta zamiast oryginału
(są praktycznie identyczne) i DZIAŁA.
Co jest kurna, na LPT nie działa, a tu działa.
Na tym samym programie LM018 (2x40 znaków) działa.
Czy porypałem kody sterujące, czy o czymś nie wiem.
Heeelp!!!
Hmm :)
Kiedys przerabialem temat LPT, podczas uruchamiania programatorka do
atmeli.
Jeden maly niuans. Pomierz poziomy TTL na wyjsciu. Ja w jednym z komputerow
mam taki smieszny port (dzialajacy), w ktorym na wyjsciu dla 0 jest 0V, dla
1 - 0.8V
stad prosty wniosek - potrzebna matryca pull-up.

Po drugie w LPT masz trzy porty (to pewnie wiesz). Zaraz, mialem gdzies
opis..
Aha, no i jeszcze, zeby bylo smieszniej, to w porcie "control" niektore
bity sa negowane (wysylasz 1, a na wyjsciu masz 0), a niektore nie.

Michal

03BC-03BF ---- parallel printer port, same as 0278 and 0378

03BC w data port
03BD r/w status port
bit 7 = 0 busy
bit 6 = 0 acknowledge
bit 5 = 1 out of paper
bit 4 = 1 printer is selected
bit 3 = 0 error
bit 2 = 0 IRQ has occurred
bit 1-0 reserved

03BE r/w control port
bit 7-5 reserved
bit 4 = 1 enable IRQ
bit 3 = 1 select printer
bit 2 = 0 initialize printer
bit 1 = 1 automatic line feed
bit 0 = 1 strobe


Poprzedni Następny
Wiadomość
Spis treści
From: "Henry(k)" <henrico_at_nospam_friko6.onet.pl>
Subject: Re: LCD 1x16 - źle steruję czy padnięty ?
Date: Tue, 9 Nov 1999 07:27:45 +0100


Byrek napisał(a) w wiadomości: <01bf2a6f$7c2fb120$LocalHost_at_nospam_ppp>...
Podłączyłem go do niebieskiego Urmeta zamiast oryginału
(są praktycznie identyczne) i DZIAŁA.
Co jest kurna, na LPT nie działa, a tu działa.
Na tym samym programie LM018 (2x40 znaków) działa.
Czy porypałem kody sterujące, czy o czymś nie wiem.
Heeelp!!!
Hmm :)
Kiedys przerabialem temat LPT, podczas uruchamiania programatorka do
atmeli.
Jeden maly niuans. Pomierz poziomy TTL na wyjsciu. Ja w jednym z komputerow
mam taki smieszny port (dzialajacy), w ktorym na wyjsciu dla 0 jest 0V, dla
1 - 0.8V
stad prosty wniosek - potrzebna matryca pull-up.

Po drugie w LPT masz trzy porty (to pewnie wiesz). Zaraz, mialem gdzies
opis..
Aha, no i jeszcze, zeby bylo smieszniej, to w porcie "control" niektore
bity sa negowane (wysylasz 1, a na wyjsciu masz 0), a niektore nie.

Michal



Poziomy i stany są OK.
A z tymi adresami może coś być, bo Ten programik (Turbo C) nie steruje
szyną danych LPT na laptopach CA4500 i Siemensa (wszystkie wyjścia 1),
ale bitami kontrolnymi tak. Brak problemów na stacjonarce i laptopie CA6100.

Pozdrowionka.
Henry(k) < henrico_at_nospam_friko6.onet.pl >



Poprzedni Następny
Wiadomość
Spis treści
From: "Wojtek Sujkowski" <wpsujkowski_at_nospam_qdnet.pl>
Subject: Re: LCD 1x16 - źle steruję czy padnięty ?
Date: Mon, 8 Nov 1999 20:04:29 +0100



Henry(k) napisał(a) w wiadomości: <38229c87_at_nospam_news.vogel.pl>...
Mam taki LCD: HLM3161N
jedna linijka 16 znaków i problem.
Steruję go sobie z LPT programikiem w C++,
widać że coś reaguje na komendy sterujące
(lekko zapala się piersze osiem znaków przy
ustawieniu jako 1-linia (30hex) lub nie (2-linie)
Ale wypisywanych znaków ni widu ni słychu.
Padnięty czy co ??


Programik Turbo C:

/* Register Select - Select Printer (PIN 17) */
/* Enable - Strobe (PIN1) */
/* DATA 0:7 Connected to DATA 0:7 */
#include <dos.h>
#include <string.h>
#define PORTADDRESS 0x378
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2

void main(void)
{
char init[10];
char string[10];
int count;
init[0] = 0x01; /* czysc ekran */
init[1] = 0x38; /* dwie linijki */
init[2] = 0x0E; /* włącz ekran */
init[3] = 0x0F; /* */
init[4] = 0x01; /* */
outportb(CONTROL, inportb(CONTROL) & 0xDF); /* Reset Control Port */
outportb(CONTROL, inportb(CONTROL) | 0x08); /* Set Select Printer
*/
for (count = 0; count <= 2; count++) /* inicjacja LCD */
{
outportb(DATA, init[count]);
delay(80);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe (Enable)*/
delay(20); /*
Larger Delay for INIT */
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe (Enable)*/
delay(20); /*
Larger Delay for INIT */
}
outportb(CONTROL, inportb(CONTROL) & 0xF7); /* Reset Select Printer
(Register Select) */
string[0] = 0x54; /* T */
string[1] = 0x45; /* E */
string[2] = 0x53; /* S */
string[3] = 0x54; /* T */
for (count = 0; count <=3; count++) /* wyslanie tekstu */
{
outportb(DATA, string[count]);
delay(80);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe */
delay(10);
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe */
delay(20);
}
}

--
>Pozdrowionka.
>Henry(k) < henrico_at_nospam_friko6.onet.pl >
>
Cześć

Mam kilka uwag, które może Ci pomogą
1. Nie zauważyłem abyś sterował linią R/W wyświetlacza - czy zostawiłeś
ją "wiszącą"?
2. Zapomniałeś przy inicjalizacji o komendzie "Entry mode set".
Jeśli wyświetlacz przyjmuje jako default przesuwanie ekranu przy
wpisywaniu znaków to rzeczywiście wtedy niewiele zobaczysz.
3. Z Twojego programu wynika, że linia RegisterSelect (Select Printer)
ma inwerter na wyjściu gdyż RS należy ustawić na Low przy wysyłaniu
komend sterujących, a na High przy wysyłaniu danych (kodów znaków)
Jeśli tak to OK, jeśli nie to tu też jest błąd.
4. Podaj w jakim multipleksie pracuje ten wyświetlacz (wygląda na 1/16).
Zmiana sterowania ilości linii (1 lub 2) przy wyświetlaczu multiplexowanym
1/16
radykalnie zmienia adresy DDRAM wyświetlanych znaków.

Mam nadzieję, że te uwagi mogą Ci być przydatne

Życzę powodzenia

Wojtek

wpsujkowski_at_nospam_qdnet.pl




Poprzedni Następny
Wiadomość
Spis treści
From: "Henry(k)" <henrico_at_nospam_friko6.onet.pl>
Subject: Re: LCD 1x16 - źle steruję czy padnięty ?
Date: Tue, 9 Nov 1999 07:23:55 +0100



Wojtek Sujkowski napisał(a) w wiadomości:
<80785a$p7v$1_at_nospam_sunsite.icm.edu.pl>...
Cześć

Mam kilka uwag, które może Ci pomogą
1. Nie zauważyłem abyś sterował linią R/W wyświetlacza - czy zostawiłeś
ją "wiszącą"?


Jest podłączona do masy, czyli tylko wpis bez czytania i sprawdzania BUSY.

2. Zapomniałeś przy inicjalizacji o komendzie "Entry mode set".
Jeśli wyświetlacz przyjmuje jako default przesuwanie ekranu przy
wpisywaniu znaków to rzeczywiście wtedy niewiele zobaczysz.
3. Z Twojego programu wynika, że linia RegisterSelect (Select Printer)
ma inwerter na wyjściu gdyż RS należy ustawić na Low przy wysyłaniu
komend sterujących, a na High przy wysyłaniu danych (kodów znaków)
Jeśli tak to OK, jeśli nie to tu też jest błąd.

Stany są OK, poziomy też, sprawdzałem w trybie krokowym, nie pisałem
komendy "Entry mode set", zaraz to sprawdzę.

4. Podaj w jakim multipleksie pracuje ten wyświetlacz (wygląda na 1/16).
Zmiana sterowania ilości linii (1 lub 2) przy wyświetlaczu multiplexowanym
1/16 >radykalnie zmienia adresy DDRAM wyświetlanych znaków.


No właśnie, jak go sterować ??? Ja ustawię jako jedną linię widzę, że pali
się
pierwszych osiem znaków. Przy dwóch liniach wygląda na dobrze ale może
adresy znaków na wyświetlaczu są poprzesuwane. Może jakieś doświadczenia
z wyświetlaczami 1x16.


Mam nadzieję, że te uwagi mogą Ci być przydatne

Życzę powodzenia

Wojtek

wpsujkowski_at_nospam_qdnet.pl


Pozdrowionka.
Henryk < henrico_at_nospam_friko6.onet.pl >