PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Display zeigt (ab und zu) nur auf zwei Zeilen an ?!



Skragan
08.12.2008, 08:59
Hallo Leute,

an meiner Schaltung hängt ein 20*4 LCD, dieses wird von einem ATmega128 gesteuert. Um das Display schnell zu befeuern, nutze ich seit kurzem die LCD4BUSY.lib. Nach dem Umbau der Displayleitungen (vorher nicht optimal verdrahtet) zeigt das Display ab und zu nur auf der ersten und dritten Zeile an, so als wenn der Inhalt der Zeilen 2 und 4 mit auf die anderen beiden Zeilen gepackt wird. Beim nächsten Einschalten ist dann wieder alles normal.

Wenn der Fehler auftritt, dann direkt beim Einschalten.

Die Leitungslänge ist ca. 6cm, aber ich glaube auch nicht, daß es daran liegt, weil ja die richtigen Inhalte angezeigt werden. Lediglich zwei Zeilen sind dann und wann aus. Hat jemand eine Idee zu dem Thema ? Würde mich sehr freuen !

/Edit/

Nun ja, so ganz stimmt das nicht, in den Datenleitungen sind noch Angstwiderstände drin gewesen, die helfen natürlich gegen die Umladung der Leitungskapazität. Die werde ich ersteinmal verkleinern.

Gruß,

Alex



$lib "lcd4busy.lib"

Const _lcdport = Portc

Const _lcdddr = Ddrc

Const _lcdin = Pinc

Const _lcd_e = 1

Const _lcd_rw = 2

Const _lcd_rs = 3

Config Lcd = 20 * 4 'LCD Typ

T.J.
08.12.2008, 09:06
Es klingt sehr stark danach, als würde der Controller zwischendurch die Einstellung im Display wieder auf 2 Zeilen initialisieren!? Denn dann werden ja genau diese angezeigt, oder?

Vielleicht ein Fehler in der LIB/Firmware, wenn die Leitungen und der Inhalt sonst ok sind.

Skragan
08.12.2008, 09:55
Ich habe jetzt die Angstwiderstände entfernt, aber der Fehler tritt immernoch auf.

Er macht das aber nicht zwischendurch, sondern sofort. Das heißt, nach dem Einschalten geht es entweder richtig oder der Fehler tritt auf und bleibt.

T.J.
08.12.2008, 10:08
Dann Probleme beim Init direkt? Dass er es mal macht und mal nicht...

Skragan
08.12.2008, 10:43
Das schaue ich mir gerade an. Offenbar steigt die Betriebsspannung nicht sauber an, auf dem Board initialisieren schließlich 4 Controller und das Display... ich baue gerade ein paar ruhige Sekunden ein und versuche, das Problem einzukreisen.

Skragan
08.12.2008, 11:14
Das wars nicht. Ich habe nun eine andere Variante ausprobiert und siehe da: der Fehler wird reproduzierbar, zumindest ohne an- und ausschalten der Hardware. Ich habe auf eine Taste den Befehl INITLCD gelegt - sobald also diese Taste gedrückt wird, initialisiert der M128 das Display neu. Und wenn man das macht, erhält man mal das Ergebnis, daß das Display richtig und mal falsch initialisiert wird.

Offenbar ist also ein Fehler in der Bibliothek LCD4BUSY.lib oder aber er kommt mit der Geschwindigkeit nicht zurecht.

Nu bin ich mit meinem Latein am Ende. Was tu ich nun ?

Skragan
08.12.2008, 11:17
Aha- in der Library sind verschiedene Warteschleifen, welche mit 4MHz programmiert wurden - ich betreibe das Board aber mit 16, d.h. die Schleifen müssen länger. Wie kann ich nun die library ändern ?

Z.B. hier:


;This routine is called when the LCD must be initialized
[_init_lcd]
_init_lcd:
clr R24 ; set all portpins low
* Out _lcdport , R24
ser r24 ; set port pins to output
* Out _lcdddr , R24
Ldi R30, 28
Ldi R31, 78
Rcall _lcd_delay ; 20 ms delay at 4 MHz

T.J.
08.12.2008, 11:38
kann man für die Lib die Frequenz etwa nicht angeben?

Skragan
08.12.2008, 12:08
In der Beschreibung steht davon nichts - leider.

Skragan
08.12.2008, 12:33
Fehler behoben. Ich habe die Lib nochmal bearbeitet und einfach die Zeitschleife verlängert, nu klappts offenbar. Ich konnte den Fehler nicht mehr provozieren.

Danke für die Anregungen !