Forum: Compiler & IDEs avr-gcc Tutorial LCD Ansteuerung


von Pascal (Gast)


Lesenswert?

Hallo,

ich habe gemäß des avr-gcc Tutorials ein 2x16 LCD von Reichelt (KS0070B) 
mit einem ATmega8 angesteuert. Das geht soweit auch erstmal.
Schreibe ich nun allerdings mit lcd_data('x'); mehrere Zeichen und komme 
an Stelle 16, dann bekomme ich keine oder eine ganz fehlerhafte Ausgabe. 
Lasse ich das letzte Zeichen aus und gehe dann mit set_cursor(0,2); in 
Zeile 2, dann kann ich auch bis einschließlich Zeichen 15 schreiben, das 
16. verursacht auch diesen Fehler. Woran liegt das? Wie kann ich das 
vermeiden?

Der Codeschnipsel:

  lcd_init();
  set_cursor(0,1);
  lcd_data('1'); // 1
  lcd_data('2'); // 2
  lcd_data('3'); // 3
  lcd_data('4'); // 4
  lcd_data('5'); // 5
  lcd_data('6'); // 6
  lcd_data('7'); // 7
  lcd_data('8'); // 8
  lcd_data('9'); // 9
  lcd_data('0'); // 10
  lcd_data('A'); // 11
  lcd_data('B'); // 12
  lcd_data('C'); // 13
  lcd_data('D'); // 14
  lcd_data('E'); // 15
  lcd_data('F'); // 16   lasse ich diese Stelle weg, gehts
  set_cursor(0,2);
  lcd_data('1'); // 1
  lcd_data('2'); // 2
  lcd_data('3'); // 3
  lcd_data('4'); // 4
  lcd_data('5'); // 5
  lcd_data('6'); // 6
  lcd_data('7'); // 7
  lcd_data('8'); // 8
  lcd_data('9'); // 9
  lcd_data('0'); // 10
  lcd_data('A'); // 11
  lcd_data('B'); // 12
  lcd_data('C'); // 13
  lcd_data('D'); // 14
  lcd_data('E'); // 15
  lcd_data('F'); // 16 lasse ich diese Stelle weg, gehts


Danke für Eure Hilfe!
Grüße Pascal

von Andreas Paulin (Gast)


Lesenswert?

Kann es sein dass das

_delay_us(42)

bei Dir nicht richtig geht? Ich hatte grad eben erst sowas mit 
Compileroption
-o0. Mit -o1 funzt das _delay_us() korrekt.

von Pascal (Gast)


Lesenswert?

Ja, stimmt. Es liegt wirklich an _delay_us(42). Mit -O1 funktioniert es 
einwandfrei. Leider wird so mein Code eine ganze Ecke größer...
Weiß jemand ob man irgendwie noch das Problem in den Griff bekommen 
kann?

Zwischenzeitlich hatte ich auch mal die lcdlibrary von P. Fleury 
getestet, leider kann ich trotz Anpassungen in der .h dem Display kein 
Zeichen entlocken. Es stehen in der oberen (1.) Zeile nur schwarze 
Quadrate. Das Hardware-Setup ist dasselbe.
Habe auch im Forum schon alle Beiträge durchgelesen, leider ohne Erfolg. 
Die lcdlibrary würde ich gerne nehmen, nur weiß ich nicht wie ich die 
mit dem KS0070B zum Laufen bekommen soll...

Grüße Pascal

von Pascal (Gast)


Lesenswert?

Nochmal Hallo!

Also ich habe irgendwie Probleme mit dem Timing oder so...

Ich habe mal eine ganze Zeit eine perfekte Anzeige, dann wieder zeigt 
das LCD mir nur Wirr-Warr. Wie kann ich den Fehler eingrenzen und 
beseitigen?

Grüße Pascal

von Karl H. (kbuchegg)


Lesenswert?

Pascal wrote:
> Ja, stimmt. Es liegt wirklich an _delay_us(42). Mit -O1 funktioniert es
> einwandfrei. Leider wird so mein Code eine ganze Ecke größer...
> Weiß jemand ob man irgendwie noch das Problem in den Griff bekommen
> kann?

Denn geh mal auf die Compileroption -Os oder -O3

> Zwischenzeitlich hatte ich auch mal die lcdlibrary von P. Fleury
> getestet, leider kann ich trotz Anpassungen in der .h dem Display kein
> Zeichen entlocken. Es stehen in der oberen (1.) Zeile nur schwarze
> Quadrate. Das Hardware-Setup ist dasselbe.
> Habe auch im Forum schon alle Beiträge durchgelesen, leider ohne Erfolg.
> Die lcdlibrary würde ich gerne nehmen, nur weiß ich nicht wie ich die
> mit dem KS0070B zum Laufen bekommen soll...

Das klingt alles nach Timingproblemen.
Such mal alle Warteschleifen, die damit im Zusammenhang stehen,
und mach die Konstanten etwas größer.

Aber Achtung: Wenn die _delay_xx Funktionen benutzt werden,
dann muss (!) der Optimizer des Compilers eingeschaltet sein,
ansonsten stimmt das Timing überhaupt nicht.

von bombastix (Gast)


Lesenswert?

..und er gibt doch auch eine Warnung in dieser Richtung aus oder(hab 
grad keinen zur Hand, hatte das aber schon mal)?

von Christian A. (angst)


Lesenswert?

Hallo
bin noch ein Anfänger und möchte gern wissen, wie man den Inhalt von 
Variablen auf dem LCD ausgibt und ob es möglich ist ein 4x20 LCD 
anzuschließen ohne große Veränderungen am Source. Benutze den Source aus 
dem avr-gcc Tut.

Schonmal Danke für eure Hilfe!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ein Variablenausgabebeispiel ergänze ich gerade.

Veränderungen in der Source können notwenig sein bei

1/ einem anders anzusteuernden LCD-Controller auf dem Ersatz-LCD. Das 
kann die Initialiserung (Timing, Kommandos) und/oder die 
Kommandosequenzen (CURSOR_HOME...) betreffen. Näheres hierzu im 
Datenblatt des LCD-Controllers

2/ bei anderer Adresslage der einzelnen Zeichen in den Zeilen/Spalten 
(Funktion set_sursor). Näheres hierzu ebenfalls im Datenblatt des 
LCD-Controllers.

von Falk B. (falk)


Lesenswert?

@  Christian A. (angst)

>bin noch ein Anfänger und möchte gern wissen, wie man den Inhalt von
>Variablen auf dem LCD ausgibt

Festkommaarithmetik

> und ob es möglich ist ein 4x20 LCD
>anzuschließen ohne große Veränderungen am Source. Benutze den Source aus
>dem avr-gcc Tut.

Ja.

MFG
Falk

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.