Hallo.
https://cdn-reichelt.de/documents/datenblatt/A500/LCD%20128BL%20DIP.pdf
Ich will oben genanntes display einsetzten und habe zwei Fragen:
1.
Das Datenblatt liefert drei Applicationmodes:
Enable und CS LO-Aktiv,
Enable und CS HI-Aktiv,
2xEnable und kein CS,
Enabled und links rechts Umschaltung
Was verbirgt sich hinter den Betirebsarten? Welche Betriebsart ist am
Sinnvollsten? E1 und E2 schalten je eine Displayhälfte an/ab? Welchen
Sinn hat das ein Display halb ein/abzuschalten?
2.
Da ich Sorge habe, dass das Display wegen falschen Instruktionen
meineseits Daten (5V) auf den Bus legt und diese meinen Mikrocontroller
(3,3V) zerstören, will ich R/W fest auf Masse legen. Das Display wäre
dann immer im Modus, dass es nur Daten/Instruktionen empfängt. Macht das
Sinn? Wofür sollte man Daten aus einem Display auslesen? Weil das könnte
ich dann nicht mehr.
Viele Grüße, Kaarl
Kaarl schrieb:> Welchen> Sinn hat das ein Display halb ein/abzuschalten?
Das Display besteht elektrisch auf zwei 64*64 Pixel Displays, und nur
wenn CS auf 1 ist und Enable auf 1 geht werden die Daten vom Controller
angenommen. Beide CS und EN würde keinen Sinn machen, weil du vermutlich
nicht auf beiden Hälften das gleiche anteigen willst.
> Wofür sollte man Daten aus einem Display auslesen?
SO schnell fällt mir nur das Busy-Falg und das Setzen einzelner Pixel
ein. Bein setzten einzelner Pixel könnte man so vorgehen: Das
entsprechende Byte aus dem Display auslesen, mit der richtigen Maske
verodern und wieder zurückschreiben. Man könnte aber auch eine Kopie der
gesamten Daten im RAM haben.
Kaarl schrieb:> Was verbirgt sich hinter den Betirebsarten? Welche Betriebsart ist am> Sinnvollsten? E1 und E2 schalten je eine Displayhälfte an/ab?
Da gehts nicht um abschalten.
Da sind einfach 2 Kontroller verbaut. Für jede Hälfte einer.
Wenn du das Display programmierst, musst du daher den jeweils richtigen
Kontroller addressieren, in dessen Einflussbereich das Pixel liegt.
> Da ich Sorge habe, dass das Display wegen falschen Instruktionen> meineseits Daten (5V) auf den Bus legt und diese meinen Mikrocontroller> (3,3V) zerstören, will ich R/W fest auf Masse legen. Das Display wäre> dann immer im Modus, dass es nur Daten/Instruktionen empfängt. Macht das> Sinn? Wofür sollte man Daten aus einem Display auslesen?
Weil man Ausgaben mit dem momentan angezeigtem Bildschirminhalt zb
überlagern muss. Man kann sich natürlich auch im Speicher ein
entsprechendes Abbild vorhalten, aber dafür geht dann viel Speicher
drauf, der bei einem µC meist nicht so großzügig rumliegt.
Vielen Dank für die schnelle kompetente Hilfe euch beiden. Jetzt weiß
ich endlich, was mit chip select gemeint ist :) irgendwo logisch
Danke und bis bald
Zu 1) Schau Dir mal das Blockschaltbild an. Da siehst Du, dass das
Display zwei gleiche Controller enthält, wohl einer für die linke Hälfte
und einer für die rechte Hälfte.
Ich gehe davon aus, dass diese Controller kommunizieren, wenn der
jeweilige CS auf Low liegt und Enable auf High. Damit hast Du folgende
Möglichkeiten:
Variante a) Beide CS dauerhaft aus Low: Dann bestimmst Du mit
Enable=high, welcher der Controller angesprochen wird.
Variante b) Beide Enable dauerhaft aus High: Dann bestimmst Du mit
CS=Low, welcher der Controller angesprochen wird.
Man kann das noch anders kombinieren, macht aber vermutlich nur wenig
Sinn.
Besorge Dir mal das Datenblatt dieses Controller, wegen dem genauen
Timing. Denn es ist oft so, dass ZUERST der CS Eingang angesteuert
werden muss, dann R/W, dann Daten anlegen und dann ein Taktimpuls an E
erwartet wird. Dabei sind gewisse Zeitabstände einzuhalten.
Kann sein, dass dieser Controller sich einfacher verhält - würde mich
jedoch wundern.
Zu 2) Wofür sollte man Daten aus einem Display auslesen?
Zum Beispiel, um möglichst schnell Kommandos zu senden, aber nicht zu
schnell. Irgend ein Register zeigt an, ob der Chip bereit ist, Kommandos
anzunehmen. Die Kommandos dauern unterschiedlich lange.
Zum Beispiel, um den Bildschirminhalt zu verschieben (Scrolling), ohne
eine Kopie des gesamten Speichers im RAM des µC halten zu müssen. Was
allerdings eine blöde Idee ist, wenn die Kommunikation sehr langsam ist.
Zum Beispiel, um bewegte Grafiken oder scrollende Texte mit der
Bildwiederholrate zu synchronisieren, damit sie nicht ruckeln oder
verschmieren.
Es ist allerdings durchaus nicht unüblich, Displays mit festem Timing
nur schreiben anzusteuern.
Max H. schrieb:> Wenn du lesen willst, könnte man das mit ein paar bidirektionalen> Pegelwandlern lösen:https://upload.wikimedia.org/wikipedia/de/thumb/4/4e/Bidirektionaler_pegelumsetzer_wikide.svg/220px-Bidirektionaler_pegelumsetzer_wikide.svg.png
Wenn man keine Lust hat die ganzen Pegelwandler einzeln aufzubauen
könnte man auch einen DUAL-SUPPLY BUS TRANSCEIVER wie z.B. den
74LVC4245A verwenden. Bei den unidirektionalen Leitungen wie EN, CS,
R/W, D/I hast du kein Problem, da der Displaycontroller ab 2.4V High
erkennt.
stefanus schrieb:> Beide CS dauerhaft aus Low
Wenn alle Enable dauerhaft auf Low sind, wird sich nie ein Kontroller
angesprochen fühlen.
> Beide Enable dauerhaft aus High
Das wird auch nicht funktionieren, da der Enable Eingang auf Flanken
reagiert.
Max H. schrieb:> stefanus schrieb:>> Beide CS dauerhaft aus Low> Wenn alle Enable dauerhaft auf Low sind, wird sich nie ein Kontroller> angesprochen fühlen.>> Beide Enable dauerhaft aus High> Das wird auch nicht funktionieren, da der Enable Eingang auf Flanken> reagiert.
Mir gefällt Version 3 im Datenblatt am besten. Beide CS High fest auf 5V
und beide CS Low fest auf 0V. Dann brauche ich nur zwei Leitungen zum
Mikrocontroller (2xEnable) über die ich dann den gewünschten Chip
"wähle".
Oder schaltet ein KS0108er dann seine Bildschirmhälfte aus, während ich
den anderen beschreibe?
Kaarl schrieb:> Mir gefällt Version 3 im Datenblatt am besten.
Mir auch :-)
> Oder schaltet ein KS0108er dann seine Bildschirmhälfte aus, während ich> den anderen beschreibe?
Nein
Max H. schrieb:> Wenn man keine Lust hat die ganzen Pegelwandler einzeln aufzubauen> könnte man auch einen DUAL-SUPPLY BUS TRANSCEIVER wie z.B. den> 74LVC4245A verwenden. Bei den unidirektionalen Leitungen wie EN, CS,> R/W, D/I hast du kein Problem, da der Displaycontroller ab 2.4V High> erkennt.
Aber bei den Datenleitungen gibt es bei 3,3V Probleme? Doch nicht,
solange ich bloß unidirektional in Richtung Display sende, oder?
Max H. schrieb:> Michael schrieb:>> Du brauchst aber noch>> eine negative Spannung.> Dann ist es ja gut, dass das Display diese an Pin 13 ausgibt.
Wofür brauche ich die denn? Habe mir die Beschaltung jetzt so
vorgestellt (Anhang)
Kaarl schrieb:> Michael schrieb:>> Die andere Seite des Potis sollte>> gegen GND gehen.>> Bist du sicher? Im Datenblatt ist das Beinchen unbeschaltet.
wo du recht hast, hast du recht.
Könnte sein, dass auf der Platine bereits ein Widerstand gegen GND
verschaltet ist, um so den Spannungsteiler zu bilden und damit der Pin
nicht in der Luft hängt, wenn wieder mal die 'Spezialisten' die
Kontrastspannung einfach weglassen.
Hintergrund:
Der Pin ist mit 'Kontrastspannung' bezeichnet. D.h. an dem Pin wird eine
variable Spannung angelegt. Mit einem Poti alleine, in der Verschaltung
kann man aber keine variable Spannung erzeugen. Zu einem Spannungsteiler
braucht man immer 2 Widerstände, wobei es genügt die 2 Widerstände
dadurch zu bilden, dass man 1 Widerstandsbahn an irgendeiner Steller
abgreift und so 2 logische Widerstände erhält. Sprich. Ein
Spannungsteiler mit einem Poti sieht immer so aus
1
die eine Spannung +
2
|
3
- +-+
4
Widerstand 1 | |
5
- <---------------- Abgriff
6
Widerstand 2 | |
7
- +-+
8
|
9
die andere Spannung +
durch verstellen des Potis (der mittlere Anschluss), kann man am
'Abgriff' eine Spannung einstellen, die stufenlos zwischen 'die eine
Spannung' und 'die andere Spannung' einstellbar ist, weil man ja das
zahlenmässige Verhältnis der dadurch gebildetn Widerstäände 1 und 2
verändert, und die Summe dieser Aufteilung wieder den auf dem Poti
aufgedruckten Wert ergibt.
Lässt man einen der beiden äusseren Pins in der Luft hängen, dann hat
man keinen Spannungsteiler mehr, sondern einen einstellbaren Widerstand,
mit dem man laut Ohmschen Gesetzt R = U*I den Strom einstellen kann, der
durch den Widerstand bei bekannter Spannungdifferenz durch den
Widerstand rinnt, mehr aber auch nicht. Nur ist das hier ja nicht
gefragt. Der Pin heisst ja nicht 'Kontraststrom' sondern
'Kontrastspannung'. Irgendwo muss es also noch einen 2.ten Widerstand
geben.