Displays (Text)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • Das Punktmatrix Display mit 16 Zeichen in 2 Zeilen (16x2) ist das am Anfang am häufigsten verwendete Display. Das Display kann zwar nur Zeichen anzeigen, für Grafik benötigt man andere Displays. Aber es ist günstig und lässt sich aus Bascom sehr leicht ansprechen.
    Hier einmal in kürze ein paar Tipps und Tricks die so manchen Anfängerfehler vielleicht vermeiden.
    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. Deflcdchar 2 , 1 , 32 , 4 , 14 , 21 , 4 , 2 , 1 ' rpm links
    2. Deflcdchar 3 , 28 , 2 , 1 , 1 , 1 , 1 , 2 , 28 ' rpm rechts
    3. cls
    4. Upperline
    5. 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. for Vari1 = 1 to 255
    2. Cls
    3. Locate 1 , 1
    4. Lcd "Symbol-1 " ; Chr(vari1)
    5. Lowerline
    6. Lcd "Char nummer " ; Vari1
    7. Waitms 500
    8. 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. for Vari1 = 1 to 255
    2. Locate 1,10
    3. LCD SPC(6)
    4. Locate 1 , 1
    5. Lcd "Symbol-2 " ; Chr(vari1)
    6. Locate 2,13
    7. LCD SPC(3)
    8. Locate 2,1
    9. Lcd "Char nummer " ; Vari1
    10. Waitms 500
    11. 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 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. cls
    2. for durchl = 1 to 2 '2 durchläufe
    3. for vari1 = 0 to 10
    4. Locate 1,1
    5. LCD "Variable1 ";VARI1
    6. locate 2,1
    7. LCD "Durchlauf " ; durchl
    8. wait 2
    9. Next vari1
    10. wait 2
    11. 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. cls
    2. for durchl = 1 to 2
    3. for vari1 = 0 to 10
    4. Locate 1,1
    5. If vari1 < 10 then
    6. LCD "Variable1 ";" ";VARI1
    7. Else
    8. LCD "Variable1 ";VARI1
    9. End if
    10. locate 2,1
    11. LCD "Durchlauf " ; durchl
    12. wait 2
    13. Next vari1
    14. wait 2
    15. 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:


    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

    Alle Beispiele sind nochmal in der angefügten .BAS datei zu finden.D
    Dateien
    • 162LCD_Tobi_1.bas

      (2,58 kB, 128 mal heruntergeladen, zuletzt: )

    6.391 mal gelesen

Kommentare 1

  • daja -

    Beim letzten Projekt darüber gestolpert : Config Lcd = 16 * 2 besser Config Lcd = 16x2