Hallo an alle,
ich versuche eine LCD-Display (WH1602A, Controller ST7066) mit einem
Beaglebone-Black und Python, mit dem folgenden Code zum laufen zu
bringen:
Ich bekomme das Display zwar angesteuert, leider ist die Ausgabe
teilweise fehlerhaft (siehe Foto). Ich vermute, dass etwas mit dem
toggle-Befehl oder der Wartezeit falsch ist, kann aber leider keinen
Fehler sehen.
Hat jmd vllt eine eine Idee?
Vielen Dank für eure Hilfe.
eyk107 schrieb:> Hat jmd vllt eine eine Idee?
Eine Anregung hätte ich: verwende das nächste Mal die [ c ] oder [ code
] Tags, so wie's über jeder Eingabebox steht:
1
Antwort schreiben
2
Wichtige Regeln - erst lesen, dann posten!
3
....
4
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
5
Formatierung (mehr Informationen...)
6
[c]C-Code[/c]
7
[code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
eyk107 schrieb:> leider ist die Ausgabe teilweise fehlerhaft (siehe Foto).
Was hättest du stattdessen erwartet?
Da kann doch auch noch was nicht stimmen:
Der Beaglebone Black verwendet 3,3V Logik. Ist das Display dafür
vorgesehen? Offenbar gibt es von WH1602A 3,3- und 5Volt-Versionen. Oder
wenn es ein 5V-Display ist, wurden Levelshifter davorgeschaltet ?
Lothar M. schrieb:> eyk107 schrieb:>> leider ist die Ausgabe teilweise fehlerhaft (siehe Foto).> Was hättest du stattdessen erwartet?>> Da kann doch auch noch was nicht stimmen:def lcd_string(zeile,text):> if zeile == 1:> lcd_byte(LCD_LINE_1, LCD_CMD)> if zeile == 2:> lcd_byte(LCD_LINE_1, LCD_CMD)
Hatte abc erwartet, das "b" wird ja auch angezeigt, nur ein " " anstatt
des a und eine 2 anstatt des c.
Danke für den Tipp, blöder Copy-paste Fehler.
Heiko G. schrieb:> Der Beaglebone Black verwendet 3,3V Logik. Ist das Display dafür> vorgesehen? Offenbar gibt es von WH1602A 3,3- und 5Volt-Versionen. Oder> wenn es ein 5V-Display ist, wurden Levelshifter davorgeschaltet ?
Verwende das 3,3V-Modell. Hab mich bei der Initialisierung auch an das
HD44780 gehalten, möglicherweise sind diese beiden doch nicht zu 100%
wie im Datenblatt?!
lcd_byte(LCD_LINE_1 if (1==zeile) else LCD_LINE_2, LCD_CMD)
So wird die Funktion immer aufgerufen, auch für andere Zahlen als 1,2
von "zeile" und man merkt es weil ggfs. Zeile 2 überschrieben wird, aber
keine ungültige Werte dem Displaycontroller gegeben werden.
Werden im Controllerdatenblatt die Zeilen nicht 0 und 1 nummeriert?
>> Werden im Controllerdatenblatt die Zeilen nicht 0 und 1 nummeriert?
Die Nummerierung kommt ja von mir, definiere ja den Bereich, an welcher
Stelle welche Zeile beginnt.
Jmd sonst vllt noch eine Idee, wieso nichts brauchbares ausgegeben wird?
Kurzes Update: Habe mir eben mal ein anderes Display mit dem KS0066
genommen:
Zeigt genau das gleiche in grün an. Also müsste das erste Display heile
sein, und der Fehler wohl in der Software liegen (andere Kabel
verwendet)...
Hallo eyk107,
nun im 4-Bit Moduls muss man in der Init jeweils nur ein Nibbel senden
und auch das Timing eingehalten werden!
Da das schon +1000x gemacht worden ist, kann man einfach einen C-Code
nehmen und in deine Systax übertragen.
Ein Byte sendet man dann durch zweimaligen Aufruf der Nibbel Procedure
unter Beachtung der Nibbelreihenfolge.
Karl M. schrieb:> Du wackelst mir auch zu viel am E-Signal.>> Das Timing für schreibe (write) Operationen ist als Diagramm in den> Datenblättern zu finden.
hab jetzt die init und enable geändert/weniger. Jetzt geht es, vielen
Dank