Forum: Compiler & IDEs Atmega32 und LCD Problem


von Johannes B. (aprendiz)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein kleines Problem mit der Ansteuerung meines 2 x 16 LCD 
Displays, welches ich euch hier nun mal genauer dalegen möchte.

Ich verwende einen Atmega32 16PU in verbindung mit dem Atmel 
Evaluations-Board V2.0.1 und einem STK500.
Das LCD-Modul ist das "TC1602A-09" von pollin.
Als Programm nutze ich AtmelStudio 6.

Ich habe das Display nun korrekt angeschlossen (PORTD wie in der 
lcd-routines.h schon angegeben) und nutze ein 5V Netzteil für die 
externe Stromversorgung des Displays.

Für das Programm verwende ich die LCD Routinen von dieser Seite.
AVR-GCC-Tutorial/LCD-Ansteuerung
Als Beispielprgramm nutze ich auch das von dieser Seite.

Wenn ich nun das Programm übertrage ist dies immer erfolgreich, keine 
Fehlermeldungen. Auf dem Display verändert sich nichts. Die obere Reihe 
mit den Blöcken verändert sich nicht, was ja bedeutet das die 
Initialisierung des Display schon fehlgeschlagen ist.

Jetzt stellt sich mir die Frage wo der Fehler sein könnte, leider komme 
ich da auf keinen grünen Zweig. Vielleicht kennt ja einer von euch das 
Problem.

Anbei noch ein Screenshot von AtmelStudio.
Und ein Link zum Datenblatt vom LCD
http://www.adafruit.com/datasheets/TC1602A-01T.pdf

Gruß

: Verschoben durch User
von Dietrich L. (dietrichl)


Lesenswert?

Hast Du bei "#define F_CPU" die richtige Taktfrequenz des µC angegeben?

Gruß Dietrich

von Karl H. (kbuchegg)


Lesenswert?

Johannes Berger schrieb:

> Ich habe das Display nun korrekt angeschlossen (PORTD wie in der
> lcd-routines.h schon angegeben)

Also so?
1
//  LCD DB4-DB7 <-->  PORTD Bit PD0-PD3
2
#define LCD_PORT      PORTD
3
#define LCD_DDR       DDRD
4
#define LCD_DB        PD0
5
 
6
//  LCD RS      <-->  PORTD Bit PD4     (RS: 1=Data, 0=Command)
7
#define LCD_RS        PD4
8
 
9
//  LCD EN      <-->  PORTD Bit PD5     (EN: 1-Impuls für Daten)
10
#define LCD_EN        PD5

Bedenke: Wir können das alles nicht kontrollieren. Eine fehlerhafte 
Verbindung und nichts funktioniert.
Und ja: wir hatten schon Fälle hier, in denen steif und fest behauptet 
wurde, das würde alles stimmen und auf dem ersten Photo sah man dann, 
dass er Leitungen vertauscht hatte.
D.h. DU musst 100% sicher sein, dass diese 6 Verbindungen korrekt 
hergestellt wurden, es keinen Kurzschluss zwischen den Leitungen gibt 
und auch keine schlechte elektrische Verbindung dabei ist.

Das andere was auch immer wieder mal Probleme macht, eigentlich ist das 
das Hauptproblem, sind für das LCD unpassende Timings.
1
 
2
////////////////////////////////////////////////////////////////////////////////
3
// LCD Ausführungszeiten (MS=Millisekunden, US=Mikrosekunden)
4
 
5
#define LCD_BOOTUP_MS           15
6
#define LCD_ENABLE_US           20
7
#define LCD_WRITEDATA_US        46
8
#define LCD_COMMAND_US          42
9
 
10
#define LCD_SOFT_RESET_MS1      5
11
#define LCD_SOFT_RESET_MS2      1
12
#define LCD_SOFT_RESET_MS3      1
13
#define LCD_SET_4BITMODE_MS     5
14
 
15
#define LCD_CLEAR_DISPLAY_MS    2
16
#define LCD_CURSOR_HOME_MS      2

BOOTUP_MS scheint einer der kritischeren zu sein. Geh da mal von 15ms 
auf 50ms hoch.
Die restlichen sind meistens nicht ganz so kritisch. Aber einige LCD 
brauchen etwas länger nach dem Anlegen der Spannungsversorgung, bis sie 
dann erstmalig auf Kommandos reagieren.

Hier
1
#ifndef F_CPU
2
#define F_CPU 3686400
3
#endif
hast du den korrekten Wert eingetragen?

: Bearbeitet durch User
von Ingo (Gast)


Lesenswert?

Es scheint als sei der LCD Controller nich HD44780 kompatibel oder?

von Johannes B. (aprendiz)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Hier#ifndef F_CPU
> #define F_CPU 3686400
> #endif
> hast du den korrekten Wert eingetragen?

ja ich habe den Wert auf 1000000 geändert. Habe vorher auch die Frequenz 
des uC ausgelesen.

Das it dem BOOTUP_MS probiere ich mal aus.

gruß

von Johannes B. (aprendiz)


Lesenswert?

dei Veränderung des Wertes hat nichts ergeben.

Und die Änschlusse sind auch richtig( hab ich jetzt zum 3. mal gecheckt)

von Karl H. (kbuchegg)


Lesenswert?

JP1 und JP2 sind nicht gejumpert?

(das sind die UART Pins. Wenn du die Jumper drinn hast, hängt der MAX232 
an den LCD Datenleitungen und pfriemelt da rein)

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:
> JP1 und JP2 sind nicht gejumpert?
>
> (das sind die UART Pins. Wenn du die Jumper drinn hast, hängt der MAX232
> an den LCD Datenleitungen und pfriemelt da rein)

Selbiges für die restlichen Jumper JP1 bis JP8. Müssen alle raus.

: Bearbeitet durch User
von Dietrich L. (dietrichl)


Lesenswert?

Johannes Berger schrieb:
> Ich habe das Display nun korrekt angeschlossen

Hast Du auch ein Poti als Kontrastregler angeschlossen und mal daran 
gedreht?

Gruß Dietrich

von Johannes B. (aprendiz)


Lesenswert?

Dietrich L. schrieb:
> Hast Du auch ein Poti als Kontrastregler angeschlossen und mal daran
> gedreht?
>
> Gruß Dietrich

Ja habe ich.

Und ich habe es auch geschafft, dank eurer Hilfe und ein wenig 
rumprobieren ;). Die Jumper JP1 -JP8 habe ich entfernt. Dannach ging es 
zwar noch nicht aber durch eine erhöhung des ISP Clockspeed hat es dann 
funktioniert.

Vielen Dank also.

Einziges Problem ist jetzt noch das in der 2. Zeile das 7 Zeichen immer 
eine x belibige Zahl ist. Nach jeder Übertragung ändert sich diese.
Eine Fehlfunktion des Displays?

Gruß

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.