www.mikrocontroller.net

Forum: Compiler & IDEs avr-gcc Tutorial LCD Ansteuerung


Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: bombastix (Gast)
Datum:

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

Autor: Christian A. (angst)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.