Ich hab mir für ein aktuelles Projekt (Nachlaufsteuerung für mein Autoradio) eine Ansteuerung für ein Opel TID gebastelt. Das ganze läuft jetzt seit einer Woche in meinem Astra F problemlos (bis auf ein getoastetes Relais :P. Das Nachlaufprojekt an sich ist aufgrund einiger last-minute Anpassungen ein ziemlicher Spagetticode und deswegen nicht enthalten. Der "Treiber" für das TID ist aber noch relativ sauber. Das timing hab ich hier erklärt gefunden: http://wiki.carluccio.de/index.php/Opel_TID und selbst in C nachgebaut. Nachdem das ursprünglich nicht für die Öffentlichkeit gedacht war hab ich mit Kommis bisschen gegeizt, aber die Funktionalität ist ja eher trivial (I²C mit bisschen MRQ Gewackel). In der header-datei muss man eigtl. nur auswählen ob man ein 8 oder 10 stelliges TID hat (testen konnte ich aber nur mit 8, das andere ist nur aus der Doku geholt, aber der Unterschied ist minimal) und die Pins definieren. Das Interface zur main() besteht aus 6 Funktionen: tidOn() schaltet das TID in "Radiomodus" (AA an), durchläuft die erforderlichen Fehlersuche-Schritte (an den Pins-rumwackeln siehe carluccio) und führt einmal tidRefresh() aus, damit das Display mit sinnvollen Daten gefüllt ist. tidDate() schaltet nur die "Zündung" für das TID ein und bringt es so dazu das Datum anzuzeigen. tidOff() macht "Zündung" und "AA" aus, damit geht das TID in den normalen Schlafmodus. tidDisplay() erwartet einen (null terminierten) String und ein 2/3 Byte (je nachdem ob 8 oder 10 Stellen) großes Array in dem die Bits entsprechend der Erklärung auf der carluccio Seite gesetzt sind. Die Parität wird (bei Bedarf) selbsttätig vervollständigt. Hier sei gesagt, dass mein 8er TID nur Großbuchstaben anzeigt, Kleinbuchstaben ercheinen als leer Stelle. tidRefresh() schreibt den in dem Buffer gelagerten Datensatz (nochmal) in das TID rein. Das will nämlich alle paar Sekunden neue Daten haben (fragt mit nem low-puls an MRQ auch nach). Man kann (wie ich in meiner Radio-Steuerung) auch MRQ ignorieren und einfach oft genug neu schreiben. Der Buffer ist für mein 8 stelliges TID mit "WELCOME" vorinitialisiert, wenn das jemand anpasst (speziell auch für 10 Stellen), dann muss derjenige die parität selber berechnen (die wird nur einmalig beim Eintragen via tidDisplay() berechnet) und die bits schieben (mach sonst auch das tidDisplay() für den user). Die Funktionen sind NICHT gegen Interrupts oder dergleichen geschützt, also aufpassen wenn man in nem Interrupt das refresh macht (dass gibt dann richtig lustige verquerungen). Wer will kann ja noch ne semaphore um die Funktionen basteln. Ich hab in meinem Projekt den Watchdog an, der zerrt dann den µC aus einem potentiellen dead-lock raus. Wenn jemand Fehler in dem Code findet, dann darf er die gerne korrigieren und den neuen Code wieder hier posten. Bei mir funktioniert der Code auf jeden Fall mit meinem acht-stelligen TID zuverlässig.
Schön,dass du das Projekt noch veröffentlichst! :-) ich fahre auch noch mit einem alten Opel herum, da könnte man sicher was machen...
Naja, selbst in den neueren G-Astras is ja noch das selbe Protokoll zum TID in Betrieb (nur dass da dann ungetestete 10 Stellen drin sind, sollte aber (wenn überhaupt) nur minimale Anpassungen benötigen). Was ich vergessen hatte in dem Post oben zu schreiben: Die AA und Zündungs-Eingänge am TID wollen +12V sehen. Ich mach das durch NPN+PNP Open-Collector Konstrukte (der Stromfluß is minimal). Wenn man das TID schon raus hat (sind ja eh nur 2 Schrauben), dann ist es ne gute Idee gleich die ineffizienten und heißen (bei meinen war richtig der Sockel verkohlt) Glühlampen durch LEDs zu ersetzen. Ich hab richtig hübsche blau-grüne 3528er (zwei pro Sockel) drinnen, damit kann man das Ding auch endlich mal bei Tag lesen ;).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.