Forum: Mikrocontroller und Digitale Elektronik Pollin LCD 2x8 Ansteuerung (gcc, ATmega328, AVR-Studio)


von Chris T. (avrfaen)


Angehängte Dateien:

Lesenswert?

Hallo,

Habe mir ein kleines LCD Modul von Pollin mit 2x8 Zeichen gekauft und 
verdrahtet, jedoch bekomme ich es nicht zum laufen..
Ich habe schon mit mehreren LCD's gearbeitet, doch bei diesem komme ich 
nicht über den schwarzen Balken in der ersten Zeile hinaus..
Link zum LCD von Pollin:
(http://www.pollin.de/shop/dt/NzczOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_C0802_04.html)

Könnte sich mal jemand meine Routinen anschauen, vllt findet wer den
Fehler.

Vielen Dank im Voraus :)

von Chris T. (avrfaen)


Lesenswert?

Findet niemand einen Fehler, oder kann mir einen Tipp geben?
MfG

von Dietrich L. (dietrichl)


Lesenswert?

Chris T. schrieb:
> oder kann mir einen Tipp geben?

Die Standard-Fragen:
- Ist die Anzeige so angeschlossen wie in lcd.h angegeben?
- Stimmt die Taktfrequenz mit der SW-Definition überein (Quarz, Fuses)?
- Ist die Kontrasteinstellung OK?

Gruß Dietrich

von Wusel D. (stefanfrings_de)


Lesenswert?

Probier doch erstmal ein anderes Display.

Deine "Hausaufgaben" musst Du schon selbst machen.

Finde zuerst heraus, ob es ein Hardwarefehler oder ein Softwarefehler 
ist. Prüfe, ob das Timing an den Steuerleitungen (vor allem E) stimmt.

Wenn es sicher ein Softwarefehler ist, dann reduziere den Quelltext auf 
den relevanten Teil, und den schauen sich dann sicher auch einige Leute 
gerne an.

von Chris T. (avrfaen)


Lesenswert?

@Dietrich
Hardwarefehler kann ich ausschließen: habe es mehrmals neu verdrahtet 
und getestet, es ist auch so verdrahtet wie in der lcd.h angegeben.
Takt ist per Fuses und AVR Studio auf 8MHz eingestellt und den Kontrast 
habe ich via Poti festgelegt...

Der Fehler muss also irgendwie an der Software liegen, aber ich finde 
keinen mehr...
Andere LCD's habe ich bereits erfolgreich angesteuert.
Danke für deine Hilfe.

MfG

von J.-u. G. (juwe)


Lesenswert?

Chris T. schrieb:
> Hardwarefehler kann ich ausschließen:

Die Erfahrung zeigt: Je vehementer das behauptet wird, desto höher ist 
die Wahrscheinlichkeit, dass hier der Hase im Pfeffer liegt.

> Der Fehler muss also irgendwie an der Software liegen, aber ich finde
> keinen mehr...

Dann zeig die komplette Software. Nicht nur die LCD-Funtkionen.

> Andere LCD's habe ich bereits erfolgreich angesteuert.

An exakt dieser Schaltung mit exakt dieser Software?

von Chris T. (avrfaen)


Angehängte Dateien:

Lesenswert?

Im Anhang das komplette AVR Studio Programm.
Habe das LCD auf eine fertig geätzte Platine gelötet und zusätzlich
auf dem Steckbrett aufgebaut.

Vielleicht liegt es an den Registereinstellungen der lcd.h, finde aber 
auch hier keinen Fehler.
Langsam weiß ich nicht mehr weiter..

von Falk B. (falk)


Lesenswert?

Siehe Fehlersuche

Stimmt die Pinbelegung mit den Definitionen in der Software überein?
JEDES Bit?

von wombo (Gast)


Lesenswert?

Hatte sowas mal an nem Atmega32. Der Fehler bei mir war, dass JTAG 
aktiviert war und ich eben an diesem Port das LCD angeschlossen hatte. 
Nachdem ich JTAG deaktiviert hatte ist es sofort angesprungen.

von J.-u. G. (juwe)


Lesenswert?

Chris T. schrieb:
> Im Anhang das komplette AVR Studio Programm.

Auf die Schnelle habe ich nichs Auffälliges gefunden. Um zu testen, ob 
Dein Controller überhaupt richig läuft:
Lass doch mal die LED im Sekundentakt blinken.

von Timmo H. (masterfx)


Lesenswert?

Also bei mir läuft das Pollin Display mit dieser Init-Funktion
1
void lcd_init( void )
2
{
3
  LCD_DDR_D4 = 1;                               // enable output pins
4
  LCD_DDR_D5 = 1;
5
  LCD_DDR_D6 = 1;
6
  LCD_DDR_D7 = 1;
7
  LCD_DDR_RS = 1;
8
  LCD_DDR_E0 = 1;
9
  LCD_E0 = 0;
10
  LCD_RS = 0;                                   // send commands
11
12
  _delay_ms( 15 );
13
  lcd_nibble( 0x30 );
14
  _delay_ms( 4.1 );
15
  lcd_nibble( 0x30 );
16
  _delay_us( 100 );
17
  lcd_nibble( 0x30 );
18
  _delay_us( 100 );
19
  lcd_nibble( 0x20 );                           // 4 bit mode
20
  _delay_us( 100 );
21
  lcd_command( 0x28 );                          // 2 lines 5*7
22
  lcd_command( 0x08 );                          // display off
23
  lcd_command( 0x01 );                          // display clear
24
  lcd_command( 0x06 );                          // cursor increment
25
  lcd_command( 0x0C );                          // on, no cursor, no blink 
26
27
}
Hatte ich hier irgendwo mal im Forum gefunden.

von Chris T. (avrfaen)


Lesenswert?

Danke für die vielen Antworten.
Bei der Pinbelegung stimmt jedes Bit überein.
der uC sollte schon funktionieren -> LED blinktwie sie soll

@wombo
Beim Mega328 gibt es keine Fuse um JTAG zu deaktivieren/aktivieren
(der hat wohl kein herkömmliches JTAG)

@Timmo
du verwendest die gleichen Registerwerte wie ich.

von g457 (Gast)


Lesenswert?

> Beim Mega328 gibt es keine Fuse um JTAG zu deaktivieren/aktivieren

Wie sehen die übrigen Fuses aus? (bitte auslesen, nicht schätzen)

von Chris T. (avrfaen)


Angehängte Dateien:

Lesenswert?

Im Anhang ein Foto der Fuses aus dem AVR Studio.

MfG

von Timmo H. (masterfx)


Lesenswert?

Also bei mir war es eigentlich immer ein Kontaktproblem wenn nur ein 
schwarzer Balken kam (also z.B. kalte Lötstelle).
Hast du den FPC vom Polling auch genommen? Da können sich unter zu viel 
Hitze oder bei falschen Footprint die "Gabeln" verschieben und dann hast 
du keinen sauberen Kontakt mehr. Siehe auch 
Beitrag "Pollin liefert falschen Sockel zum 2x8 Zeichen Lcd"

von Karl H. (kbuchegg)


Lesenswert?

Tja.
Jetzt wirds schwierig.
Wenn das LCD kompatibel ist, dann ist es entweder (trotz deiner 
Beteuerungen) ein Verdrahtungsfehler oder ein Timngfehler.

Ich kann dir nicht sagen, wie du weiter vorgehen sollst. Ich kann dir 
nur sagen, was ich tun würde. Hauptsächlich weil ich auch keine Idee 
mehr habe und irgendwie mehr Einsicht ins Problem her muss.

Ausgangspunkt ist das Wissen, dass ein LCD zwar beliebig langsam aber 
nicht zu schnell angesteuert werden darf. D.h. ob zb der Enable Puls 
30ms oder 5 Sekunden lang ist, spielt keine Rolle. Er darf nur nicht 
kürzer als das Minimum sein.
Und genau da würde ich ansetzen.

WEnn du das LCD noch auf dem Steckbrett hast, würde ich mal parallel zu 
den LCD-Leitungen (direkt am LCD) jeweils eine LED dazuschalten, damit 
ich die Pegel der Leitungen verfolgen kann.
Und dann geh ich ins Extrem und verlängere alle Zeiten so, dass ich 
bequem alle 6 Leds (4 Datenbleitung + Enable + R/S) gut überblicken und 
verfolgen kann. Das Muster, in dem sie aufleuchten müssen ist ja bekannt 
und wenn es keine Timingsache ist, dann stimmt in diesem Muster was 
nicht. D.h. das was mir die LED erzählen mit dem Vergleichen, wie es 
sein sollte. Und da hier das Timing extrem verlangsamt wurde, sollten 
damit auch automatisch alle Timingprobleme vom Tisch sein. Wenn also mir 
die LED 'erzählen', dass die Initialisierungssequenz korrekt vom µC zum 
LCD eingetaktet wurde (und jeweils sauber jeweils nach dem Anlegen eines 
Nibbles der Enable Puls kommt) UND das LCD dann trotzdem nicht 
anspringt, dann muss man den Gedanken ins Auge fassen, dass das LCD 
defekt ist.

Wie gesagt: Ich hab keine Idee mehr, was du konkret noch überprüfen 
sollst. Laut deiner Aussage stimmt die Verkabelung und der µC läuft mit 
der Frequenz mit der er laufen soll und die ist auch korrekt in F_CPU 
eingetragen. Kommen alle Datenbits richtig an, dann muss ein 
kompatibles, nicht defektes LCD korrekt initialisieren. Von letzterem 
geh ich erst mal nicht aus, daher: lass die Hardware dir helfen und lass 
dir anzeigen was sich auf den Datenleitungen tatsächlich tut. Wichtig: 
Die LED so spät wie möglich einfügen, am besten wäre direkt auf dem LCD 
- damit auch Kabelbrüche oder schlechte Kontakte erfasst werden - die 
LED zeigen dir dann, welche Datenleitung fehlt.

Das ganze klingt jetzt erst mal aufwändig. Bedenkt man aber, dass du 
jetzt schon 2 Tage mit einem nicht funktionierendem LCD dasitzt, sind 1 
Stunde Aufwand zur Einkreisung des Problems kein wirklicher Aufwand. Auf 
jeden Fall besser als nichts tun und das Handtuch werfen.

von Chris T. (avrfaen)


Lesenswert?

@Karl Heinz

Vielen Dank für diesen Tipp.. Dass ich ein LCD so langsam ansteuern kann
habe ich bis jetzt nicht gewusst.
Werde die Fehlersuche mal mit den LED's machen und hoffe, dass ich den
Feler finde.

Danke nochmal für eure Hilfen.

MfG

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Guck dir mal diesen Post an: 
Beitrag "LCD C0802-04, HD47780 ansteuern.."
Die Lib von CybLord hab ich etwas geändert in Benutzung, die 
funktioniert. Entscheidend ist wohl das nibble, das im Init gesendet 
wird, das wäre wohl ein gravierender Unterschied zu den anderen 
Displays, probier das mal bei dir einzufügen.

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.