Forum: Mikrocontroller und Digitale Elektronik LCD mit ATMEGA128 und Peter Fleury


von µC-noop (Gast)


Lesenswert?

Hallo, ich versuch jetzt schon seit 2tagen mein LCD zum laufen zu 
bringen.
Ich verzweifel bald...

Daten:

ATMEGA128 externer 16MHz Clock

LCD Display HD44780 (lt. Datenblatt)
4 Zeilen; 20 Spalten.

Ich wollte den Code von Peter Fleury verwenden (nach der Methode... 
nicht das Rad selbst erfinden)

Pins sind richtig angeschlossen. Dabei benutze ich vier datenpins.

PA1 an LCD_Pin11; ... PA3 an LCD_Pin14
PA6 -- EN -- LCD_Pin6
PA5 -- RW -- LCD_Pin5
PA4 -- RS -- LCD_Pin4
LCD_Pin7...LCD_Pin10 sind offen.

Bei Peter Fleury habe ich im header folgendes angepasst:
1
#define XTAL 16000000UL 
2
#define LCD_LINES           4     /**< number of visible lines of the display */
3
#define LCD_DISP_LENGTH    20     /**< visibles characters per line of the display */
4
#define LCD_LINE_LENGTH  0x40     /**< internal line length of the display    */
5
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
6
#define LCD_START_LINE2  0x40     /**< DDRAM address of first char of line 2 */
7
#define LCD_START_LINE3  0x14     /**< DDRAM address of first char of line 3 */
8
#define LCD_START_LINE4  0x54     /**< DDRAM address of first char of line 4 */
9
#define LCD_WRAP_LINES      0     /**< 0: no wrap, 1: wrap at end of visibile line */

alles andere im .h und .c habe ich gleich gelassen.

Mit folgender main wollte ichs zum laufen bringen:
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/pgmspace.h>
4
#include "lcd.h"
5
6
#define F_CPU = 16000000UL;
7
8
int main(void){
9
10
  lcd_init(LCD_DISP_ON);
11
  lcd_clrscr();
12
13
  lcd_puts("..test..");
14
15
while(1){}
16
}

Folgendes Phänomän:
Ich schalte die Spannung ein, in der ersten und dritten zeile erscheinen 
Balken.
Ich lade das Programm auf den µC, das Display geht aus und tut gar nix.

Die lcd.c und .h habe ich in das projekt im AVR studio eingebunden, 
daran liegts schonmal nicht.

Danke schonmal für eure hilfe

Gruß

von µC-noop (Gast)


Lesenswert?

Ist das zu Trivial, oder zu viel Text???
könnt echt hilfe brauchen...

gruß

von Interrupter (Gast)


Lesenswert?

Schon mal am Kontrastpoti gedreht?
Die Lib. ist O.K. habe keine Probleme damit.

von Thomas (Gast)


Lesenswert?

Weil du meinst alles andere hast du so gelassen: hier hast den Port aber 
auf deinen gesetzt bzw du alles so verbunden das es so wies original 
drin steht passt?
1
#define LCD_PORT         PORTC        /**< port for the LCD lines   */
2
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
3
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
4
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
5
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
6
#define LCD_DATA0_PIN    0            /**< pin for 4bit data bit 0  */
7
#define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
8
#define LCD_DATA2_PIN    2            /**< pin for 4bit data bit 2  */
9
#define LCD_DATA3_PIN    3            /**< pin for 4bit data bit 3  */
10
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
11
#define LCD_RS_PIN       4            /**< pin  for RS line         */
12
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
13
#define LCD_RW_PIN       5            /**< pin  for RW line         */
14
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
15
#define LCD_E_PIN        6            /**< pin  for Enable line     */

mit PA1 meinst wahrscheinlich PA0 oder? Sons wärns ja nur drei Pins :D

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Kontrasteinstellung würde ich ausschliessen (obwohl es grundsätzlich ein 
wertvoller Tipp ist). µC-noop schreibt, dass anfangs (bei Power-On) zwei 
dunkle Zeilen sichtbar sind, die anschliessend verschwinden. Das wäre 
bei ungünstiger Kontrasteinstellung nicht der Fall.

> LCD_Pin7...LCD_Pin10 sind offen.
Verbinde diese Leitungen (restl. Datenleitungen des LCD-Controllers?) 
am LCD mal mit GND, damit sie nicht stören bzw. definiert auf 0 
gesetzt sind.

Du kompilierst auch mit eingeschalteter Optimierung, damit die 
delay-Funktionen korrekt arbeiten? Hast du schon eine Warteschleife vor 
dem lcd_init() probiert? Nicht dass du den eigenständigen Power-On-Reset 
des LCD-Controllers unterbrichst und der danach nichts sinnvolles mehr 
macht.

Hast du einen Link zu dem Datenblatt des konkret von dir verwendeten 
LCDs parat?

Add wg. dem Posting von Thomas und der Zeile
1
#define LCD_PORT         PORTC        /**< port for the LCD lines   */

Du betreibst den Atmega128 auch als Atmega128 und nicht als Atmega103?
http://www.mikrocontroller.net/articles/AVR_Checkliste#Besonderheiten_bei_ATmega64_.2F_ATmega128 
Ohne es geprüft zu haben: es könnte im M103C-Modus Schwierigkeiten mit 
PORTC geben

von µC-noob (Gast)


Lesenswert?

Danke für die antworten,

habs problem gefunden:
peinlich peinlich
war ne kalte lötstelle, natürlich ausgerechnet am EN...

nochmal danke
Gruß

von Dirk (Gast)


Angehängte Dateien:

Lesenswert?

Hey,

habe leider das selbe Problem :-(

Alle Leitungen mehrmals geprüft...
Vor dem initialisieren erscheint der Balken und danach passiert nichts 
mehr..

Der Atmega32 bleibt aber nicht hängen ;-)
Wenn das Display nicht angeschlossen ist, macht er auch nicht weiter, 
also sollte das mit dem WaitBusy schonmal funktionieren...

Hat jemand eine Idee?

Hab meine lcd.h auch mal angehängt

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.