Hi Leute !!!
Ich habe einen Panasonic TX-P50GW10 Plasma TV, Baujahr 2009. Unter
anderem bei Modellen dieses Baujahrs hat Panasonic eine Schaltung
integriert, die in Abhängigkeit der Betriebsstunden und Einschaltzyklen
eine Alterung der Plasmazellen durch kontinuierliche Erhöhung deren
Grundspannung zu kompensieren versucht. Das Panel wird also über die
Jahre immer "heller", was insbesondere beim Betrieb in vollständig
abgedunkelten Räumen bei dunklen Bildanteilen auffällt. Kurzum, der
Schwarzwert leidet, d. h. schwarz wird dann langsam eher zu dunklem
grau.
Irgendwann haben dann findige Tüftler herausgefunden, wie man diesen
Prozess beeinflussen, d. h. von vornherein verhindern und sogar
rückgängig machen kann. Dazu muß man lediglich die Werte für die
Betriebsstunden sowie Einschaltzyklen, welche in einem EEPROM auf dem
A-Board des TV gespeichert werden, auf 0 zurücksetzen. Der Speicher ist
per I2C über den sogenannten "Service Connector" an der TV-Rückseite
ansprechbar.
Der AVS-Forum-User mironto hat dazu nachfolgend eine sehr ausführliche
Anleitung verfaßt. Er bedient sich dabei eines Arduinos.
http://panasonic.mironto.sk/
Und sein Kollege audiodane bietet sogar ein selbstentwickeltes Modul
zum Kauf an (PMCv2: http://audiodane.dandk.org/pmcv2/), welches am
Service Connector angesteckt auf Dauer am TV verbleiben kann und die
"Black Level Restoration" immer dann automatisch durchführt, wenn die
Betriebsstunden wieder einen bestimmten Wert erreicht haben. Da ich
jedoch noch ein paar ATTiny µCs rumliegen habe, mit denen das Ganze ja
eigentlich auch problemlos funktionieren müßte, sollte ich mir
entsprechend die zumindest für das PMCv2 fällige Investition sparen
können!? Soweit meine Überlegung.
Also habe ich mir den Arduino-Code
http://panasonic.mironto.sk/software/code_read_eeprom/
und die Erläuterungen dazu
http://panasonic.mironto.sk/testing/basic_testbed/
in mirontos Anleitung angeschaut, um die Adresse des EEPROM sowie die
Speicheradressen, die modifiziert werden müssen, in Erfahrung zu
bringen.
> EEPROM-Adresse: 1010000> Speicherbereich: Bytes 1 - 7
Damit habe ich nachfolgend einen BASCOM-Code geschrieben, der die ersten
10 Bytes des EEPROM ausließt und anschließend im interne EEPROM des
ATTiny13A speichert. Diesen lese ich dann mit dem PC aus. Bis dahin hat
das Ganze problemlos funktioniert, d. h. der TV schaltet in den
Service-Modus und ich bekomme auch 10 Werte aus dem EEPROM. ABER: Diese
Werte können so nicht stimmen!
0x02 0x38 0x11 0x10 0xFF 0xFF 0xFF 0x51 0x10 0x9D
Betriebsstunden (Bytes 1-2): 0x3811 -> 14353
Einschaltzyklen (Bytes 5-6): 0xFFFF -> 65535
Im Service-Menü des Fernsehers kann man sich die beiden Werte auch
anzeigen lassen:
Betriebsstunden: 15251
Einschaltzyklen: 3419
Aus Erfahrungsberichten geht zwar durchaus hervor, daß die Werte nicht
immer exakt übereinstimmen (aus welchen Gründen auch immer), d. h. bei
meinem Betriebsstundenwert könnte man wohl noch ein Auge zudrücken, die
Einschaltzyklen mit 65535 sind allerdings sehr unwahrscheinlich.
Außerdem kann ich die Werte auslesen wann ich will, sie bleiben stets
unverändert. Demnach vermute ich, daß hier irgendwas nicht stimmt. Und
da ich auch zum ersten Mal mit dem I2C-Bus zu tun habe, wäre es ja
durchaus denkbar, daß ich vielleicht im BASCOM-Code einen Fehler gemacht
habe.
Kurzum: Wenn jemand hier evtl. so freundlich wäre, mal einen Blick auf
meinen Programmcode zu werfen, würde mich das sehr freuen :-).
Vielleicht habt Ihr ja auch noch andere Hinweise, die es in Bezug auf
I2C zu beachten gibt.
Grüße,
The SphereX
Rainer U. schrieb:> bei Dir A0 hex ?
0xA0 bzw. 0x50 wäre eine typische EEPROM Adresse für die 24CXX Reihe,
das könnte also stimmen.
Der Lesevorgang einer beliebigen Adresse bei diesen EEPROM ist aber
nicht ganz ohne. Man schreibt mit der Schreibadresse den Addresspointer
und liest dann per ' re-issued Startcondition' und Leseadresse die
Daten. Zwischen Adresspointer schreiben und Lesevorgang ist eine STOP
Bedingung u.U. schädlich. Anhängend die Sequenz für Random Read.
Ob Bascom damit klar kommt, ist die Unbekannte, ebenso, ob die interne
Schaltung der Glotze sich das so gefallen lässt.
@ Rainer Unsinn
" ... EEPROM-Adresse: 1010000 ... von falscher Adresse gelesen? das oben
wäre 50 Hex, bei Dir A0 hex ? ... "
Hier war ich etwas verunsichert, ob nun eine 7 Bit oder 8 Bit
Adressierung anzuwenden ist. In der Anleitung von mironto wird ja 7
Bit adressiert, also mit &H50 (Schreibadresse) und &H51 (Leseadresse).
Auch in der BASCOM-Hilfe ist im Zusammenhang mit I2C von 7 Bit die Rede.
Wenn ich allerdings tatsächlich &H50 und &H51 verwende, bekomme ich
zehnmal 0xFF, also quasi keine Werte beim EEPROM-Auslesen. Spreche ich
den EEPROM mit &HA0 Und &HA1 an, erhalte ich die obengenannten Werte,
die aber wie gesagt nicht zutreffend sind.
@ mschoedlgen
" ... Man schreibt mit der Schreibadresse den Addresspointer und liest
dann per ' re-issued Startcondition' und Leseadresse die
Daten. Zwischen Adresspointer schreiben und Lesevorgang ist eine STOP
Bedingung u.U. schädlich. ... "
Und genau so dachte ich eigentlich arbeitet mein Programmcode die ganze
Sache auch richtigerweise ab. Den Code habe ich übrigens auch nur von
http://rn-wissen.de/wiki/index.php?title=Bascom_und_I2C_EEprom
und dann entsprechend angepaßt.
@ jojos
" ... im org. Code wird addr 0..9 gelesen, du liest 1..10, das dürfte
ein Unterschied sein. ... "
Hier war ich mir auch nicht ganz sicher, wie nun gezählt wird. Im
Zweifel verschiebt sich das Ganze aber auch nur ein Byte nach rechts.
Auch dann stimmen die ausgelesenen Werte leider nicht.
" ... Was macht: I2cwbyte eprom_adress-1 ? ... "
Zumindest in meinem Programmcode NICHTS, denn dort kommt diese Zeile gar
nicht vor ;-).
Grüße,
The SphereX
The SphereX schrieb:> " ... Was macht: I2cwbyte eprom_adress-1 ? ... ">> Zumindest in meinem Programmcode NICHTS, denn dort kommt diese Zeile gar> nicht vor ;-).
das war auch ein Vorschlag das so zu machen um die Bytes der addr 0..9
zu erhalten. Aber wie du schon geschrieben hast verschiebt es nur die
erhaltenen Bytes um 1 und wenn es trotzdem nicht passt muss was anderes
faul sein.
Hast du die Leseroutine mal an einem anderen eeprom getestet?
The SphereX schrieb:
$regfile = "attiny13.dat" ' ATMEL
ATTiny13A @ 9,6 MHz
$crystal = 9600000
Bist du dir da sicher? 9,6 MHz ist eine etwas ungewöhnliche
Taktfrequenz.
@ jojos
" ... das war auch ein Vorschlag das so zu machen ... "
Ach so, dann habe ich Dich falsch verstanden ;-).
" ... Hast du die Leseroutine mal an einem anderen eeprom getestet? ...
"
Leider habe ich keinen EEPROM zur Verfügung. Aber ich sehe schon, daß
mir wohl keine andere Wahl bleibt, als mir z. B. einen 24C32 zu besorgen
und das Ganze erst mal damit zu testen. Gerade die Schreibroutine, also
das worum es bei dem ganzen Projekt eigentlich geht (Reset auf 0), werde
ich unter diesen unsicheren Voraussetzungen mit Sicherheit nicht direkt
am TV ausprobieren. Ich will ja schließlich noch 'ne Weile was von dem
guten Stück haben ;-).
@ Albert
" ... Bist du dir da sicher? 9,6 MHz ist eine etwas ungewöhnliche
Taktfrequenz. ... "
Wieso ungewöhnlich? Das ist der Standard-Takt des ATTiny13A (ohne
CKDIV8).
Grüße,
The SphereX
The SphereX schrieb:> Leider habe ich keinen EEPROM zur Verfügung.
Hast du einen Monitor mit DVI Anschluss? Die haben ein eeprom drin,
Stichwort 'EDID'. Das kann man über den DVI Stecker mit 5V versorgen und
an die SCL/SDA Leitungen anklemmen. Was in dem eeprom drin steht bekommt
man über Tools für Windows/Linux raus.