Forum: Mikrocontroller und Digitale Elektronik HD44780-LCD an ATMega16 reagiert nicht auf Programm


von Walter K. (satyrix)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich bin noch totaler Anfänger in Sachen LCD-Display am Mikrocontroller 
und bitte sehr um eure Hilfe, da ich einfach nicht weiter weiß.
Für ein Projekt soll ein 2x40-LCD-Display (ANAG VISION AV4020) mit dem 
HD44780 kompatiblen KS0066-Controller auf einem Testboard von einem 
ATMega16 im 4bit-Betrieb angesteuert werden.
Der ATMega läuft im Moment noch auf internem 1MHz-Takt, JTAG ist 
ausgeschaltet, programmiert wird über ISP mittels Atmel AVRISPmkII.
Das Display ist wie folgt angeschlossen:
LCD-DB7 an PORTC7
LCD-DB6 an PORTC6
LCD-DB5 an PORTC5
LCD-DB4 an PORTC4
LCD-DB3 an GND
LCD-DB2 an GND
LCD-DB1 an GND
LCD-DB0 an GND
LCD-RW  an GND
LCD-RS  an PORTB2
LCD-EN  an PORTB4

Nach Anlegen der Versorgungsspannung ist nur die erste Zeile schwarz.
Die angehängten Quellcodes bringen im AVR Studio4.18 beim Kompilieren 
keine Fehler, jedoch ändert sich an der Displayanzeige nichts.
Was kann das sein?? Ich bin über jede Hilfe sehr dankbar!!

von Christian F. (cmf) Benutzerseite


Lesenswert?

Muss hier vllt. noch F_CPU eingetragen werden, also 1000000?

lcd-routines.h:
1
////////////////////////////////////////////////////////////////////////////////
2
// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
3
 
4
#ifndef F_CPU
5
#define F_CPU 3686400
6
#endif

Ich sehe gerade:
1
// Pinbelegung für das LCD, an verwendete Pins anpassen
2
// Alle LCD Pins müssen an einem Port angeschlossen sein und die 4
3
// Datenleitungen müssen auf aufeinanderfolgenden Pins liegen

Also musst du das LCD erstmal an einen PORT anschließen! Außerdem 
müssen dann je nach Belegung die DEFINES hier geändert werden
1
//  LCD DB4-DB7 <-->  PORTD Bit PD0-PD3
2
#define LCD_PORT      PORTD
3
#define LCD_DDR       DDRD
4
#define LCD_DB        PD0
5
 
6
//  LCD RS      <-->  PORTD Bit PD4     (RS: 1=Data, 0=Command)
7
#define LCD_RS        PD4
8
 
9
//  LCD EN      <-->  PORTD Bit PD5     (EN: 1-Impuls für Daten)
10
#define LCD_EN        PD5

von Walter K. (satyrix)


Angehängte Dateien:

Lesenswert?

Hallo Christian F.

ich habe in der lcd-routines.h den F_CPU-Wert auf 1000000 geändert, 
sowie
die Portbelegungen an das Programm angepasst. Es tut sich jedoch 
weiterhin nichts am Display beim Programmieren des ATMega16, es werden 
auch keine Fehler ausgegeben. Was kann es noch sein???

von Walter K. (satyrix)


Angehängte Dateien:

Lesenswert?

Hallo Christian F.

Ich musste lcdroutines.h nochmal ändern(Zeile 23:  #define LCD_DB 
PC4).Bringt aber immer noch keine Anzeige.Wenn mir jemand helfen kann 
wäre ich sehr dankbar

von Karl H. (kbuchegg)


Lesenswert?

Walter Klevenz schrieb:

> die Portbelegungen an das Programm angepasst.

Hast du nicht.
Denn mit dem Code ist diese Belegung

LCD-DB7 an PORTC7
LCD-DB6 an PORTC6
LCD-DB5 an PORTC5
LCD-DB4 an PORTC4
LCD-RS  an PORTB2
LCD-EN  an PORTB4

erst mal schlicht und einfach gesagt nicht möglich.
Dieser Code geht davon aus, dass alle LCD-Anschlüsse an EINEM Port
angeschlossen sind.

Lass dich nicht davon täuschen, dass du hier
#define LCD_RS        PB2
PB2 geschrieben hast. De facto ist das 'B' in PB2 unwichtig und trägt
nichts bei. PB2 ist ein "anderer Name" für 2. Genauso wie es PC2 oder
PD2 oder PA2 auch ist.
Eine Benennung ala BIT2 unter Verzicht auf PB2, PA2, PD2 und wie sie 
alle heißen, wäre besser gewesen, denn genau das steckt da dahinter und 
nicht mehr. Dafür ist es jetzt aber schon zu spät, der Zug ist schon vor 
langer Zeit abgefahren.

Der Port, an dem sich alles abspielt steckt hier drinnen
#define LCD_PORT      PORTC
#define LCD_DDR       DDRC

und zwar NUR hier drinnen.
Was du bräuchtest ist also eine Portdefinition, die nur für den RS bzw.
EN Pin gilt. Das kann man machen, ist aber im vorliegenden Code nicht
realisiert.

von Peter D. (peda)


Lesenswert?


von Walter K. (satyrix)


Lesenswert?

Vielen Dank Herr Buchegger,

ich werde jetzt mal die Belegung von RS und EN auf der Platine ändern, 
dass alles auf PORTC liegt und danach im Programm wieder zurückändern.
Ich sage dann Bescheid, was sich getan,hat. Aber nochmals danke!!

von Karl H. (kbuchegg)


Lesenswert?

Nicht vergessen:
Mega16 und Port C  -> JTAGEN Fuse abschalten.

von spess53 (Gast)


Lesenswert?

Hi

Und D0..D3 vom Display nicht an GND.

MfG Spess

von Walter K. (satyrix)


Lesenswert?

Hallo Herr Buchegger,

vielen Dank für Ihren Tipp, jetzt funktioniert das Display!!!

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.