Displays (Text)

Displays (Text)
HD44780 Controller:
Zuerst gab es nur einen Controller auf dem Display: HD44780 von Hitachi; inzwischen werden meist kompatible Controller
z.b.SPLC780, KS007076 verwendet. Vor dem Kauf sollte man klären, ob das Display 44780 kompatibel ist.
Konfiguration:
Zuerst muss das Display in Bascom konfiguriert werden, das heißt welcher PIN vom Prozessor ist mit welchem Anschluss
des Displays verbunden. In 99% aller Fälle wird das Display im PIN- mode angesprochen, daher sind nur 4
Datenleitungen notwendig, die ungenutztenDatenanschlüsse und der R/W Anschluss am Display man sicherheitshalber
an GND an.
Oft irgendwo gesehen und einfach rüber kopiert findet man zusätzlich zur Konfiguration des Pin Mode noch „CONFIG
LCDBUS =“. Das Ist falsch, es geht nur PIN oder BUS Mode nicht beides gleichzeitig. Bus mode würde bedeuten einen
externen 8 Bit Datenbus des AVR zu benutzen. Dies können nicht alle AVR und wird normalerweise nur bewusst gemacht.
So solle es aussehen:
Quellcode
1. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
2. Config Lcd = 16 * 2
Die Ansteuerung im Pin mode ist sehr flexibel, Pins unterschiedlicher Ports können gleichzeitig verwendet werden,
allerdings geht diese Flexibilität auf Kosten der Code Größe. Wer alle LCD Pins auf dem gleichen Port hat und das
Programm zu groß ist sollte sich die Hilfe zu LCD4E2.LBX und LCD4-LBX einmal anschauen.
Zeichensatz:
Das Display hat einen fest eingebauten Zeichensatz, und Speicher für 8 selbst erzeugte Zeichen, bzw. können gleichzeitig
8 eigene Zeichen im Display ram gespeichert werden. Diese können mit dem LCD Designer in Bascom erzeugt und ins
Programm übernommen werden. Hier z.b. ein Kreis, der aus zwei Zeichen besteht:
Quellcode
1.
2.
3.
4.
5.
Deflcdchar 2 , 1 , 32 , 4 , 14 , 21 , 4 , 2 , 1 ' rpm links
Deflcdchar 3 , 28 , 2 , 1 , 1 , 1 , 1 , 2 , 28 ' rpm rechts
cls
Upperline
Lcd "Kreis " ; Chr(2);CHR(3)
Image2017_070117_110802_00001.jpg
Wichtig hierbei nach der Definition eigener Zeichen das Display mit CLS einmal zurücksetzen.
Zeichensatz:
Jeder Hersteller kann sich bei der Produktion seinen eigenen Zeichensatz in die Displays einbauen lassen, Z.B.
CHAR(24), welches normalerweise leer ist:
Image2017_070117_110802_00000.jpg
Dieses Display stammt aus einem alten Faxgerät, da ist wohl ein erweiterter Zeichensatz für das Fax mit abgelegt. Die
Sonderzeichen sind auch nicht immer da, wo sie auf der Standardtabelle angegeben sind:
Charset.gif
Selten weiß man, welche Zeichentabelle wirklich in seinem Display abgelegt ist. Da sich alle Zeichen im Display auch per
CHAR Nummer ansprechen lassen, findet man mit diesem kleinen Programm eventuell das gesuchte Sonderzeichen.
Quellcode
1.
2.
3.
4.
5.
6.
7.
8.
for Vari1 = 1 to 255
Cls
Locate 1 , 1
Lcd "Symbol-1 " ; Chr(vari1)
Lowerline
Lcd "Char nummer " ; Vari1
Waitms 500
next Vari1
Da mit Variablen gearbeitet wird, kann CHR(0) nicht angezeigt werden (Würde als String Terminator behandelt). LCD
chr(0) ist ohne das 0 als Variable benutzt wird ok.
In der oberen Zeile wird das Zeichen dargestellt, welches zur in der unteren Zeile angezeigtem CHAR Nummer gehört.
Flackern:
Vielleicht ist es im vorherigen Beispiel aufgefallen, die ganze Schrift flackert immer ein bisschen wenn ein neuer Wert
kommt. Das liegt an dem CLS Befehl der vor jedem neuen durchlauf kommt. Er löscht alle Inhalte, setzt aber auch das
Display zurück, die auftretende Pause erzeugt das Flackern.
Das geht schöner:
Quellcode
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for Vari1 = 1 to 255
Locate 1,10
LCD SPC(6)
Locate 1 , 1
Lcd "Symbol-2 " ; Chr(vari1)
Locate 2,13
LCD SPC(3)
Locate 2,1
Lcd "Char nummer " ; Vari1
Waitms 500
next Vari1
Alles anzeigen
Was hat sich geändert? Das Display wird nicht mehr bei jedem Durchgang zurückgesetzt. Der Befehl :
Quellcode
1. Locate 1,10
2. LCD SPC(6)
setzt die aktuelle Position auf die erste Zeile 10tes Zeichen und schreibt dann 6x ein leeres Zeichen. Würde statt mit LCD
http://bascomforum.de/lexicon/index.php?entry/67-displays-text/&s=c0361046e6c4c8c82af76033a68da5ffec69fc8c
2
SPC(6) auch mit LCD „„ funktionieren. SPC ist schneller und funktioniert auch mit Variablen.
Feste Zahlenpositionierung:
Auch oft nachgefragt, hier wieder ein Beispiel:
Quellcode
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cls
for durchl = 1 to 2 '2 durchläufe
for vari1 = 0 to 10
Locate 1,1
LCD "Variable1 ";VARI1
locate 2,1
LCD "Durchlauf " ; durchl
wait 2
Next vari1
wait 2
next durchl
Alles anzeigen
Image2017_070117_110802_00005.jpg
Im zweiten durchlauf sieht man auf einmal ein 20, wo kommt die her? Verzählt?
Nein, wir schreiben immer die Zahl an die gleiche Position, die zuletzt angezeigte Zahl war zweistellig, geschrieben wird
immer von links nach rechts, so ist die 0 das Überbleibsel der 10 aus dem ersten Durchlauf.
So etwas lässt sich wieder auf verschiedensten Wegen lösen, löscht man aber nur beide stellen mit SPC oder „ „ springt
ja die Position der Einer wenn von der 9 auf die 10 gewechselt wird. Mit sowas kann man das z.b. lösen:
Quellcode
1.
2.
6.
5.
4.
3.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
19.
18.
17.
20.
cls
for durchl = 1 to 2
for vari1 = 0 to 10
Locate 1,1
If vari1 < 10 then
LCD "Variable1 ";" ";VARI1
Else
LCD "Variable1 ";VARI1
End if
locate 2,1
LCD "Durchlauf " ; durchl
wait 2
Next vari1
wait 2
next durchl
Alles anzeigen
So wird geprüft ob eine zweistellige Zahl vorliegt. Ist dies nicht der Fall wird an der 10er Position ein zusätzliches
Leerzeichen ausgegeben und somit stehen die einer immer an der gleichen Stelle.
Zeilen:
Wir lassen einmal das hier laufen:
http://bascomforum.de/lexicon/index.php?entry/67-displays-text/&s=c0361046e6c4c8c82af76033a68da5ffec69fc8c
3
Quellcode
1. cls
2. Locate 1 , 1
3. lcd "123456781234567812345678123456781234567812345678"
Image2017_070117_110802_00003.jpg
Warum stehen jetzt in der Unteren Zeile auch zahlen 1-8?
Von der Speicherverwaltung ist das 16x2 Display nicht anderes als ein 40x2 Display nur das Displayglas ist kürzer, d.h.
die Zeichen 17-40 der Zeile1 werden zwar im Speicher abgelegt, können aber nicht angezeigt werden. Zeichen 41 liegt an
der ersten Stelle der unteren Zeile und da der Speicher fortlaufend angelegt ist, schreibt Bascom da einfach weiter. Es
existiert kein Check, ob der angegebene String auch in die Zeile passt. Nicht weiter schlimm, aber falls sich einmal
jemand wundert, warum er irgendwo Zeichen hat die woanders ein sollten, kann dies eine Erklärung sein. Bei
Grafikdisplays übrigens nicht anders.
Display an 3,3V:
Bis auf seltene Exemplare werden die 44780 Displays meist für 5V angeboten. Der 44780 würde auch mit 3,3V noch
laufen,
ABER: die Kontrastspannung muss je nach Display 4,2V oder mehr unter der Betriebsspannung liegen. Bei 5V
Betriebsspannung kein Problem, wenn die Kontrastspannung mit dem Poti auf 0,8V eingestellt ist bestehen ja 4,2V
Unterschied. Bei 3,3V funktioniert das nicht mehr. Versorgungsspannung zu GND sind ja nur 3,3V. Also muss die
Kontrastspannung negativer als GND werden.
Dies kann durch externen Spannungswandler z.b. ICL7660 oder durch eine Ladungspumpe die ein Rechtecksignal
bekommt realisiert werden:
1253.gifchargep.PNGfür >5KHz Diode:1N5817 oder BAT48; Kondensatoren: Low-esr
Fig1: newhavendisplay.com/contrastvoltage_circuit.html
Zum ersten Testen und falls am Wochenende kein Bauteilehändler offen hat reichen zwei normale Batterien die in Reihe 3V bereitstellen. + von dem Batteriepack an GND der Schaltung. Kontrast Poti zwischen GND und minus der Batterie, den
Poti-Abgriff wie gewohnt ans Display.
Zusätzlich sollte ein Widerstand auf dem Display getauscht werden; er sollte bei 5V 91Kohm haben (SMD aufdruck=913)
bei 3,3V 75Kohm. 475Kohm Parallel zum 91K Widerstand ergeben auch 75Kohm. Ohne den Widerstandstausch ist das
Display recht träge und kann auch einmal Befehle verschlucken.
Ein Rechtecksignal kann man am AtMega8 Port b.1 z.b. so erzeugen:
Quellcode
1. Config Portb.1 = Output
2. Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
3. Compare1a = 128
Erzeugt bei 8MHz Prozessortakt ein 15KHz Signal
Es gibt auch Displays die haben hinten freihe Bestückungsplätze für Wandler/Ladungspumpen, somit spart man sich
seine eigene Schaltung zu erweitern wenn man auf 3,3V Wechseln will. Dazu mehr im Forum
http://bascomforum.de/lexicon/index.php?entry/67-displays-text/&s=c0361046e6c4c8c82af76033a68da5ffec69fc8c
4
Alle Beispiele sind nochmal in der angefügten .BAS datei zu finden.D
http://bascomforum.de/lexicon/index.php?entry/67-displays-text/&s=c0361046e6c4c8c82af76033a68da5ffec69fc8c
5