ich habe Probleme mit der Anzeige auf meinem 20 * 4 Display. Wenn in der ersten Zeile ein Text Erscheint, der länger als 20 Zeichen ist, springt der folgende Text auf die dritte Zeile. Sollte der Text noch länger sein, springt er dann auf Zeile 2 und anschließend auf Zeile 4. Wie kann man das in Bascom ändern bzw. Berichtigen?
Was ist das für ein Display, Controller ? Datenblatt? Kann das sein das es 2 Enable Eingänge hat ?
ggf 1+3 Zeile = 1 Enableeingng, 2+4 = 1 Enableeingang ?
(mehr kann der Hitachi Controller nicht verarbeiten) Dieses betrifft z.B. die Module mit 4 * 27, bzw. 4 * 40 Zeichen. Um das Problem zu lösen wurde diesen Displays eine zweite E Leitung spendiert, alle anderen Leitungen des zweiten Controllers sind parallel angeschlossen. In jedem Fall ist das Datenblatt des Herstellers zu Rate zu ziehen. In Bascom wird eine zusätzliche Bibliothek geladen um solche Displays ansprechen zu können. Dadurch ist es möglich quasi 2 Displays getrennt anzusteuern, bei einem 4 Zeilen-Display sind die beiden oberen und die zwei unteren getrennt zu selektieren.
[bearbeiten]
Das zusätzliche Programm für das LCD, bzw. die Änderungen
'Einbindung der LCD-Bibliothek für ein 2-Prozessor-Display $lib "lcd4e2.lbx"
'Bascom kennt keine Display mit 27 * 4 Zeichen, daher 40 * 4 verwenden
Config Lcd = 40 * 4
' Systemvariable der LCD-Bibliothek (wichtig, bloß nicht ändern)
Dim ___lcde As Byte
' wählt die beiden oberen Zeilen aus
___lcde = 0
' löscht die beiden oberen Zeilen
Cls
' wählt die obere Zeile aus
Upperline
' schreibt in die erste Zeile an Position 3
Locate 1 , 3
' den Text in Anführungszeichen
Lcd "Zeile 1"
' wählt die zweite Zeile aus
Lowerline
' schreibt in die zweite Zeile an Position 2
Locate 2 , 2
' in diesem Fall den Inhalt der Variablem mit dem Namen Variable
Lcd Variable
' unterdrückt den Cursor
Cursor Off
' wählt die beiden unteren Zeilen aus
___lcde = 1
Waitms 100
Cls
Thirdline
Locate 1 , 1
Lcd "Zeile 3"
Fourthline
Locate 2 , 1
Lcd "Zeile 4"
Cursor Off
also, das Display, um das es sich handelt ist ein relativ normales 20 x 4 ohne zweites Enable (HD44780 kompatible). Wenn ich die Zeilen gezielt anspreche mit 'Locate', dann sitzt der Text auch da, wo ich ihn haben möchte. Nur wenn ich z.B. über RS232 (UART AVR) Zeichen empfange, dann wird erst die erste Zeile, dann die dritte Zeile usw. Beschrieben. Die Frage ist nun, wie kann ich dem AVR Sagen, dass er die empfangenen Daten in der richtigen Reihenfolge aufs Display bringen soll. Mit 'Locate' scheint es nicht zu funktionieren. Beschaltet ist das Display ganz normal:
R/W = Masse, R/S = PB2, E = PB1, DB4 = PB0, DB5 = PD7, DB6 = PD6, DB7 = PD5.
Ich gehe mal nicht davon aus, dass beim Definieren der Ports am Mega8 irgendwas berücksichtigt werden muss oder?
Gruß
Klaus
PS: Ich hab das Datenblatt, welches ich dazubekommen habe, mal angehängt. Ich glaube aber nicht, dass es am Display liegt.
Also nach dem Datenblatt haste einen Driver IC: S6A0066 OR SPLC780 drauf
Auf Seite 8 unter 10 steht KS0066 or SPLC780
Also nichts mit HD44780 Treiber, kompatible nicht 100%
Aber du siehst ja was
Nochmal - mit Locate kannst du alle Zeilen ansprechen 1,2,3,4 und über COM nicht? Sourcecode?
was macht das Display wenn du Locate 2,35 ; print " Hallo Welt, ich hab kein Geld" auf das Display kommt. Vielleicht hast du 2x80 Display auf vier Zeilen
Du speichst den String mit grösse 20 und gibst das mit Locate aus.
Wenns mehr Zeichen sind muss du das Aufteilen.
das mit dem Überschreiben der Zeilen hab ich noch nicht ausprobiert. Ist aber mal eine gute Idee, werd ich gleich heute abend mal machen. In meinem Code hab ich als Display das 20 * 4 , Chipset077 Eingetragen. Für KS0066 oder SPLC780 hab ich überhaupt noch nichts gefunden. Bei meinem Projekt handelt es sich immer noch um das VMUSIC2 Modul. Die Ausgabe der Musiktitel auf das Display. Bin schon einen ganz guten Schritt weitergekommen aber jetzt muss ich erst, bevor ich mir ein neues Display kaufe, wissen ob es am Display liegt oder an der Ausgabe des AVR's. Was die Display's anbelangt, hast Du da eventuell einen Tip für mich, wo es günstig (günstig ist relativ) 20 * 4er Display's zu Kaufen gibt? HD44780 kompatible natürlich!
Gruß
Klaus
PS: Wenn ich den Test gemacht habe, sag ich Bescheid!
hab den Test gemacht und das Ergebnis sieht genauso aus, wie vorher beschrieben (Zeile1 und dann Zeile 3). Hab den 'Chipset077' rausgenommen, keine Änderung.
Werd mich wohl mal auf die Suche nach einem anderen Display machen, bei dem ich sicher bin, dass es auch wirklich HD44780 kompatibel ist. Schade eigentlich, war recht günstig. Hab auch gleich zwei Stück Gekauft. Mhmmmm
Auf meinem Display fährt der Zug auf Zeile1 und Zeile3!
Ich hab jetzt nochmal den Test gemacht und ein Bild vom Display.
Hier der Code:
[code]
$crystal = 16000000
' Verwendete CPU festlegen (ATmega8)
$regfile = "m8def.dat"
' alle Pin's an Port D als Ausgang festlegen
Ddrd = &HFF
' Pin's definieren an denen das LCD angeschlossen ist
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5 , E = Portb.1 , Rs = Portb.2
' Art des LCD Display's festlegen
Config Lcd = 20 * 4
' LCD Display initialisieren
Cls
' Text auf LCD ausgaben
Locate 2 , 35
Lcd "Hallo Welt, ich hab kein Geld"
' Hauptprogrammschleife (macht erstmal nichts)
Do
' warten 1 mikro Sekunde (einfach nur damit was in der Schleife steht
Waitus 1
' weiter bei Do
Loop
End
Irgendwie eigenartig diese Aufteilung.
Gruß
Klaus
Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2010 15:49 von Veryoldman.