LCD 4x20 LCDtools.c etwas zu langsam warum

OP #2372452
Lesenswert?

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.
Angehängte Dateien:
#2372634
Lesenswert?

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.
OP #2372861
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren