Tamagotchi-LCD über Arduino direkt ansteuern

Hallo zusammen :slight_smile:

Da ich schon seit meiner Kindheit mein eigenes Tamagotchi nachbauen & programmieren wollte und Arduino die potentielle Möglichkeit hergibt, wollte ich das mal umsetzen.

Das Problem hierfür wäre eigentlich “nur” das LCD. Da es sich kostentechnisch nicht lohnt, ein LCD anfertigen zu lassen, dachte ich, nimmst Dir eins aus einem Bestehenden.

Ich habe hierfür ein (defektes) “Dinkie Dino” auseinander genommen. Defekt insofern, dass es sich nach dem Start direkt aufhängt und alle Displaysegmente sichtbar sind (siehe Anhang 1).

Daraufhin habe ich mit einem kleinen Streifen die einzelnen Kontakte auf der Platine bedeckt, um die einzelnen dahintergeschalteten Pixel zu identifizieren (siehe Anhang 2).

Dabei kam ich zu folgendem Ergebnis (siehe Anhang 3).
Das T steht für Top, die oberen 28 Kontakte auf der Platine, das B für Bottom, die Unteren. Die zwei für das jeweilige Symbol (6 links, 6 rechts) zuständigen Kontakte stehen bei den Symbolen selbst, die Pixel im Hauptbildschirm sind zu je 8 Pixel zusammengefasst und sind vertikal jeweils zur Hälfte nicht sichtbar, wenn ich den oben bzw. unten genannten Kontakt blockiere, bzw. fällt die entsprechende Zeile komplett aus, wenn ich den seitlich (rechts) genannten Kontakt blockiere.

Ich habe mich nun auch wochenlang über die direkte Ansteuerung (ohne Treiber) von LCDs eingelesen, dass diese zwingend mit Wechselspannung betrieben werden müssen und bei solchen “Grafik-Displays” die Ansteuerung via Multiplexing funktioniert.

Allerdings komme ich genau an diese Punkt nicht weiter. Ich habe nun den Arduino mittels einfachem Code:

void setup() 
{
 pinMode(a, OUTPUT);
 pinMode(b, OUTPUT);

}
void loop() 
{
  digitalWrite(a, HIGH);
  delay(10);
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  delay(10);
  digitalWrite(b, LOW);
}

auf eine simple Wechselspannung (ca. 50 Hz) programmiert.

Für mein Verständnis ist es nun so, dass jeweils für 1/100s einen Plus- und einen Minuspul habe. D.h. es dürfte nur ein einzelner Pixel schwarz sein, da nur dieser einen “geschlossenen Kreislauf” hat. Praktisch ergab es jedoch ein anderes Ergebnis:

  1. (Anhang 4)
    Angeschlossen sind T4 + T6. Es müsste dann doch eigentlich nur der Pixel LINKS OBEN schwarz sein und nicht die ganze erste Spalte ?!

  2. (Anhang 5)
    Angeschlossen sind T3 + T4. Das ist nachvollziehbar, da der Strom zwischen den beiden Zeilen fließen kann.

  3. (Anhang 6)
    Angeschlossen sind T4 + T5. Müsste jetzt nicht nur das “Trinken”-Symbol leuchten?

Auch habe ich bereits von dem Begriff “Backplane” gelesen, aber das bezieht sich - soweit ich es verstanden habe - nur auf LCDs, die pro Pixel bzw. Segment einen eigenen Anschluss haben, was hier nicht der Fall ist.

Leider kann man selbst in einem guten Lichtwinkel die Leiterbahnen des Displayglases nicht erkennen, das wäre bestimmt auch hilfreich, außer jemand kennt eine Möglichkeit, diese sichtbar(er) zu machen,…?!

Wäre nett, wenn mir jemand helfen könnte, wie ich die einzelnen Pixel des Displays mittels Wechselspannung kontrolliert ansteuern kann. Gedacht wäre, dass ich das mittels Array (uint8_t LCD[20][2]) löse. [19][2] für den Hauptbildschirm und die anderen 2 Byte für die 12 Symbole. Einzelne Pixel wollte ich dann mittels Bitwise-Operator manipulieren.

Ein separaten Treiber wollte ich mangels Platzprobleme auf der potentiellen Platine und erhöhtem Stromverbrauch vermeiden.

Da die originalen Tamagotchis mit 3 Volt laufen, habe ich sowohl einen Arduino Uno (5V), als auch einen nachgebauten Nano mit “SAMD21” (3,3V) getestet, Ergebnis bei beiden das Gleiche…

UPDATE:
Ich bin mir zudem bewusst, dass die PINS von einem ATMEGA328 nicht ausreichen, es geht mir zunächst um die Ansteuerung mit Hilfe der Arduino-Software. Im späteren Schritt soll ein größerer Controller (eventuell ATMEGA1280-16AU) zum Einsatz kommen.

Freue mich auf Eure Hilfe :slight_smile:

Liebe Grüße
Peedy92

DinkieDinoLCD.pdf (225 KB)

LCD displays müssen unbedingt mit Wechselspannung ohne Gleichspannungsteil angesteuert werden da sich ansonsten die Flüssigkristalle zersetzen.
Lies Dir mal die Datenblätter der CD4054 / CD4055 / CD4056 durch.
Grüße Uwe

Daher nehmen alle ein LCD mit Controller.

Mit einem "Nokia5110" LCD in 84x48 pixel Vollgrafik solltest du dich retromäßig voll austoben können.

Es gibt auch einen AVR Controller (198?) der Hardware für die Ansteuerung eines LCD Displays enthält. Er kam letztes Jahr bei einer Heizungsregelung zum Einsatz.

So, sorry für die späte Rückmeldung, komme leider nicht eher zu diesem Hobby.

uwefed:
LCD displays müssen unbedingt mit Wechselspannung ohne Gleichspannungsteil angesteuert werden da sich ansonsten die Flüssigkristalle zersetzen.
Lies Dir mal die Datenblätter der CD4054 / CD4055 / CD4056 durch.
Grüße Uwe

Ich habe mir das Datenblatt angesehen, allerdings bin ich gelernter Industriekaufmann und verstehe ehrlich gesagt nicht jedes Detail. Meintest Du mit Deiner Aussage "ohne Gleichspannungsanteil", dass ich +5V und -5 Volt benötige, damit ich in Summe 0V habe? Lässt sich das dann mit dem Arduino realisieren? Im Originalen ist ja auch nur ein Chip, der alles steuert (in einem anderen Forum gelesen, wurde der 4-Bit-Controller E0C6S46 von Epson verwendet: https://download.epson-europe.com/pub/electronics-de/asmic/4bit/62family/technicalmanual/tm_6s46.pdf)

michael_x:
Daher nehmen alle ein LCD mit Controller.

Mit einem "Nokia5110" LCD in 84x48 pixel Vollgrafik solltest du dich retromäßig voll austoben können.

Danke für den Tipp, mit diesem Display habe ich auch schon erfolgreich eins erschaffen :slight_smile: Aber es ist mehr als doppelt so groß wie das Original und eckig, daher bin ich mit dem Ergebnis noch nicht ganz zufrieden. Das muss besser gehen. Schade, dass es den PCF8544 nicht separat als Chip zu kaufen gibt...

DrDiettrich:
Es gibt auch einen AVR Controller (198?) der Hardware für die Ansteuerung eines LCD Displays enthält. Er kam letztes Jahr bei einer Heizungsregelung zum Einsatz.

So etwas wäre natürlich klasse, wenn der Controller auch relativ klein wäre. Hättest Du mir eventuell bei Gelegenheit noch die genaue Bezeichnung? Mit "AVR 198" kann ich nicht viel finden :frowning:

Viele Grüße und schönen Sonntag noch...
Peedy92

Hallo peedy92,

da hast Du Dir ja was ganz schön kniffliges ausgesucht.

peedy92:
Für mein Verständnis ist es nun so, dass jeweils für 1/100s einen Plus- und einen Minuspul habe. D.h. es dürfte nur ein einzelner Pixel schwarz sein, da nur dieser einen "geschlossenen Kreislauf" hat. Praktisch ergab es jedoch ein anderes Ergebnis:

  1. (Anhang 4)
    Angeschlossen sind T4 + T6. Es müsste dann doch eigentlich nur der Pixel LINKS OBEN schwarz sein und nicht die ganze erste Spalte ?!

  2. (Anhang 6)
    Angeschlossen sind T4 + T5. Müsste jetzt nicht nur das "Trinken"-Symbol leuchten?

Auch habe ich bereits von dem Begriff "Backplane" gelesen, aber das bezieht sich - soweit ich es verstanden habe - nur auf LCDs, die pro Pixel bzw. Segment einen eigenen Anschluss haben, was hier nicht der Fall ist.

Da dachte ich zuerst das es eventuell reicht mehrere Anschlüsse gleichzeitig umzuschalten, bin aber daran dann gescheitert. Dann wird zwar der Punkt links oben angezeigt, aber es werden dann in den anderen Spalten immer die ersten 2 Reihen angezeigt. Ich habe dann mal eine Suchmaschine bemüht und nach LCD multiplexing gesucht. Da habe ich dann festgestellt das es ohne viel externe Beschaltung wohl mit dem Arduino nicht geht. Da wird je nachdem ob ein Pixel aktiv ist oder nicht die volle Spannung oder Bruchteile der Spannung draufgeschaltet.

oder besser (aber teilweise schlechtes Deutsch)

https://antwortenhier.me/q/wie-heisst-diese-art-von-nur-ziffern-lcd-60523096390
Da gibt es unten eine Tabelle mit den notwendigen Spannungsleveln.

Ich würde sagen, ohne Riesenaufwand leider nicht möglich.

Gruß, Jürgen

Katsumi_S:
Hallo peedy92,

da hast Du Dir ja was ganz schön kniffliges ausgesucht.

Da dachte ich zuerst das es eventuell reicht mehrere Anschlüsse gleichzeitig umzuschalten, bin aber daran dann gescheitert. Dann wird zwar der Punkt links oben angezeigt, aber es werden dann in den anderen Spalten immer die ersten 2 Reihen angezeigt. Ich habe dann mal eine Suchmaschine bemüht und nach LCD multiplexing gesucht. Da habe ich dann festgestellt das es ohne viel externe Beschaltung wohl mit dem Arduino nicht geht. Da wird je nachdem ob ein Pixel aktiv ist oder nicht die volle Spannung oder Bruchteile der Spannung draufgeschaltet.

Why multiple bias voltages are required to drive LCD? - Electrical Engineering Stack Exchange

oder besser (aber teilweise schlechtes Deutsch)

Wie heißt diese Art von Nur-Ziffern-LCD?
Da gibt es unten eine Tabelle mit den notwendigen Spannungsleveln.

Ich würde sagen, ohne Riesenaufwand leider nicht möglich.

Gruß, Jürgen

Hallo Jürgen,

danke für Deine ausführliche Antwort. Ja, es ist eine Herausforderung, aber man wächst ja eigentlich mit den Aufgaben.

Deine Links habe ich mir angesehen, das Ganze scheint ja doch deutlich komplexer zu sein, als erwartet. Ich hatte die Hoffnung auf eine "einfache Lösung", da der Orginalhersteller es ja auch irgendwie per Software geschafft hatte (und auch billige Klone).

Nunja, aktuell überschreitet es meine Kompetenzen, d.h. ich werde das Projekt vorerst auf Eis legen.

Allerdings möchte ich hier noch eine eventuell interessante Feststellung loswerden: Wenn ich das LCD mit dem Leitergummi nur leicht auf die Kontakte drücke, verschwinden die "falschen Pixel" fast. Sie sind noch zu sehen, aber deutlich schwächer (bei gleichem Versuchsaufbau wie bei dem ersten Post).

Nunja, vielleicht ist ein Custom-LCD mit im Glas integrierten Treiber in ein paar Jahren rentabel...

Danke für die Beteilung :slight_smile:

Viele Grüße
Peter

peedy92:
So etwas wäre natürlich klasse, wenn der Controller auch relativ klein wäre. Hättest Du mir eventuell bei Gelegenheit noch die genaue Bezeichnung? Mit "AVR 198" kann ich nicht viel finden :frowning:

Deshalb habe ich ja "Heizungsregelung" angegeben, nach der Du im Forum suchen kannst.

Kannst du dir mal den HT1621 anschauen, ob der geht (oder eine größere Variante davon).

Der ist mit 300µA angegeben. Ich frage mich, ob man da mit einem AVR hinkommt.