Forum: Mikrocontroller und Digitale Elektronik LCD 12864 am ATmega32


von Martin Friedrich (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebes Mikrocontroller.net Team!
Da ich hier schon einmal rasch Hilfe bekommen habe, versuche ich es bei 
meinem nächsten Problem wieder hier. (dieses Problem ist aber etwas 
komplexer)

Ich habe einen ATmega32 und will damit einen LCD12864 im 4-Bit Modus 
ansteuern.
Da es hier verschiedene gibt, hänge ich ein Bild der Vorder- und 
Rückseite an.

Die Pinbelegung ist wie folgt:

PC0-3   DB4-7
PC4     RS
PC5     RW
PC6     E

Nun zum Code:
Ich habe 2 verschiedene "Quellcode-Pakete" für den LCD.


Der erste ist von meinem Betreuungslehrer und ist bei weitem nicht so 
aufwändig wie das 2te Paket. Es funktioniert aber nicht. Man kann nichts 
auf dem LCD ausgeben.
Datei: Paket 1.zip


Das zweite Paket habe ich aus dem Internet. Das Programm hat Herr Peter 
Fleury zusammengeschrieben. Ich habe es so weit es mir möglich ist an 
meine Bedürfnisse angepasst. Der Großteil übersteigt aber mein Wissen.
Datei: Paket 2.zip
Mit diesem Programm funktioniert die Kommunikation mit dem Display 
teilweise.

wenn man z.B. folgenden Code schreibt:

1)
printLcd(0,0,"01Hallo78901234567890");  //(x,y,"....")

springt der Cursor nach 16 Zeichen in der ersten gleich in die dritte 
und nicht in die zweite Zeile des LCDs.

2)
printLcd(0,0,"Hallo");
delay(1000);
printLcd(1,1, "lieber");
delay(100);
printLcd(2,2, "LCD");
delay(100);
printLcd(3,3,"Display");
delay(3000);
lcd_clrscr();

Schaut das Bild auf dem LCD so aus:
________________
|HaliLCDisplay   |
|                |
|                |
|                |
******************

Meine Vermutung ist, dass die Parameter für Spalten und 
Speicheraddressen in der header Datei nicht richtig eingestellt sind.
Ich bin aber nicht fähig, den Fehler selber zu finden, da ich noch zu 
wenig Erfahrung mit dem Thema habe.




Ich bitte nun jemanden, der sich gut mit dem Thema auskennt, über den 
Code zu schauen und Fehler auszubessern.
Über was ich mich auch freuen würde, wäre ein Link zu anderen Versuchen 
für 4Bit Modus auf dem LCD, die sicher mit meiner Hardware 
funktionieren.

Mit freundlichen Grüßen,
Martin

von Oliver R. (orb)


Lesenswert?

Interessant, daß da überhaupt was kommt.
Die Bezeichnung klingt nach einem Grafikdisplay mit 128x64 Pixeln und 
die Pinbeschriftung passt nicht zu hd44780-Displays, die haben kein Vout 
und kein RST.

von Sascha (Gast)


Lesenswert?

Ich würde sagen das ist ein 20x4 TextLCD, also ein vierzeiliges mit 20 
Buchstaben pro Reihe.

Also KEIN 128x64 Pixel Grafikdisplay. Das könnte auch schon die 
Erklärung sein, warum das nicht klappt ;)

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Das 12864 auf dem Aufkleber deutet aber eher auf ein Grafikdisplay hin.

http://minhdanh2002.blogspot.de/2013/11/experimenting-with-st7920-128x64.html

PSB ist für den Serialmodus.

Handbuch !

http://www.lcd-module.de/eng/pdf/zubehoer/st7920_chinese.pdf

: Bearbeitet durch User
von Martin Friedrich (Gast)


Lesenswert?

Vielen Dank Dennis!

Ich habe heute den ganzen Tag gearbeitet, hab mir aber schon deinen 
ersten Link angesehen und werde morgen gleich losprogrammieren und 
ausprobieren.

von Martin Friedrich (Gast)


Lesenswert?

Zwei Fragen hab ich noch:

1) Mit welchem Pin am LCD verbinde ich "LCD_REST" Quellcode? Mit dem 
Reset Pin oder mit R/W?

2)

Da die Initialisierung nicht mit meinem µC zusammenpasst, hab ich sie so 
umgeschrieben:

#define LCDPORT         PORTC

#define LCD_RS     4
#define  LCD_EN     6
#define  LCD_REST  5
#define  LCD_DB4    0
#define  LCD_DB5    1
#define  LCD_DB6    2
#define  LCD_DB7    3

RS, EN und REST setzen ist kein Problem. Nur bei den Datenbits weiß ich 
nicht weiter.
Diese werden im Code so gesetzt:
    LCD_DB4 = (command & (1 << 4)) >> 4;
    LCD_DB5 = (command & (1 << 5)) >> 5;
    LCD_DB6 = (command & (1 << 6)) >> 6;
    LCD_DB7 = (command & (1 << 7)) >> 7;

Wie muss ich alse DB4-7 definen oder wie muss ich das Programm 
umschreiben, damit es funktioniert?

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.