Forum: Projekte & Code [C / AVR] Mein Code für Opel-TID Ansteuerung


von Max D. (max_d)


Angehängte Dateien:

Lesenswert?

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.

von Philipp X. (caradhras)


Lesenswert?

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...

von Max D. (max_d)


Lesenswert?

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
Noch kein Account? Hier anmelden.