Forum: Mikrocontroller und Digitale Elektronik LCD (HD44780) wie krieg ich da ein Zeichen rein? =)


von C. H. (hedie)


Lesenswert?

Hallo

Ich versuche gerade ein LCD mit dem KS0066 Controller mittels 3-Wire
also
Schieberegister anzusteuern....

Nun sind ein paar fragen aufgetaucht:

1. Ist die Pause zwischen den Enabled Flanken kritisch?
bzw. ist es schlimm wenn sie länger dauert als üblich oder ist länger
egal?

2. Mir ist klar wie man Befehle an das LCD sendet, ich habe jedoch
nirgends einen hinweis darauf gefunden, wie man ein Zeichen
an das LCD sendet... Könnte mir da jemand den ablauf posten? Danke!


Jo, das waren eigentlich schon meine fragen

Danke schonmal

von Carsten (Gast)


Lesenswert?

Das ist Kitzlich.

Aber bestimmt nicht Unmöglich!

von C. H. (hedie)


Lesenswert?

Was meinst du mit kitzlich?

Ich weiss das es geht, aber ich weiss nicht in welcher form man
dem LCD ein Zeichen übergeben muss

Ich denke mal

RS muss High sein

aber was kommt an D0 - D7 ??

von SF (Gast)


Lesenswert?

Im Datenblatt des KS0066, und das findest du durch Googlen, sind wie bei 
solchen Datenblättern üblich, auch Tabellen über das Timing 
(AC-Charachteristics) bei verschiedenen Betriebsspannungen angegeben. 
Etwas tiefer ist ein nettes Diagramm, das die Bedeutung der 
verschiedenen angegebenen Zeiten erleutert. Da steht nur was von 
minnimalen Zeiten, die eingehalten werden müssen. Nichts von maximalen 
Zeiten. Bei 5V, zum Beispiel, darf der E-Impuls nicht kürzer als 230ns 
sein und sich nicht schneller als alle 500ns wiederholen. Länge Pausen 
müssten deshalb eigentlich unkritisch sein, es sei den der Chip hat noch 
merkwürdige, im Datenblatt undokumentierte, Eigenarten.

Der Chip versteht aber kein 3-Wire Protokoll. Das ist dann wohl eine 
zusätzliche Hardware (das Schieberegister) von dir.

RS muss 1 sein und an D0-D7 kommt der ASCII-Code des Zeichens, das du 
ausgeben willst. Vorraussetzung ist natürlich, das der Chip vorher 
richtig initialisiert worden ist.

Der Chip ist übrigens HD44780 kompatibel(=ein Nachbau). Und für den 
finden sich massig Programmierbeispiele im Netz.

von C. H. (hedie)


Lesenswert?

Ok

Danke für deine Info...

Ich weiss, das der KS0066 kein 3-Wire Protokoll versteht, deshalb auch 
das schieberegister... =)

Das mit dem ASCII Code wollte ich wisse :D

Danke!

von Peter D. (peda)


Lesenswert?


von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

Danke für den Link

Ich habe mir den code bis jetz jedoch schon geschrieben....

Leider macht er nicht das was er soll....


Es zeigt kein A an... im anhang ist mein C Code für die Ansteuerung....
Ich wäre sehr froh, wenn in sich jemand kurz anschauen könnte :D

Mein PORT: PORTB
Meine Pins:

PB0 => Enable
PB1 => RS
PB2 => CLK des Schieberegisters

RS ist zugleich mit dem Eingang des Registers verbunden....

So wollte ich das LCD verwenden:
1
#include <avr/io.h> 
2
#include "control.c"
3
4
5
int main(void)
6
{
7
  DDRB = 0Xff;
8
  PORTB = 0;
9
  
10
  while(1)
11
  {
12
    initialize();
13
    A();
14
    while(1);
15
  }
16
}

Doch leider nix auf dem LCD

von Peter D. (peda)


Lesenswert?

Ich hab jetzt keine Lust, jeder Deiner Schieberoutinen zu kontrollieren.
Mach Dir erstmal ne Funktion, die ein Byte rausschiebt und dann übergibt 
einfach die entsprechenden Bytes.

Und hau die 1ms zwischen den Taktflanken raus oder hast Du das 
Schieberegister mit Relais aufgebaut.
Normale HC-Logik brauchen kein Delay, langsame 4000-er CMOS ~1µs.

Der Enable-Puls sollte ~1µs sein und danach die im Datenblatt 
angegebenen Wartezeiten (~50µs bei Datenbytes, ~2ms bei Display-Clear).


Peter

von Oliver Gerlach (Gast)


Lesenswert?

Zum Thema Zeichen reinladen: Bei meinem HD44780 mache ich das so:
1
LcdCommand(0x40);    // first cgram address
2
LcdStringFL(man0,8);
Die zweite Funktion lädt ein String vom Flash ins Display. Wenn man den 
Display mit obigem Befehl vorher sagt, daß er ins CG schreiben soll, ist 
jedes Byte des Strings eine Zeile des Zeichens. Bei einer Zeichenhöhe 
von 8 Zeilen braucht man also 8 byte. Der einzige Witz ist also wirklich 
der Befehl 0x40 (bzw. auch jede andere Adresse). Der Befehl heißt im 
Datenblatt vom LCD 162C (reichelt) "SET CG RAM ADDRESS". Steht auf der 
Seite P.5. Hoffe, das hilft.
Grüße,
Oliver

von Jochen M. (taschenbuch)


Lesenswert?

Alles über LCD-Ansteuerung wurde HIER schon 500x geschrieben.
Eher 600x.
Alles!
Ohne Ausnahme!
Ausführlich!

WIESO jetzt schon wieder von vorne?
WIESO?

Jochen Müller

von Carsten (Gast)


Lesenswert?

>Was meinst du mit kitzlich?

>Ich weiss das es geht, aber ich weiss nicht in welcher form man
>dem LCD ein Zeichen übergeben muss

>Ich denke mal

>RS muss High sein

>aber was kommt an D0 - D7 ??

ich meine das Timeing zur init des LCD!

Wenn da irgendwas drin ist, was Du  nicht "voraus gesehen hast",
läuft das LCD nicht!

Trotzdem versuche es und stelle das Ergebnis bitte
allen hier zur Verfügung.

Danke Carsten

von C. Hediger (Gast)


Lesenswert?

So wies ausschaut wirds aber nicht klappen.... :(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.