Forum: Mikrocontroller und Digitale Elektronik Problem mit Nokia 3310 LCD


von Aleksej Kiselev (Gast)


Lesenswert?

Guten Morgen!
Ich habe Schwierigkeiten mit der LCD Anzeige von Nokia 3310.
Es funktioniert ab und zu, aber am meistenst wird die Anzeige nicht
richtig initialisiert, denke ich mir. Es bleibt alles hell (oder kann
auch dunkel sein), woran könnte es liegen?
Für jede Vermutung würde ich sehr dankbar sein!
MfG, Aleksej

von HansHans (Gast)


Lesenswert?

Das hatte ich auch schon siehe:
http://www.mikrocontroller.net/forum/read-4-96909.html
----->
Wenn das Display nicht arbeitet ist der Fehler evtl.in der
Resetschaltung Reset muß kleiner als 0,7V sein
evtl mal von Hand Resete und erst dan das LCD an den AVR.

Das LCD geht erst an wenn es vom AVR per Befehl eingeschaltet wird
nicht so wie bei den Standart LCD oberste Zeile dunkel .
Gruss
HansHans

von Aleksej Kiselev (Gast)


Lesenswert?

Ne, leider hat es nichts gutes gebracht. Ich habe an Reset einn
Pullup-Widerstand angelötet (47kOhm zu VCC) und ein Kondensator (100nF
zu GND). Jeztzt wird es zwar immer initialisiert, aber nicht richtig -
auf der Anzeige habe ich was chaotisches, und es ist ein Standbild, da
wird nichts geändert. Ich habe alles wieder entfernt und habe das, was
ich vorher hatte - es wird nur ca. 1 Mal pro 40 Resets richtig
initialisiert, aber dann geht ja alles wie es sein soll. Und alle
weiteren Resets bringen ja keine Probleme mit.
So mache ich es eigentlich:

  //  Pull-up on reset pin.
  LCD_RST_PIN = 1;
  //  Set output bits on port B.
  DDRB = 0xFF;
  LCD_POWER = 1;
  delay_ms(10);
  //  Toggle display reset pin.
  LCD_RST_PIN = 0;
  delay_ms(100);
  LCD_RST_PIN = 1;
  //  Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0,
CPHA->0, Clk/4
  SPCR = 0x50;
  //  Disable LCD controller
  LCD_CE_PIN = 1;

  LcdSend(0x21, LCD_CMD);  // LCD Extended Commands.
  LcdSend(0xC8, LCD_CMD);  // Set LCD Vop (Contrast).
  LcdSend(0x06, LCD_CMD);  // Set Temp coefficent.
  LcdSend(0x13, LCD_CMD);  // LCD bias mode 1:48.
  LcdSend(0x20, LCD_CMD);  // LCD Standard Commands, Horizontal
addressing mode.
  LcdSend(0x0C, LCD_CMD);  // LCD in normal mode.

von Rufus T. Firefly (Gast)


Lesenswert?

Vielleicht solltest Du nach dem deaktivieren der Reset-Leitung ein
Weilchen warten?

  //  Toggle display reset pin.
  LCD_RST_PIN = 0;
  delay_ms(100);
  LCD_RST_PIN = 1;

  // ### hier so: etwas warten ###

  //  Enable SPI port: (...)
  SPCR = 0x50;

  //  Disable LCD controller
  LCD_CE_PIN = 1;

Diese letzte Zeile: Bedeutet das, daß Du /CS des Displays während des
Resets auf LOW (=aktiv) hältst? Mach das mal andersherum.

Deine LcdSend-Funktion aktiviert den LCD_CE_PIN?

von Aleksej Kiselev (Gast)


Lesenswert?

Nach meinen Beobachtungen, ist das Verhalten von der Anzeige
positionsabhängig, das heisst, dass auf einigen Positionen wird es am
meistens richtig initialisiert und auf anderen klappt es überhaupt nie.
Kann es an der Kabellänge liegen? Bei mir ist en nicht mehr als 50 cm.
Oder gibt's vielleicht irgendwelche Störungen?

von Rufus T. Firefly (Gast)


Lesenswert?

Die Kabellänge im Telephon -dafür ist das Display schließlich entwickelt
worden- beträgt einige wenige cm. 50cm kann zu Problemen führen, vor
allem, wenn das Display mit hoher Taktfrequenz auf der
SPI-Schnittstelle angesteuert wird und womöglich noch irgendwelche
Störeinstreuungen auftreten.

von Aleksej Kiselev (Gast)


Lesenswert?

Ich weiss ja nicht, eigentlich arbeite ich mit 1 MHz Taktfrequenz, ich
glaube nicht, dass die Geschwindigkeit so hoch ist. Ich hab' auch
versucht SPCR = 0x51, es hat auch nicht geholfen.
Aber diese Idee mit der Pause nach dem Befehl: LCD_RST_PIN = 1;
hat doch was gebracht. Jetzt funktioniert es im Prinzip einwandfrei,
aber nicht überall - es ist wirklich sehr positionsabhängig. Wenn ich
die Anzeige um 5-10 cm verschiebe, dann läuft es wieder nicht...

von Jens123 (Gast)


Lesenswert?

hallo
evtl ein kontaktproblem??
kurzschluss am Display? kontrolliere das evtl mal
ich hatte diese Probleme auch gehabt
bei mir ist das Kabel ca. 30 .. 40 cm Lang bei 16MHz IOclock

Gruss Jens

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.