Forum: Mikrocontroller und Digitale Elektronik AVR HD44780 Fragen - Display - Fragen - C


von J. W. (ontheway)


Lesenswert?

Hi Experten,

ich habe heute den halben Feiertag damit verbracht, dass ich ein 
Mini-Projekt umgesetzt habe.

Ich habe auf einem Steckboard einen HD44780 dran. Funktioniert. Über 
einen Atmega 32 steuer ich den an. Das Experiment war: Ich nehme einen 
Text, den zerteile ich in die beiden Zeilen dieses Displays. Gefunden 
habe ich einen Bibeltext, Auszug:

"Gen 1:8 Und Gott nannte die Feste Himmel. Da ward aus Abend und Morgen 
der andere Tag."

Nun habe ich den Atmega seriell über Python angesteuert, sprich, ich 
habe den Text zerlegt auf 1. Zeile: "Gen 1:8", 2. Zeile: "Und Gott"... 
(16 Zeichen erstmal)

Der Weg dahin war kantig, es funktioniert soweit, aber:

1) Ist es korrekt, das es laut Datenblatt verschiedene Zeichensatz-ROMs 
gibt, aber man nicht umschalten kann, also: Ich habe keine deutschen 
Umlaute

2) Der ober Brainer war, das ich versucht habe, über ASCII über 128 (ich 
hatte mir da zwei ausgesucht, 193 und 194), Kommandos zu setzen, sprich: 
Display löschen und Cursor auf Zeile 1, Cursor auf Zeile 2. Ging nicht! 
Ich hatte es binär versucht, zB 1100010. Ging nicht! Beim Debugging bin 
ich echt sauer geworden, habe dann stattdessen einfach "$" und "#" 
genommen, und dann ging es... das empfinde ich als extrem unlogisch, 
oder sehe ich was falsch?

3) Die Geschwindigkeit. Ich habe vorhin die Baud-Rate auf 19200 erhöht. 
Ich kann dem Display zuschauen, wie es die Buchstaben aufbaut. Die 
erscheinen ganz lasch von links, das dauert pro Zyklus locker eine oder 
eine halbe Sekunde. Kennt ihr sowas?

Merci für Komentare,

Jens

von Spess53 (Gast)


Lesenswert?

Hi

>1) Ist es korrekt, das es laut Datenblatt verschiedene Zeichensatz-ROMs
>gibt, aber man nicht umschalten kann,

Ja.

>also: Ich habe keine deutschen Umlaute

Beim allg. üblichen Zeichensatz gibt es die deutschen Umlaute. 
Allerdings haben die dort einen anderen Code als beim PC.

>2) Der ober Brainer war, das ich versucht habe, über ASCII über 128 (ich >...
>oder sehe ich was falsch?

Verstehe nicht was du da gemacht hast.

>3) Die Geschwindigkeit. Ich habe vorhin die Baud-Rate auf 19200 erhöht.
>Ich kann dem Display zuschauen, wie es die Buchstaben aufbaut. Die
>erscheinen ganz lasch von links, das dauert pro Zyklus locker eine oder
>eine halbe Sekunde. Kennt ihr sowas?

Nur bei schlechter Software.

MfG Spess

von J. W. (ontheway)


Angehängte Dateien:

Lesenswert?

Hi Spess,

>>also: Ich habe keine deutschen Umlaute
>
> Beim allg. üblichen Zeichensatz gibt es die deutschen Umlaute.
> Allerdings haben die dort einen anderen Code als beim PC.

Verstehe ich nicht. Im Rom A00 sehe ich zb kein "Ä". Nur Japan über 128.

>>2) Der ober Brainer war, das ich versucht habe, über ASCII über 128 (ich >...
>>oder sehe ich was falsch?
>
> Verstehe nicht was du da gemacht hast.

Naja, japanische Zeichen kommen in der Bibel nicht vor. Also,
siehe Python-Code, ich hatte z.B.

ser.write(0b11000010) #reset auf position oben mit clear

versucht. Keine Chance. Im C-Code, siehe Anhang, dann zum Beispiel, 
logischerweise:

SR(USART_RXC_vect){

  value = UDR;             //read UART register into value
  if (value == '#') { // hier nun versagte value = 0b11000010
    lcd_setcursor( 0, 1 );
    lcd_clear();
    zeilennummer = 1;
    return;
  }

     if (value == '$') {
  //if (0) {
       lcd_setcursor( 0, 2 );
    zeilennummer = 2;
       //return;
     }
  if (zeilennummer == 1) {
    if (value != '#') {
      lcd_data(value);
    }
  }
  if (zeilennummer == 2) {
    if (value != '$')
    {
      lcd_data(value);
    }

  }


}


Kleiner Kommentar: Natürlich sind die beiden if unten schöner schreibbar 
etc. und so, aber darauf kommt es nicht an. Besonders krass fand ich, 
dass das Modul ser einen Unterschied zwischen "$" und '$' macht, zur 
Warnung! "$" ging NICHT durch als solches! Oder habe ich da Python 
falsch verstanden? Für mich ist das dasselbe.

>>3) Die Geschwindigkeit. Ich habe vorhin die Baud-Rate auf 19200 erhöht.
>>Ich kann dem Display zuschauen, wie es die Buchstaben aufbaut. Die
>>erscheinen ganz lasch von links, das dauert pro Zyklus locker eine oder
>>eine halbe Sekunde. Kennt ihr sowas?
>
> Nur bei schlechter Software.

Mag sein, ich sehe aber keinen Fehler. C-Code ist angehangen.

Danke für Probelesen!

LG
Jens

von J. W. (ontheway)


Lesenswert?

. Die
>>erscheinen ganz lasch von links, das dauert pro Zyklus locker eine oder
>>eine halbe Sekunde. Kennt ihr sowas?
>
Spess, präziser, ich meine den Aufbau des Displays, natürlich nicht pro 
Buchstabe.

von c-hater (Gast)


Lesenswert?

J. W. schrieb:

> ich meine den Aufbau des Displays, natürlich nicht pro
> Buchstabe.

Ist trotzdem wahnsinnig langsam.

Um ein 2x20 komplett zu füllen, sind genau 42 HD44780-Kommandos nötig, 
die allesamt maximal 47µs dauern. D.h.: bei optimaler Programmierung ist 
das komplette Display spätestens nach knapp 2ms mit einem neuen Inhalt 
befüllt.

Der Engpaß ist also eher die serielle Übertragung, denn um 40 Zeichen 
mit 8N1 bei 115.2kbps zu übertragen, braucht's rund 3.5ms.

Ergo: Jedes Programm, was wesentlich länger als 3.5ms benötigt, um 40 
Zeichen per RS232 zu empfangen und auf zwei Displayzeilen zu verteilen, 
ist nur eins: unterirdisch schlecht.

Voraussetzung ist natürlich, daß der Takt hoch genug ist, um den 
Durchsatz zu bewältigen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

J. W. schrieb:
> Verstehe ich nicht. Im Rom A00 sehe ich zb kein "Ä". Nur Japan über 128.

Das ist korrekt. Um auf einem A00 ROM deutsche Umlaute (oder andere 
beliebige Zeichen) zu bekommen, musst du die frei definierbaren benutzen 
(char 0x00 bis 0x07). Nur der ROM A02 besitzt fertige Umlaute für 
Europa. Ab Seite 17 des Hitachi Datenblattes sind die Tabellen. Bei ROMs 
mit der Bxx Kennung kann alles drin sein - das sind kundenspezifische 
ROMs.

von Karl H. (kbuchegg)


Lesenswert?

J. W. schrieb:
> . Die
>>>erscheinen ganz lasch von links, das dauert pro Zyklus locker eine oder
>>>eine halbe Sekunde. Kennt ihr sowas?
>>
> Spess, präziser, ich meine den Aufbau des Displays, natürlich nicht pro
> Buchstabe.


Ich brauch mit nur dein Python Programm ansehen um zu sehen, warum das 
alles grotten-langsam ist. Zähl halt mal deine ganzen sleep da drinnen 
zusammen, wieviel Zeit du da drinnen verbrutzelst.

von J. W. (ontheway)


Lesenswert?

Karl Heinz Buchegger schrieb:
> J. W. schrieb:
>> . Die
>>>>erscheinen ganz lasch von links, das dauert pro Zyklus locker eine oder
>>>>eine halbe Sekunde. Kennt ihr sowas?
>>>
>> Spess, präziser, ich meine den Aufbau des Displays, natürlich nicht pro
>> Buchstabe.
>
>
> Ich brauch mit nur dein Python Programm ansehen um zu sehen, warum das
> alles grotten-langsam ist. Zähl halt mal deine ganzen sleep da drinnen
> zusammen, wieviel Zeit du da drinnen verbrutzelst.

Ach so? Dir ist schon bewusst, das ein # ein Kommentarzeichen ist?
Der Aufbau des Displays dauert lange, also der Zeile oben und unten, 
eine Verzögerung bei einer neuen Zeile hat damit nur wirklich nichts zu 
tun.

LG,
Jens

von J. W. (ontheway)


Lesenswert?

>
> Ergo: Jedes Programm, was wesentlich länger als 3.5ms benötigt, um 40
> Zeichen per RS232 zu empfangen und auf zwei Displayzeilen zu verteilen,
> ist nur eins: unterirdisch schlecht.
>
> Voraussetzung ist natürlich, daß der Takt hoch genug ist, um den
> Durchsatz zu bewältigen.

Da bin ich doch neugierig, was an dem Python-Skript so schlecht ist? Ich 
arbeite mit 19200 Baud, das sollte ja wohl reichen? Dazu habe ich einen 
Baud-Quarz mit 7,3... MHz, das sollte es ja wohl kaum sein.
Der Code ist absolut trivial und sollte es wohl kaum sein, es sei denn, 
Du kannst mir darin einen Fehler zeigen!?

LG,
Jens

von Jobst M. (jobstens-de)


Lesenswert?

J. W. schrieb:
> Da bin ich doch neugierig, was an dem Python-Skript so schlecht ist? Ich
> arbeite mit 19200 Baud, das sollte ja wohl reichen? Dazu habe ich einen
> Baud-Quarz mit 7,3... MHz, das sollte es ja wohl kaum sein.
> Der Code ist absolut trivial und sollte es wohl kaum sein, es sei denn,
> Du kannst mir darin einen Fehler zeigen!?

Nein, natürlich liegt es nicht an Deiner Software. Es ist völlig normal, 
dass das Display so langsam beschrieben wird. Es kann ja kaum sein, dass 
es bei anderen schneller läuft.


Gruß

Jobst

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
Noch kein Account? Hier anmelden.