Forum: Mikrocontroller und Digitale Elektronik LCD - Probleme


von Mathias (Gast)


Angehängte Dateien:

Lesenswert?

Halllo Zusammen,

ich schlage mich seit einigen Tagen mit LCD Ansteuerung herum.
Jezt bin ich soweit dass der Code ohne Fehler und ohne Warnungen 
kompeliert wird und auf den uC übertragen werden kann.

Leider passiert immer noch nichts am LCD. :-(


Könnte bitte jemand einen Blick auf den Code werfen?

Habe ich eventuell einen Fehler in der lcd-routines.h bei der 
Pinbelegung gemacht?


Ich wäre sehr dankbar dafür.

Meine Hardware:

- AVR Dragon (JTAG)
- Pollin ATmel Evaluationboard
- Pollin ADDON Board
- ATMega16
- AVR-Studio


------------------------------------------------------------------------

Der Code ist folgender: befindet sich im Anhang.

------------------------------------------------------------------------

von Mathias (Gast)


Lesenswert?

Vielen Dank im Vorraus!

von Mathias (Gast)


Lesenswert?

Die lcd-routines.h habe ich auch mal verändert zu (siehe Code) ohne dass 
es irgend etwas gebracht hat.

-----------------------------------------------------



void lcd_data(unsigned char temp1);
void lcd_string(char *data);
void lcd_command(unsigned char temp1);
void lcd_enable(void);
void lcd_init(void);
void lcd_home(void);
void lcd_clear(void);
void set_cursor(uint8_t x, uint8_t y);


#define F_CPU 16000000


#define CLEAR_DISPLAY 0x01
#define CURSOR_HOME   0x02



#define LCD_PORT      PORTA
#define LCD_DDR       DDRA
#define LCD_RS        PB2
#define LCD_EN        PB0

von Matze N. (hupe123)


Lesenswert?

Hi,

welches Display hast du und wie is das verdrahtet?

Ich hatte auch lange probleme und kann evtl. helfen...

gruß
matthias

von Mathias (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das Pollin Adon Board origilan aufgebaut.

Da muss nichts verdrahtet werden so weit ich das verstanden habe.

Ich hände mal das Datenblatt des Addon-Boards an.

Als Display kommt ein TC1602A-08 (hehört zum Addon-Board dazu).

Vielen Dank.

von Mathias (Gast)


Lesenswert?

Alle 11 Jumper sind drin.

von Ingo L. (grobian)


Lesenswert?

Mathias schrieb:


> #define LCD_PORT      PORTA
> #define LCD_DDR       DDRA
> #define LCD_RS        PB2
> #define LCD_EN        PB0

sollte LCD_PORT und LCD_DDR nicht auch auf PORTB / DDRB gesetzt werden ?

von Mathias (Gast)


Lesenswert?

Ich kenke LCD_PORT gibt an welche Ports die Daten (4bit bzw. 8bit) 
übertragen.

Bei Pollin Addonboard sind das die Pins am Port A.

Oder täusche ich mich total?

von holger (Gast)


Lesenswert?

Hast du mal das Testprogramm von Pollin da reingeflasht?
Dann auch mal am Kontrast rumgedreht?

Im Basicprogramm steht folgende Pinbelegung
 #if _chip = 18                                             'Mega16
   Lcd_db4 Alias Portb.2
   Lcd_db5 Alias Portb.3
   Lcd_db6 Alias Portb.4
   Lcd_db7 Alias Portb.5
   Lcd_e Alias Portb.6
   Lcd_rs Alias Portb.7

Also andere Pinbelegung als im Tutorial!

von gadgaet (Gast)


Lesenswert?

Könnte es eventuell auch an der Kontrastspannung liegen?

von Ingo L. (grobian)


Lesenswert?

hier definierst Du aber PORT A sollte dann doch wohl PORT B sein

> #define LCD_PORT      PORTA
> #define LCD_DDR       DDRA

von Mathias (Gast)


Lesenswert?

@Ingo

Ich habe deinen Vorschlag gerade ausprobiert.

Es hat nicht geholfen. :-(

von Mathias (Gast)


Lesenswert?

@gadgaet

Kontrastspannung habe ich beachtet.

von Matze N. (hupe123)


Lesenswert?

hmm,....

zu diesem Display "TC1602A-08" finde ich leider kein vernüftiges 
Datenblatt in dem die Zeiten und die Befehlcodes für z.B. 4-Bus 
angegeben sind.
Ich habe deine Init-Funktion eben mit meiner verglichen und ich habe 
hinter den lcd_clear() am Ende noch eine Wartezeit von 5ms. Ich glaube, 
das hat mir geholfen.

ansonsten habe ich diese links gefunden, vielleicht sind sie für dich ja 
interessant (sie sind über dein display):

http://home.iae.nl/users/pouweha/lcd/lcd0.shtml#visible_ddram
http://www.rn-wissen.de/index.php/Bascom_und_LCD%27s#Sonderfall:_LCDs_mit_mehr_als_80_Zeichen
http://www.roboternetz.de/phpBB2/printview.php?t=47810&start=0

Gruß,
Matze

von Mathias (Gast)


Lesenswert?

@holger

Was bedeutet das konkret für mein Programm?

Ich habe die Pins ja über die lcd-routines.h eingestellt.

Habe ich etwas übersehen?

von Ingo L. (grobian)


Lesenswert?

define LCD_PORT      PORTB
#define LCD_DDR       DDRB
#define LCD_RS        PB4
#define LCD_EN        PB5

#define LCD_DB4       PB0
#define LCD_DB5       PB1
#define LCD_DB6       PB2
#define LCD_DB7       PB3



 DB4 bis DB7 des LCD sind mit PB0 bis PB3 des AVR verbunden

von holger (Gast)


Lesenswert?

>@holger

>Was bedeutet das konkret für mein Programm?

Das es nicht funktionieren kann.

>Ich habe die Pins ja über die lcd-routines.h eingestellt.

Ja, und zwar falsch. Brenn erstmal das Testprogramm von
Pollin da rein um zu sehen ob das Display damit funktioniert.
Dann sehen wir weiter.

von Klaus W. (mfgkw)


Lesenswert?

Das Pollin-Addon-Board siehe vor, mit den Jumpern
folgende Verbindungen zu machen:
- AVR Port A Pin 0..7 - LCD DB0..7
- AVR Port B Pin 0    - LCD Enable
- AVR Port B Pin 1    - LCD R/W
- AVR Port B Pin 2    - LCD RS
(ohne Gewähr; vgl. Schaltplan Addon-Board und Evaluation-Board)


Die lcd-routines.c/.h, die hier herumgeistern gibt es in zwei Versionen.
Beide nutzen nur E(nable), DB4..7 und RS.
DB0..3 wird nicht genutzt, R/W muß immer low sein.
Die beiden Varianten unterscheiden sich darin, ob alle genutzten
Pins (DB4-DB7, RS, E) auf einem Port liegen müssen (ursprüngliche
Version, Peter Danegger?), oder ob die genutzten Pins über mehrere
Ports verteilt werden können.

Die erste Version kannst du nicht nehmen mit dem Addon-Board,
wenn nur die Jumper gesteckt werden.
Dem Auszug aus der Headerdatei von Ingo Laabs zufolge hast du diese
Version.
Mit dieser Version musst du die Pinbelegung für DB4..7 und Enable
und RS in der Headerdatei sinnvoll setzen, die Jumper ziehen
und durch Drahtbrücken passend zur Headerdatei ersetzen.

Oder: du nimmst die Version, bei der die Pins frei über Ports
verteilt werden können und kannst dann die Jumper nehmen.
Die Jumper für DB0..3 kannst du weglassen.
R/W kannst als Jumper setzen und musst dann aber in deinem
Programm dafür sorgen, daß es immer low ist, oder du lässt den
Jumper für R/W weg und steckst eine Drahtbrücke von Masse zum
LCD-Pin R/W.

Ich habe eine bei mir mit dem Addon-Board gelaufene Version
gestern erst hier abgestellt:
Beitrag "Atmel Addonboard - LCD ansteuerung"
Da steht im Kommentar auch drin, was verbunden werden muß
(ohne die Jumper).

von Klaus W. (mfgkw)


Lesenswert?

oder bist du der von gestern?
Hast du das denn mal probiert, oder kommt die Frage jetzt jeden Tag?

von Matze N. (hupe123)


Lesenswert?

ich denke, er is das von gestern. mal schauen, ob wir morgen wieder von 
ihm lesen werden :)
aber als ich angefangen habe, war ich auch noch so... :)))

von Mathias (Gast)


Lesenswert?

Ja, ich bin der von Gestern.

Werde mich jetzt anmelden und habe dann auch einen konstanten Namen :-)

Nein, die Frage kommt natürlich nicht jeden Tag.
Die verschiedenen Versionen und die recht komplexe Materie (zumindest am 
Anfang) haben mich dazu bewegt die Frage noch einmal zu stellen.

Ich fange an durchzubliken. Allerdings noch nicht ganz.

von Klaus W. (mfgkw)


Lesenswert?

Außerdem sehe ich gerade, daß bei dir F_CPU auf 8000000 steht.
Der Atmega16 auf dem Pollin-Board läuft aber doch mit 16 MHz, oder 
nicht?
Dann muß F_CPU auf 16000000 stehen.
Wobei sich die Frage stellt, ob du die Fuses überhaupt so gesetzt hast,
daß er mit dem externen Quartz (16MHz) läuft; wenn nicht, müsstest du
das auch nachholen - sonst läuft er mit etwa 1 MHz ab Werk.

von Klaus W. (mfgkw)


Lesenswert?

Dann lies dir doch bitte mal meinen Quelltext von gestern durch, da
steht im Kommentar, was wie verdrahtet werden muß.

Wenn du das machst und die lcd-routines.h entsprechend einstellst,
sollte es klappen - und falls Kontrast und F_CPU stimmen und die Fuses
natürlich.

Immerhin läuft das bei mir so auf dem Addon-Board.

Aber nicht darüber stolpern, daß die Anschlüsse auf dem Addon-Board
ziemlich dusselig beschriftet sind:
"PA Pin1" ist beim AVR Port A Pin 0; "PA Pin2" ist Port A Pin 1 usw.;
entsprechend auch für die anderen Ports.

von Mathias (Gast)


Lesenswert?

DANKE @ ALL

und vor allem @ Klaus.

Das LCD gibt Lebenszeichen von sich nachdem ich es verdrahtet habe 
selbst verdrahtet habe (ohne JUMPER).

Jetzt kann ich das Programm von Klaus anfangen zuverstehen und an meine 
Bedürfnisse anpassen.

Nochmals Danke.

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.