Nokia 3210 Display will nicht...

So, nachdem am Freitag nun endlich mein erster eigener Arduino bei mir ankam hab ich gleich mal das alte 3210-Display ausgegraben. :sunglasses:

Leider bekomme ich es ums Verrecken nicht ans Laufen, es tut keinen Mucks, und ich bin mittlerweile wirklich ratlos. :frowning:

Fällt vielleicht jemandem von Euch was auf...?

Die Spannungen passen an sich, ich hab an den einzelnen Datenpins zum Display 3,28V (bzw. 0V) und 3,34V an Vdd anliegen.

/* --- Pinbelegung, Displayrueckseite, Leiste oben, von links */
// VDD
#define PIN_SCLK  2
#define PIN_SDIN  3
#define PIN_DC    4
#define PIN_SCE   5
// GND
// VOUT
#define PIN_RESET 6
/* --- */

#define LCD_C     LOW
#define LCD_D     HIGH

#define LCD_X     84
#define LCD_Y     48
#define LCD_CMD   0

static const byte SPLASH[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-16,-52,6,2,2,2,1,1,15,10,14,12,24,24,16,0,0,0,0,0,0,0,0,0,0,-128,-48,112,96,-32,-64,64,64,64,-64,-128,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,-112,-16,-128,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,-8,-76,123,-49,-121,-125,2,2,4,8,8,8,8,8,8,8,8,8,8,8,8,12,4,4,6,3,3,3,3,-125,-125,-125,-63,65,-31,-95,113,113,57,63,31,-2,0,0,0,0,0,0,0,0,0,0,0,0,2,2,14,18,18,18,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,31,97,-61,2,3,1,5,5,5,4,6,6,6,6,6,6,6,6,6,6,6,7,5,5,5,1,3,3,2,3,17,25,-120,-56,72,-12,-12,38,-2,3,0,0,0,0,0,0,0,0,0,0,0,0,64,-128,-43,-107,-107,-107,-118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,124,-64,0,0,0,0,0,16,112,127,62,0,60,100,124,56,28,-68,-20,-4,3,63,6,30,24,15,-36,-33,-49,-29,-57,-64,-128,3,3,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-128,-128,-99,-96,-40,-124,-72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,56,-64,0,0,0,0,0,0,0,0,0,0,0,-8,-4,-2,-2,-1,-1,-1,127,60,-2,-1,-1,-1,127,63,-97,-121,67,96,-128,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,114,-108,-105,-112,112,-112,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,24,48,32,32,64,64,64,64,-64,-64,-127,-127,-127,-127,-127,-128,-64,-64,-32,112,113,97,48,24,14,7,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,14,18,18,18,14,0,0,0};

void LcdClear(void) {
  for (int index = 0; index < LCD_X * LCD_Y / 8; index++)
    LcdWrite(LCD_D, SPLASH[index]);
}

void LcdInitialise(void) {
  pinMode(PIN_SCE,   OUTPUT);
  pinMode(PIN_RESET, OUTPUT);
  pinMode(PIN_DC,    OUTPUT);
  pinMode(PIN_SDIN,  OUTPUT);
  pinMode(PIN_SCLK,  OUTPUT);

  digitalWrite(PIN_RESET, LOW);
  delay(1);
  digitalWrite(PIN_RESET, HIGH);

  LcdWrite( LCD_CMD, 0x21 );  // LCD Extended Commands.
  LcdWrite( LCD_CMD, 0xBf );  // Set LCD Vop (Contrast). //B1
  LcdWrite( LCD_CMD, 0x04 );  // Set Temp coefficent. //0x04
  LcdWrite( LCD_CMD, 0x14 );  // LCD bias mode 1:48. //0x13
  LcdWrite( LCD_CMD, 0x0C );  // LCD in normal mode. 0x0d for inverse
  LcdWrite(LCD_C, 0x20);
  LcdWrite(LCD_C, 0x0C);
}

void LcdWrite(byte dc, byte data) {
  digitalWrite(PIN_DC, dc);
  digitalWrite(PIN_SCE, LOW);
  shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
  digitalWrite(PIN_SCE, HIGH);
}

void setup(void) {
  LcdInitialise();
  LcdClear();
}

void loop(void) {
}

Habs rausgefunden...

Nach Lesen von bestimmt zwei Dutzend Seiten im Internet zu dem Thema bin ich über einen englischen Bericht gestolpert, in dem der Bastler darüber berichtet, dass er vor dem Erfolg eine ganze Ladung Displays zerstört hat, teils beim Zerlegen eines alten Handys, teils durch Ver-lötung, aber auch durch zuviel Druck oder Fehler bei Reparaturversuchen an Wackelkontakten an der Kontaktleiste.

Eben dieser letzte Punkt hat mich stutzig gemacht, ich hatte eigentlich angenommen, dass der Metallrahmen, der ja auf das durchsichtige Kunststoffchassis geschmolzen ist, genug Druck aufbaut um einen sauberen Kontakt mit dem Glasträger zu gewährleisten. Dem ist wohl nicht so.

Demzufolge hat es ein leichter Druck auf die Leiste während eines manuellen Resets des Arduinos gebracht, ich hab sofort und problemlos das Bild bekommen, das ich wollte, meine Verkabelung und das Programm sind damit erwiesenermaßen korrekt.

Das hat mich jetzt zwei komplette Tage und eine Nacht sehr schlechten Schlafes gekostet, ich könnt

Bei der Gelegenheit konnte ich damit auch gleich überprüfen dass mein Splashscreen-Generator für diese Art Displays funktioniert. :slight_smile:

Der war bisher nur theoretisch, da ich ja bis zu diesem Wochenende noch keinen Arduino besessen hab, und bisher hatte ich noch keine Rückmeldung von Benutzern bekommen. :wink:

Hast du auch den Finalen Code und könnest du den Bitte Posten ?

Was genau meinst Du mit finalem Code?

Das oben gezeigte Displaybild kam direkt von dem Code von ganz oben, nachdem ich die Kontakte beim und nach einem Reset fest angedrückt hatte. :slight_smile:

Mein "Endziel", eine Ganganzeige und Benzinuhr fürs Motorrad, ist noch nicht fertig... :wink:

Hey Joghurt,

wie ermittelst du denn den Benzinstand?

Zum Einen grob über den regulären analogen Tankfüllstandssensor (darüber stelle ich fest wann ich an der Tanke war und vollgetankt hab) und zum Anderen über einen Durchflussmesser in der Leitung.

Letzteren hab ich heute angeschlossen, ob das mit diesem Sensor wie gewünscht funktioniert muss ich noch ausprobieren.
:slight_smile:

Kannste ja dann mal posten, da es eine sehr gute Idee ist...

Hab jetzt mal eine Seite dazu gebastelt. :slight_smile:

Mittlerweile bin ich softwaremäßig so gut wie fertig, es sind noch ein paar kleine Anpassungen nötig wenn die Hardware fertig ist (zuvor muss allerdings mein Motorrad aus dem Winterschlaf kommen). Sourcecode und eine (voll funktionierende) Demo-Applikation gibts auch.
:slight_smile:

Der Source enthält unter Anderem wie man ein Nokia 3210-Display anspricht (und den Viewport bei Bedarf auf den Kopf stellt), praktische Anwendung des EEPROM als Speicher für statische Daten wie Fonts und Splash-Screens, des PROGMEM und wie man ganze Datenstrukturen auf einen Satz speichert und liest, der Wire.h für die DS1307-Echtzeituhr (wie man die Uhr ausliest und stellt, sowie wie man die zusätzlichen frei verfügbaren 56 Byte in der Uhr nutzt), wie man softwaremäßig einen leicht zu schnellen (oder zu langsamen) Uhrenquarz ausgleicht und wie man aus einem Datum den Wochentag berechnet, wie man ohne zusätzliche Hardware mehr als zwei Pins per Interrupts überwachen kann (und das mit mehr als den zwei per attachInterrupt benutzbaren Interrupts), wie man scrollende Menüs programmieren kann, wie man das Ganze mit nur einem Button steuert und wie man das alles so mit Java verquirlt, dass man aus dem gleichen Source sowohl ein funktionierendes Binary für den Arduino als auch ein Java-Applet compilieren kann. Möglicherweise bringts ja jemandem was.
:wink:

Muss schon sagen. Deine Arbeit gefällt mir.

Habe mir einen Lötkolben mit 0,4 mm Spitze bestellt und hoffe das er für derartige LCD-Display Kabellötereien fein genug ist.

Danke. :slight_smile:

Sollte passen, mein Lötkolben ist gröber als 0,4mm... :slight_smile:

Naja, ich hab ein Nokia 3310 Display und muss die Kabel direkt auf die Kontakte auf der Rückseite des Glases auflöten.

Hi

Wollte (falls der Fred hier noch aktuell ist) erwähnen, dass es bessere Füllstandssensoren gibt, unzwar so "Stabsensoren". Damit kann man wunderbar den Füllstand erfassen (ggf er ist lang genug) und braucht somit keine Durchflusssensoren oder andere. Im Modellsport habe ich auch schonmal sowas gesehen.

MFG, Robdeflop®

falls der Fred hier noch aktuell ist)

Wer ist Fred?
:wink: :wink: :wink:

Hi

Damit meine ich Thread xD In manchen Foren wird dazu "Fred" gesagt :wink:

MFG, Robdeflop®

@Robdeflop: An sich ein guter Tipp (danke dafür) aber um das richtig zu machen müsste ich an meinem Tank rumschrauben, und das wollte ich eher ungern... :wink: