Forum: Mikrocontroller und Digitale Elektronik Ideensuche Autodetektion LCD controller ST7036


von andi6510 (Gast)


Lesenswert?

Liebe Mikrocontrollerinfizierte!

Ich suche gerade nach einer guten Idee, wie ich einen speziellen LCD 
controller automatisch detektieren kann. Hintergrund ist das folgende:

Eine Firmware soll alternativ mit standard HD44780 basierten LCD Modulen 
aber auch mit Modulen, die den ST7036 verwenden (z.B. die DOGM Module) 
zurecht kommen. Der ST7036 ist weitgehend kompatibel zum 44780, braucht 
aber zusätzlich eine spezielle Initialisiserungs-Sequenz, damit 
überhaupt was auf dem Display erscheint. Damit die Standard-Module jetzt 
nicht von dieser Initialisiserung in einen undefinierten Zustand 
geschickt werden, möchte ich vorab den ST7036 als solchen detektieren. 
Das ganze soll also zur Laufzeit erfolgen und nicht zur compile-Zeit 
(z.B. über eine spezielle Firmwareversion).

Hat jemand ne Idee, wie ich das bewerkstelligen könnte???

Andi

von Spess53 (Gast)


Lesenswert?

Hi

Da das kaum die gleich Hardware sein kann, opfere einen freien Pin.

MfG Spess

von andi6510 (Gast)


Lesenswert?

Pins sind sehr knapp. Gefragt ist eine reine Softwarelösung. 
Möglicherweise wäre eine Konfiguration im EEPROM (ist ein ATMEGA) ne 
Lösung, aber auch das ist aus anderen Gründen schwierig...

von void (Gast)


Lesenswert?

Hallo andi6510,

bedeutet das, ...

> Der ST7036 ist weitgehend kompatibel zum 44780, braucht
> aber zusätzlich eine spezielle Initialisiserungs-Sequenz, damit
> überhaupt was auf dem Display erscheint.

...dass du den EXT pin des ST7036 falsch beschaltet hast?

Im "Normal mode" ist der ST7036 noch viel kompatibeler zum HD44780. ;-)

von andi6510 (Gast)


Lesenswert?

naja, der controller ist im LCD modul fest verbaut - da komme ich nicht 
ran! Leider auch nicht an den ext-pin...
Es geht konkret um das modul hier: DOGM162 
(http://www.lcd-module.de/pdf/doma/dog-m.pdf)... wenn jemand weiss, wie 
man da an den Pin rankommt...

von void (Gast)


Lesenswert?

Hallo Andi,

schade, bei dem DOGM162 hast du wohl keine Chance an den ext pin des 
ST7036 zu kommen. Und zu allem Übel gib es auch keine Read-Instruction 
welche sich im "normal" und "extended" mode unterscheiden. Damit 
scheidet automatische Erkennung aus und es bleiben dir nur die gewünsche 
Konfig dem uC mitzuteilen. Also wie Spess schon sagte per Pin oder 
EEPROM. Auch wenn dir das nicht gefällt...

von andi6510 (Gast)


Lesenswert?

Ich bin ja immer der Meinung geht nicht gibts nicht :-)

Nach intensiverem Studium des Datenblattes kam mir jetzt folgende Idee:

1 instruction table umschalten auf 0,0
2 set CGRAM addr 0
3 write RAM 0xAA
4 instruction table umschalten auf 0,1
5 set ICON RAM addr 0
6 write RAM 0x55
7 instruction table umschalten auf 0,0
8 set CGRAM addr 0
9 read RAM
result = 0xAA -> ST7036
result = 0x55 -> HD44870

Funktionsweise:
nach Umschalten auf die zweite instruction table (4) kann beim ST7036 
statt dem CGRAM das ICON RAM beschrieben werden - der HD44870 kennt die 
zweite instruction table gar nicht und würde daher weiterhin das CGRAM 
beschreiben.
Beim späteren lesen des CGRAM (9) ist beim st7036 also noch das bei (3) 
geschriebene 0xAA im CGRAM, beim 44780 aber das bei (6) geschriebene 
0x55

Könnte das so funktionieren???

von void (Gast)


Lesenswert?

Andi schrieb:
> Ich bin ja immer der Meinung geht nicht gibts nicht :-)

Verdammt Andi, du hast ja Recht!

Ich hatte beim ersten überfliegen des Extended Modes schon das ICON RAM 
als Unterschied ausgemacht, aber nicht direkt erkannt wie man es 
misbrauchen kann. Deine Idee und die Beschreibung zur Funktionsweise 
sind vollkommen korrekt.

Kurzgefasst basiert deine Idee darauf, dass die Instruktionen "Set CGRAM 
Address" und "Set ICON Address" einen gemeinsamen Instruction-Code haben 
(0b0001), aber über verschiedene Instruction tables (welche der HD44780 
nicht hat) erreicht werden können.

> Könnte das so funktionieren???

JA!

von andi6510 (Gast)


Lesenswert?

So, um den fred jetzt endgültig zu den Akten legen zu können:

Es funktioniert! Und zwar fast genau so wie oben beschrieben! Man muss 
nur beachten, dass man den wert 0xAA und 0x55 gar nicht in das ICONRAM 
schreiben kann, da dort jeweils nur 5 bit vorhanden sind. In meinem Code 
wird jetzt eine 7 stat der AA geschrieben und eine 4 statt 55. Dann 
steht beim auslesen des CGRAM nachher 7 für st7036 und 4 für hd44780. 
Schön!

Als letztes wollte ich noch support den KS0073 hinzufügen, habe aber 
leider momentan kein display mit diesem Controller... . Der KS0073 hat 
auch ein ram für ICONS (heisst da SEGRAM). Die extended commands sind 
auf diesem controller aber wohl über ein anderes bit erreichbar, so dass 
man dort analog wie beim 3076 verfahren könnte...

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.