Hallo zusammen, die Texte auf dem Display erscheinen zu langsam. Ich kann mit dem Auge noch erkennen, dass Textzeile für Textzeile erscheint. Die Delayroutine arbeitet in der LCDtools datei richtig. Habe zur Kontrolle eine while(1) Schleife mit delay toggeln über _DElay(0.5) 0.5ms eingebaut und das Oszi mißt auch 0.5ms. Von daher arbeitet delay. Habt ihr noch eine Idee warum es so langsam sein könnte? Viele Grüße, Matthias.
Du kannst die delay verkürzen, ist nur auszutesten ab wann es nicht mehr funktioniert. Die optimalere Lösung ist R/W benutzen mit Busy Abfrage.
Matthias H. schrieb: > Hallo zusammen, > > die Texte auf dem Display erscheinen zu langsam. Ich kann mit dem Auge > noch erkennen, dass Textzeile für Textzeile erscheint. Löscht du vorher das Display? Dann ist klar, dass du das erkennen wirst, weil das LCD träge ist. Clear Screen nur dann verwenden, wenn sich der komplette AUfbau der Ausgabe ändert. Ansonsten mit Überschreiben arbeiten! Dann flimmert auch nichts mehr. > Die Delayroutine arbeitet in der LCDtools datei richtig. Habe zur > Kontrolle eine while(1) Schleife mit delay toggeln über _DElay(0.5) > 0.5ms eingebaut und das Oszi mißt auch 0.5ms. Wo hast du das eingebaut? In der Hauptschleife in main()? Deshalb muss delay_ms in lcd.c noch lange nicht richtig funktionieren. Wo ist bei dir F_CPU definiert? In den Project-Options, so wie es sein soll? > Habt ihr noch eine Idee warum es so langsam sein könnte? kürz mal deine delays in der lcd_falsh_e radikal zusammen. Du wartest du fast 1 Millisekunde ehe du den Enable Puls beginnst und dann wieder, bis du ihn zurück nimmst. Das braucht das LCD gar nicht. Das bischen Verzögerung, das durch die Programmausführung automatisch entsteht, reicht meistens schon aus. Den ersten __delay_ms kannst du meistens überhaupt weglassen und den zweiten kannst du probehalber auch mal weglassen. Wenn sich rausstellt, dass zwischen Setzen und Löschen des E-Pins eine kleine Verzögerung notwendig ist, dann reden wir da über 3 bis 4 Prozessortakte! Das sind ein paar µs, aber nichts im Bereich von Millisekunden.
Matthias H. schrieb: > Habt ihr noch eine Idee warum es so langsam sein könnte? Das HD44780 Datenblatt mal lesen. Deine Timings entsprechen überhaupt nicht den angegebenen. 1,5ms Enable ist 1500-fach zu lang. 1µs reicht dicke und dann nach jedem Byte noch 50µs warten. Nur einige Kommandos (die man eh nicht braucht) dauern 1,5ms. Peter
Hallo zusammen,
vielen Dank, das ihr mir geholfen habt.
ich habe das Display jetzt deutlich schneller einstellen können.
void lcd_flash_e(void)
{
LCD_Port = LCD_Port| ( 1<<5 ) ; // Enable = HIGH
_delay_ms(0.015); // kurz warten, damit Flanke
entsteht
LCD_Port= LCD_Port& ~( 1<<5 ) ; // Enable = LOW
_delay_ms(0.01); // Warten, bis der durch Enable
angelegte Befehl hoffentlich verarbeitet wurde
}
15us oben und
10 us unten Wartezeit waren nötig.
gehe ich bei einem schon eine us tiefer geht es nicht mehr.
> Löscht du vorher das Display?
nein, das mahce ich nicht, aber danke für den Tipp.
> Dann ist klar, dass du das erkennen wirst, weil das LCD träge ist.
> Clear Screen nur dann verwenden, wenn sich der komplette AUfbau der
> Ausgabe ändert. Ansonsten mit Überschreiben arbeiten! Dann flimmert auch
> nichts mehr.
>
> Wo hast du das eingebaut? In der Hauptschleife in main()? Deshalb muss
> delay_ms in lcd.c noch lange nicht richtig funktionieren. Wo ist bei dir
> F_CPU definiert? In den Project-Options, so wie es sein soll?
ja, unter Project Options
viele Grüße und noch einen schönen Tag wünscht Matthias.
Matthias H. schrieb: > 15us oben und > 10 us unten Wartezeit waren nötig. > gehe ich bei einem schon eine us tiefer geht es nicht mehr. Könnte sein, daß dann eine Rechenungenauigkeit des Macros zuschlägt. Schau mal ins Assemblerlisting. Für kleine Delays ist eigentlich _delay_us() vorgesehen. Peter
Hallo Peter, vielen Dank für Deinen Tipp, wußte ich nicht mit dem _delay_us. Habe ich eingesetzt, jetzt käuft das Display auhc stabiler, vorher initialisierte es nicht bei jedem Start richtig. Viele Grüße, Matthias.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.