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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.