TID - modding. Verbrauch/Geschwindigkeit/etc. anzeigen
Hallo,
ich möchte am TID von meinem Opel Corsa B, benutzerdefinierte Infos anzeigen lassen.
Ich weiss, dass dieses Thema hier oft diskutiert wurde und viele nützliche Seiten die es dazu gab scheinen nicht mehr zu existieren, mit ein paar Ausnahmen.
Daher bin ich erstmal am Recherchieren.
Ziel ist es erstmal:
- Benutzerdefinierten Text anzeigen lassen
- Geschwindigkeit / Drehzahl anzeigen lassen
- Verbrauch anzeigen lassen
Was daraus dann resultiert wie Höchstgeschwindigkeit / Tagesstrecke / durchnittsverbrauch usw. liegt dann eher an des Software.
Als erstes gehts mir darum ob man all diese Werte am TID anschluss bekommen (oder zumindest in der Nähe z.B. am Diagnosestecker bekommen kann) oder ob man z.B. zwecks verbrauch und Umdrehungszahl irgendwelche Leitungen im Motor selber anzapfen muss.
Als zweites wird viel darüber berichtet dass das TID an sich programmierbar ist. Das soll dazu wichtig sein das Verhalten des TID´s bzw wie es bestimmte Daten auswertet zu ändern also lediglich das Verhalten des TID´s zu ändern. Angeblich klappt es mit Tech2 andere meinen wiederum es kann nur die Opel Werkstatt tun. Was stimmt nun und ist es überhaupt so wichtig für solches Vorhaben?
Ich habe schon diese Seiten hier zusammengetragen. Und hoffe, dass hier das Thema vorangebracht bzw. "wiederbelebt" werden kann für diejenigen die noch einen Corsa B (sicherlich nicht nur auf dieses Modell beschränkt) besitzen und an sowas interessiert sind. Die Webpages auf web.Archive existieren real nicht mehr, wurden jedoch glücklicherweise vom Archivdienst "gerettet".
http://www.rolandgruber.de/OpelTID_e.htm (Open Source)
http://wiki.carluccio.de/index.php/Opel_TID (Open Source)
http://web.archive.org/.../index.htm (Kommerziell und nicht mehr verfügbar)
http://web.archive.org/.../display.htm (Open Source)
65 Antworten
Da ich nun mit den TÜV relevanten Sachen durch bin und wieder 2 Jahre bekommen hab 😁
würd ich gern diesen Thread nochmal wiederbeleben und sich diesen kleineren Sachen widmen.
Es wäre top wenn sich nochmal die Leute die schon eigene erfolge und Ideen damit hatten sich hier nochmal einklinken würden.
Wenn ich mich recht erinnere war das @Gorgeous188 und @michaela1234
Es waren zwar 2 verschiedene Programmiersprachen aber das ist erstmal egal.
Die "C++" Sprache ist wohl Anfängerfreundlicher. Darüberhinaus kann man da die komplizierte Ansteuerungslogik des Displays (die schon existiert?) in eine Bibliothek oder Ähnliches verpacken was dann den Entwurf oder Ideenumsetzung deutlich vereinfacht da man im Programm lediglich die funktionen aufrufen muss.
Wie das bei "Assembler" ist weiss ich nicht. Da habe ich mal lediglich ein bis zwei stunden absolviert und da ging es lediglich darum wie man eine LED aufleuchten lässt. Und allein dieser Schritt waren schon 5 - 10 Zeilen Code 😁
Dass es viel mächtiger (wenn mans kann) als C++ ist da man auf Controllerebene programmiert sehe ich schon ein, aber hier wird man hoffentlich (erstmal) mit C++ auskommen.
Ich würd mich erstmal auf die Anzeige der Geschwindigkeit (das Signal liegt ja am TID schon vor) und Sachen wie Benutzerdefinierbare Texte. Die man vielleicht sogar IM Auto ohne das Ding umzuprogrammieren, mit Tasten anpassen oder neu anlegen kann etc.
Dann könnte man schauen wie man Funktionen wie Kilometerzähler / Umdrehungszahl / Öl-Temperatur / Datum etc. implementiert. Einige Ideen hätte ich da noch.
Was war jetzt die Frage? 😁
Prinzipiell: C++ ist turingmächtig, alles was ein Computer berechnen kann lässt sich da programmieren.
Um beim Arduino eine LED anzuschalten reicht eine Zeile: digitalWrite ( #digitalePinNummer, HIGH );
Mittels einer Taste zwischen verschiedenen Anzeigetexten umzuschalten ist möglich, erfordert aber schon etwas Programmieraufwand im Zusammenspiel mit der Geschwindigkeitsanzeige. Nebenläufigkeit und Interrupts waren mir bisher zu aufwändig, deswegen habe ich halt einmal nach dem Zählen der Tachoimpulse nachgesehen, ob gerade eine Taste gedrückt ist. Damit lässt sich durchschalten.
Einen benutzerdefinierten Text im Auto programmieren geht auch, erfordert aber nochmal mehr Aufwand. Du brauchst mindestens zwei Tasten, so wie auch das TID. Sonderlich komfortabel ist es dann auch noch nicht. Nicht zuletzt der Programmieraufwand. Rein vom Gefühl würde ich sagen, dass diese Umsetzung mit Assembler einfacher geht als mit C++.
Umdrehungszahl geht nicht, weil der Ardunio nur einen Inkrementcounter hat. Der hat nur einen Eingang zum Zählen von Impulsen, entweder Geschwindigkeit oder Motordrehzahl. Nicht gleichzeitig. Wenn es unbedingt gewünscht wird, muss ein Schiebeschalter her, der am Pin die beiden Leitungen anschließt bzw trennt. Geht zB auch über ein Relais.
Kilometerzähler erfordert wieder Nebenläufigkeit, und beißt sich mit der Geschwindigkeit. Beides in einer Anwendung geht wieder einfacher mit Assembler.
Aber ganz ehrlich? Das ist schon fortgeschrittenere Programmierung, für die der Arduino auch gar nicht entwickelt wurde.
Öltemperatur? Kinderspiel, wenn du die Kennlinien vom Sensor hast.
Datum? 1x am TID auf die Datumstaste drücken, das ist unabhängig und funktioniert auch mit Werksradio.
Hat jemand nen Vorschlag wie man die Drehzahl messen kann? Momentan ist mir die Auflösung zu grob. Als Quelle hab ich leider nur das Tachosignal.
Alleine aus dem Tachosignal kannst du die Drehzahl nicht berechnen. Entweder vom Getriebe den Gang erfahren, oder das Drehzahlsignal abgreifen. 50 kann ich schließlich im 2. und im 5. Gang fahren.
Ähnliche Themen
Meine mit Tachosignal, das vom Drehzahlmesser. Mein Arduino lässt sich aber nicht mehr programmieren. KP wieso.
Der Arduino hat nur einen Increment Counter. Du kannst nur entweder das Tachosignal oder das Drehzahlsignal zählen, für beides gleichzeitig gibt es einen Eingang zu wenig.
schon klar. Die Drehzahl zeigt ehr mir an.. zumindest die ersten beiden ziffern. Jetzt wollt ich das fertig machen und er reagiert nicht mehr.
Generell gilt: lass dir erstmal die Messerwerte per Serial.write() an den Laptop schicken. So weißt du wenigstens, ob es an der Messung oder der Übertragung liegt.
Hast du den Arduino von der Karosseriemasse getrennt, bevor du das USB Kabel anschließt?
Ich hab mir da mittlerweile was zusammengebastelt. Und schicke noch einfach nur vordefinirte Variabeln.
Wie z.B. eine Variable die in einer scheife eingebaut ist und jede sekunde hochzählt und den Inhalt an das TID ausgibt.
Bis jetzt bin ich eher am Verzweifeln weil die Kommunikation mit dem Display alles andere nur nicht stabil ist.
Heißt jede menge Aussetzer - jede volle minute wird das display kurz gelöscht - Display friert willkührlich ein usw. usf.
Und das bei einer Anzeige (nur) im Sekundentakt.
Das TID8 benötigt alle 100ms neue Daten, das TID10 alle 30ms. Auch sind die Timings im Protokoll für beide unterschiedlich, deswegen die richtige Version der Bibliothek verwenden.
Bei mir hat die Bib nicht richtig funktioniert, und ich fand sie zu unpraktisch für die Geschwindigkeitsanzeige, deswegen habe ich die Low Level Funktionen weitere vorne im Verlauf verwendet.
Sieh dir mal die Funktion tid_byte() an. Wenn da bei den Delays 10, 180, 180, 300, 180, 100, 300 steht ist es fürs TID8. Fürs TID10 musste ich auf 5, 50, 50, 150, 150, 100, 150 runtergehen. Die defines sind etwas doof benannt, gebe ich zu.
Ich habe die TID12 Bibliothek, da steht völlig was anderes.
Scheinbar werden die Werte erst da berechnet je nach dem welche "Geschwindigkeitsvariabel" man in der config setzt.
Btw wie spricht man das Low Level mäßig an?
Das habe ich auch schon überlegt, denn dann hat man nen schlanken Code genau auf seine Bedürfnisse angepasst der auch funktioniert.
Habe auch schon geschaut, wie die Buchstaben zum ASCII Code konvertiert werden, das aber nicht ganz verstanden, Wäre gut um einmal die ganze ASCII Tabelle durchzuprobieren welche Zeichen angezeigt werden können.
Blätter im Arduino Forum weiter nach vorn. Am Anfang gab es die nackten Funktionen fürs TID8, ich habe den Quelltext fürs TID10 hochgeladen.
Zitat:
Wäre gut um einmal die ganze ASCII Tabelle durchzuprobieren welche Zeichen angezeigt werden können
Habe ich doch schon längst gemacht.
Ich wollte an dieser Stelle den Code anwenden:
http://forum.arduino.cc/index.php?...
Du scheinst da die Funktionen direkt aufzurufen. Leider kommen bei mir immer kompilierungsfehler 😁
Mit TID1.1 scheint das da geklappt zu haben wie ich sehe, dann werde ich erstmal das probieren.
Den Rat unter "display_message()" ein cycle(); am Anfang zu setzen habe ich bei TID1.2 bereits versucht. Das hat nicht viel geholfen.
Also denk ich dass es wirklich besser wird, erstmal Low-Level mäßig anzufangen und dann vielleicht eigene "hilfmittel" zu codieren um Textstrings anzuzeigen.
Z.B. diese Scrollfunktion würde ich nichtmal wirklich brauchen, außerdem ist es eine der größeren Fehlerquellen denk ich.