Forum: Mikrocontroller und Digitale Elektronik LCD 164A an ATMega16


von Florian M. (skywalker79)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe ein Problem beim Ansteuern eines 16x4 Displays.
Angeschlossen ist das Display an den PortA vom ATMega16.
Die Pinbelegung ist: PA0=RS PA1=E PA2=DB4 PA3=DB5 PA4=DB6 PA5=DB7 R/W 
ist an Masse angeschlossen.
Beim Einschalten wird in der ersten und dritten Zeile ein schwarzer 
Balken angezeigt, die anderen beiden Zeilen sind leer.
Die Schaltung wurde in der Form schon erfolgreich an einem 16x2 Display 
ausprobiert.
Die Firmware hab ich ebenfalls von der 16x2 Display Version übernommen 
und angepasst.

Den Quellcode habe ich als ZIP Datei angehängt.
Ich hoffe es kann mir einer von euch bei meinem Problem helfen.

mfg Florian

von Niels H. (monarch35)


Lesenswert?

Florian M. wrote:

> Die Pinbelegung ist: PA0=RS PA1=E PA2=DB4 PA3=DB5 PA4=DB6 PA5=DB7 R/W

Die Pinbelegung scheint mit dem Code nicht übereinzustimmen.

Beispielsweise:
1
void lcd_data(char byte)
2
{
3
  char sich_byte;
4
  sich_byte = byte;
5
  byte &= ~0x0f;  //Bit 0-3 auf 0 setzen
6
  byte |= (1<<lcd_rs);      //RS setzen
7
  PORT = byte;      //oberes Nibbel Ausgeben
8
  lcd_enable();
9
...

Der Code erwartet offentlich, daß das Datennibble auf die portbits 4-7 
ausgegeben wird und nicht 2-5...

Ich empfehle, die Datenleitungen auf PA4-7 umzulöten.

von Niels H. (monarch35)


Lesenswert?

nicht zu vergessen, das DDRA in der main() anzupassen (0b11110011).

Übrigens Glückwunsch noch zu der Fehlerbeschreibung. Sowas detailiertes 
trifft man hier nicht jeden Tag...

von He Ro (Gast)


Lesenswert?

> Die Schaltung wurde in der Form schon erfolgreich an einem 16x2 Display
> ausprobiert.
> Die Firmware hab ich ebenfalls von der 16x2 Display Version übernommen
> und angepasst.

Heißt das: Wenn du in genau derselben Schaltung mit genau derselben 
Firmware ein 16x2-Display anschließt, funktioniert es? (bis auf die 
Zeichen, die eigentlich in Zeile drei und vier stehen sollten, aber 
nicht zu sehen sind)?

Dann würde ich auf Fehler bei der Initialisierung tippen. Im 
Zweifelsfall beim Einschalten ein Weilchen warten, damit der uC nicht 
schneller startet als der Display-Controller, und dann dreimal resetten. 
Damit habe ich bisher alle LCDs doch irgendwann halbwegs zuverlässig zur 
Mitarbeit bewegen können...

MfG, Heiko

von Florian M. (skywalker79)


Lesenswert?

Hallo,

So ich hab jetzt noch einmal Testweise das 4 Zeilen Display an die 
Schaltung für das 2 Zeilen Display gehängt und es funktioniert.
Der Fehler lag also an der Pinbelegung, so wie es Niels richtig erkannt 
hat.
Ich hab nicht beachtet, dass das Display in der alten Schaltung an 
anderen Pins angeschlossen war und dementsprechend der Quellcode nicht 
gepasst hat.

Jetzt hab ich einfach die Datenleitungen an die Pins PA4-PA7 gelegt und 
das Display funktioniert.

Danke an euch und eure Hinweise.

mfg Florian

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.