Forum: Mikrocontroller und Digitale Elektronik ks0108 Ablauf richtig verstanden?


von Lesley (Gast)


Lesenswert?

Hi,

Bin grade dabei eine eigene Lib für eine KS0108 zu schreiben (ja ich 
weiß es gibt schon viele, wollte es aber mal gerne selber machen um zu 
verstehen wie das funktioniert). Die grundlegenden Sachen wie Zeichen 
ausgeben und auf BUSY abfragen haben schonmal geklappt:). Jetzt wollte 
ich mal kurz zusammenfassen wie und ob ich das ganze verstanden hab, 
könntet ihr mich bitte korrigieren falls irgendwas falsch ist?

Also:

1. Ich kann z.B. Kommandos an ein Display schicken indem ich RS = 0
   und R/W = 0 setze, den Chip auswähle (also 1 oder 2) und dann das
   entsprechende Kommando (z.B. Set Address, Set Page,...) über den
   CMD_PORT ausgebe. Wenn Chip1 ausgewählt ist erhält er das Kommando
   wenn Chip2 ausgewählt ist bekommt Chip2 das Kommando. Hierbei sollte
   ich wenn möglich die Koordinaten vergleichen, um natürlich zu wissen
   welchen Chip ich auswählen muss. Um den Befehl zu übergeben muss ich
   immer meine ENABLE Leitung von 1 auf 0 switchen richtig?

2. Ich kann Daten auf dem Display ausgeben, indem ich RS = 1 und R/W = 0
   setze. Nun werden die Daten an CMD_PORT Byteweise auf dem Display
   ausgebenen, wobei der Y-Poiter immer inkrementiert wird wenn ein Byte
   geschrieben wurde. Auch hier muss ich immer ENABLE von 1 auf 0 setzen
   um das Byte zu schreiben richtig? Ist es hier ratsam das BUSY Flag
   abzufragen um nich schon was neues zu schreiben wenn das Display
   noch beschäftigt ist oder geht das gar nicht? Habe leider noch nicht
   ganz verstanden wann es sicht lohnt das BUSY Flag abzufragen, kann
   mir das einer erklären?

3. Wenn ich RS = 0 und R/W = 1 setze kann ich den Status des Displays
   auslesen, also ob ON/OFF, Busy oder Reset. Ist es sinnvoll den Status
   auszulesen und auszuwerten bzw. wann ist dieses ratsam?

4. RS = 1 und R/W = 1 kann ich benutzen, um den Inhalt des Speichers
   auszulesen auf welchen mein Y-Pointer zeigt. Könnte ich z.B. ver-
   wenden wenn Zeichen fehlerhaft sind und ich den Inhalt überprüfen
   will (?).

5. Ich muss eig. immer meine ENABLE Leitung von 1 auf 0 setzen wenn ich
   einen Befehl ausführen möchte richtig?


So das ist ne ganze Menge Text, aber ich hoffe jemand hat die Lust und 
die Zeit sich das mal durchzulesen und mir zu sagen ob ich das in etwa 
verstanden habe bzw. was noch verbesserungswürdig ist. Wollte nämlich 
mal anfangen dann selber Funktionen zu schreiben:)

LG

von holger (Gast)


Lesenswert?

>eigene Lib für eine KS0108 zu schreiben (ja ich
>weiß es gibt schon viele, wollte es aber mal gerne selber machen um zu
>verstehen wie das funktioniert)

Dann schau für Erklärungen in die vorhandenen Quellcodes.
Glaubst du es hat einer Bock dir jetzt das Datenblatt
komplett vorzukauen?

Zumindest zu dem Punkt gebe ich dir einen Tip:

3. Wenn ich RS = 0 und R/W = 1 setze kann ich den Status des Displays
   auslesen, also ob ON/OFF, Busy oder Reset. Ist es sinnvoll den Status
   auszulesen und auszuwerten bzw. wann ist dieses ratsam?

Vergiss den Busy Check. Mach ein Delay.

von Lesley (Gast)


Lesenswert?

Ah ok alles klar schonmal gut zu wissen, dann muss ich das schonmal 
nicht realisieren:)

Und aus dem Datenblatt kann ich ja sehen dass ich einen Pegel min. 450ns 
anstehen lassen muss richtig?

von Lesley (Gast)


Lesenswert?

Hmm aber den Enable muss ich schon immer toggeln um einen Befehl zu 
übernehmen oder?

von ..,- (Gast)


Lesenswert?

holger schrieb:
> Vergiss den Busy Check. Mach ein Delay.

... Geschmackssache ...

von Bert 0. (maschinist)


Lesenswert?

..,- schrieb:
> holger schrieb:
>> Vergiss den Busy Check. Mach ein Delay.
>
> ... Geschmackssache ...

Hab ich beim Lesen auch gedacht...

Mit einem festen Delay in der Lib ist man wenig flexibel, falls mal 
Displays mit langsamerem Timing verwendet werden, kann es passieren, daß 
man trotz Delay zu früh wieder sendet und den Controller überfährt.

Besser ist es daher, in einer wiederverwendbaren Lib das Busyflag 
auszuwerten.


Gruß...Maschinist

von Lesley (Gast)


Lesenswert?

Hmm ok dann werd ich mal schauen, denke dass ich das erstmal mit einem 
Delay mache und dann später vllt das BUSY Flag abfrage.

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.