LCD - Probleme

Gast #1340903
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.

------------------------------------------------------------------------
Angehängte Dateien:
Gast #1340923
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
Gast #1340971
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!
#1340988
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
#1341014
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).
Gast #1341041
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.
#1341048
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.
#1341058
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren