Na ja, eigentlich stoert's nicht, es ist bloß so, dass der da ganz schoen lange brauch um so ein String aufs Display zu bringen. Ich probier's mal mit der Schleife aus, werde die aber 16 mal durchlaufen, weil ich einen 16MHz Quarz hab.
Hallo tml,
Es freut mich, daß es bei Dir geklappt hat,
In Fremden Codes zu lesen ist wirklich schwer,
aber mach die sei's und cli's auch weg die gehören da nicht hin!
Ich hab bei mir eine leere Schleife, die 10 mal durchlaufen wird um Enable zu aktivieren,
also 10 mal brne macht 20 Takte plus dec 1 takt, naja so etwa 30 Takte Warten,bevor Enable wieder Low geht, und das bei 10 Mhz Quarz, es klappt.
Solange das nicht stört daß er immer 5ms wartet ist es auch gut oder ?
Gruß Sebastian
Na ja, eigentlich stoert's nicht, es ist bloß so, dass der da ganz schoen lange brauch um so ein String aufs Display zu bringen. Ich probier's mal mit der Schleife aus, werde die aber 16 mal durchlaufen, weil ich einen 16MHz Quarz hab.
Das funktioniert nicht! Leider. Da passiert folgendes: Die 2. Zeile verschwindet ganz und der Kontrast der ersten Zeile wird dafuer ungewoehnlich hoch, außerdem werden nur die letzten 2 Zeichen angezeigt, die ersten 14 fehlen, werden allerdings kurz sichtbar.
Ich hab "enable" so geaendert:
Ob die vier nop's dabei sind oder nicht aendert nicht's.Code:enable: push temp ldi temp, 16 sbi PortC, E ;Enable-Pin -> H enablea: dec temp nop nop nop nop brne enablea cbi PortC, E ;Enable-Pin -> L pop temp ret
Und Du bist Dir sicher, daß Deine Hardware 100% in Ordnung istDie 2. Zeile verschwindet ganz und der Kontrast der ersten Zeile wird dafuer ungewoehnlich hoch![]()
das mit dem Kontrast kann man doch im Programm nicht verändern![]()
echt komisch
Gruß Sebastian
Ich kann mir natuerlich nicht sicher sein, dass die Hardware 100% in Ordnug ist. So viel gibt's da allerdings ja auch nicht zu beschalten. Ich habe die ersten vier Datenleitungen des LCD's auf GND gelegt (wegen 4bit Modus) und die anderen an Pin0-3 von PortC angeschlossen (ohne extra Pull-Up) die 3 Steuerleitungen, also RW, RS und E, haengen dann an Pin4-6 und Pin7 ist freigelassen. Diesen Kontrasteinstellpin vom Display hab ich ueber den Mittelanschluss eines 10K-Trimmers angeschlossen. Der Trimmer sitzt zwischen Vcc und GND. Sonst ist nichts weiter am LCD. Kann's daran liegen, dass ich keine Kondensatoren eingebaut hab, also diese Abblockkondensatoren? Aber das werde ich sowieso noch aendern. Kann es eigentlich sein, dass die Geschwindigkeit des Display von der Betriebsspannung abhaengt? Die betraegt naemlich nur 4,90V. Aber das sollte doch nicht der Grund sein, oder?
Ne, Du
so wie Du das beschrieben hast ist schon alles O.K.
nur der R/W..., liest Du irgendwo im Programm was vom LCD?
Habe nicht genau hingeguckt, aber ich glaube eher nicht.
Dann kannst Du ihm auch auf LOW legen, womit Du Dir ein Pin sparst.
Schlecht ist das nicht. mache ich auch so, aber es muß nicht sein, habe ich mir hier in Forum sagen lassen, Das Display hat interne Pulldowns, oder waren das PullupsIch habe die ersten vier Datenleitungen des LCD's auf GND gelegt (wegen 4bit Modus)![]()
Und die Spannung dürfte auch nicht die große Rolle spielen, mein Netzteil ist leider was schwach auf der Brust, und bei etwa 0,5 A Stromstärke bricht die Spannung soweit zusammen, daß ich noch kaum was auf dem Display lesen kann, gemessen habe ich sie noch nicht, aber das Display verhält sich ganz normal (bis auf die Helligkeit natürlich)
Gruß Sebastian
Ne, die Geschwindogkeit haengt nicht von der Spannung hab. Wohl er von der eingestellen Baud Rate.
Baud Rate bei LCD ?Wohl er von der eingestellen Baud Rate![]()
Hi,
ich beschäftige mich auch gerade seit ein paar Tagen mit Displays, und bei klappt es mit dem Enable fast ohne Wartezeit. Angeschlossen, wie oben beschrieben, ausser: die nicht benötigten Datenleitungen hab ich einfach freigelassen. Den Programmteil habe ich so gefunden.
; Gib Nibble in LCDchar an LCD aus
;
Lcd4Set:
out pLcdPort,LCDchar ; Byte auf Ausgabeport
nop
sbi pLcdPort,0 ; Setze Enable-Bit 0
nop
nop ; bei 10Mhz
nop ; bei 4 Mhz nur 2 Nop s
nop
nop
cbi pLcdPort,0 ; Enable Bit 0 löschen
nop
ret
Nach jeder Zeichenausgabe 5ms warten, wenn BusyFlag nicht ausgelesen wird.
Ich habe schon mehrere Displays ( 2 und 4 Zeilen) probiert, alle haben einwandfrei funktioniert. (hatte mal nen Display-Kaufrausch)
Auslese tue ich wirklich nichts vom Display, ich wollte nur urspruenglich das Busy-Flag auslesen, hab das nur nicht hingekriegt. Wahrscheinlich muss das eingebaut Pulldowns haben, weil man D0-3 sonst nicht auf GND klemmen duerfte. Na ja, dann werde ich's erstmal bei den 5ms belassen und spaeter mal sehen.
Lesezeichen