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
Das ist Kitzlich. Aber bestimmt nicht Unmöglich!
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 ??
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.
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!
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
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
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
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
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.