Mittns Can Sketch

  • Heute stelle ich ein weiteres Projekt vor.


    Ich habe mich mal ran gesetzt, einen Sketch zu erstellen, um mit dem Canbus Netzwerk ein wenig zu spielen, da ich noch einige Projekte bzgl. Steuerungen im Auto geplant habe und da kommt mir das gelegen.

    Der Spaßfaktor steht natürlich auch im Mittelpunkt. ^_^

    Später werde ich ggf. noch ein Programm veröffentlichen, welches die Bedienung, Diagnose und Reverse Engineering am PC erleichtert.

    Derzeit wird alles via Konsole in der Arduino IDE oder vergleichbares Terminal Programm gemacht.


    Der Sketch sieht hier und da noch etwas 'Wüst' aus, aber ich nutze auch mehrere Tabs und muss den Sketch in einer Datei zusammenbasteln.

    Ich habe hier und da einige Kommentare drin gelassen, damit man das eine oder das andere leichter nachvollziehen kann, wenn man selbst dran basteln möchte.


    Ich gehe mal von aus, dass hier und da noch Fehler auftauchen können und vermutlich auch werden aber so funktioniert Entwicklung nun mal.

    Solltet ihr was finden, lasst es mich wissen.

    Zukünftige Updates und Changelogs, findet ihr in der neuen Roadmap.


    Verdrahtung des Arduinos ist dieselbe wie hier:


    Später erstelle ich hier und da noch kleine Tutorials, wie ihr beispielsweise mit Diagbox oder im Auto, verschiedene Canbus Daten auslesen könnt.



    VORWORT : BITTE LESEN

    Da gerne vom eigentlichen Thema abgewichen wird, stelle ich ein paar Regeln, speziell für dieses Thema auf, damit das Thema sauber und übersichtlich bleibt.

    Wer sich nicht an die Regeln hält, dessen Beitrag wird kommentarlos gelöscht.

    1. Hier werden keine Fragen aka "Wie aktiviere ich dies, wie aktiviere ich jenes" gestellt.
    2. Phrasen wie "Geht nicht" oder "Ich hab ein Problem" werden nicht geduldet. Eine detaillierte Fehlerbeschreibung ist (wie überall) zwingend erforderlich.
    3. Fragen wie "Was macht der Sketch?" werden gelöscht, denn es wird alles in diesem Beitrag beschrieben, diese Frage ist also unnötig. -> Lesen hilft!
    4. Bei Problemen oder Informationen sind, je nach Situation, immer folgende Daten anzugeben:
    • Betriebssystem
    • Genutzte Software und Version
    • Arduino-Modell
    • Verdrahtung (ggf. Foto)
    • Schritte zur Reproduktion des Problems
    • Bisherige Lösungsversuche

    Soll heißen, in diesem Thema geht es ausschließlich um dieses Programm, die Funktionen und Funktionsweise, sowie die erforderliche und genutzte Hardware.


    Was macht dieser Sketch?

    Ganz einfach!

    Mit dem Sketch kann man Canbus Nachrichten zu diagnostischen Zwecken auslesen und auch Canbus Nachrichten senden.

    Unterstützt werden Single Frames und Multi Frames, wobei letzteres erstmals nur für's auslesen gilt.

    Des weiteren bietet der Sketch hier und da noch nützliche Funktionen, die ihr den Features entnehmen könnt.

    Minimale Systemvoraussetzungen

    • CPU: Mindestens 8Mhz / Optimalerweise 16Mhz
    • Programmspeicherplatz: 24Kb (23,590 Bytes)
    • Dynamischen Speicher: 15Kb (1471 Bytes)
    • Can Modul: MCP2515 Modul mit 8MHz oder 16MHz Kristalloszillator



    Features

    • Canbus: Nachrichten auslesen und in verschiedenen Formaten ausgeben
    • Sketch Einstellungen: Einstellungen können direkt im Arduino gespeichert werden und bleiben nach einem Neustart erhalten.
    • MAN-Filter: Can-ID's können einem Filter hinzugefügt oder entfernt werden, sodass diese nicht ausgegeben werden.
    • AUTO-Filter: Filtert automatisch alle ankommenden Can-ID's. Benötigte ID's können anschließend aus dem Filter entfernt und angezeigt werden.
    • Verschiedene Sprachen: Der Sketch unterstützt bisher 2 einstellbare Sprachen (Deutsch + Englisch) und kann im Laufe der Entwicklung erweitert werden (Übersetzer sind willkommen)
    • Dynamische Can-Modul Einstellungen: Can Geschwindigkeit und Bitrate kann während der Laufzeit geändert werden. (Kein erneutes flashen des Sketches erforderlich)
    • Ausgabe Format: Can Nachrichten können, je nach Einstellung, entweder RAW oder den Einstellungen entsprechend ausgegeben werden.
    • Eco-Disabler: !ALPHA! Deaktiviert den Eco Modus für 1 Stunde. Kompatibilität muss geprüft werden. (Unterstützer sind willkommen)



    PSA Kompatibilität:

    Single Frames senden:

    Das erste Byte (Full Data Length) wird automatisch berechnet, wenn man eine Can-Nachricht sendet.


    Single frames (1-7 Bytes) empfangen:

    Das erste Byte (Full Data Length) wird automatisch entfernt, wenn man eine Can-Nachricht empfangen wird.


    Multi frames (>7 Bytes) senden:

    Noch nicht unterstützt.


    Multi frames empfangen:

    FullData Length und Startbytes werden entfernt.

    Multiframes können als Einzeiler ausgegeben werden.

    (Frames können verloren gehen. Entwicklung läuft...)







    Sonstige Informationen & Hinweise

    :info: Information beim erneuten flashen des Sketches:

    Die Einstellungen im EEPROM bleiben auch beim erneuten flashen des Sketches erhalten.

    Es ist nicht auszuschließen, dass trotz interne Überprüfungen, durch Sketch-Updates, doch mal Komplikationsfehler auftauchen können.

    Sollte es Probleme mit zukünftigen Versionen geben, führt den Befehl clearEEPROM aus und löscht die Einstellungen.

    Danach werden die Standardwerte geladen.

    :pushpin: Das Programm wird dabei nicht gelöscht.




    How To Use

    Befehl Notiz / Beispiel Funktion
    >123:123 >CAN_TX:CAN_RX Ändert das ID-Pärchen, welches zum Senden und empfangen eines spezifischen Steuergeräts verwendet werden kann.
    Unabhängig des eingestellten ID-Pärchens, werden alle Can Frames empfangen.
    Wenn Can-Nachrichten geschickt werden, dann werden diese an die eingestellte CAN_TX ID gesendet.
    ? Zeigt Sketch-Informationen an
    wiring Zeigt Verdrahtungsinformationen zwischen Mikrocontrollers und MCP2515 Modul
    save
    Speichert Einstellungen im EEPROM des Mikrocontrollers.
    clearEEPROM
    Löscht das EEPROM des Arduinos.
    Alle gespeicherten Einstellungen gehen verloren. (Das Programm selbst bleibt davon unberührt!)
    showidpair Zeigt das gegenwärtig eingestellte ID Pärchen
    SETUP_MCP_BITRATE SETUP_MCP_SPEED:0
    SETUP_MCP_SPEED:1
    SETUP_MCP_SPEED:2
    Ändert zur Laufzeit die MCP2515 Bitrate.
    0 = 125Kbps / 1 = 250Kbps / 2 = 500Kbps
    (Nicht während der Diagnose empfohlen!)
    SETUP_MCP_SPEED SETUP_MCP_SPEED:0
    SETUP_MCP_SPEED:1
    Ändert zur Laufzeit die MCP2515 Frequenz. 0 = 8Mhz / 1 = 16Mhz
    (Nicht während der Diagnose empfohlen!)
    RAW_OUTPUT RAW_OUTPUT:true
    RAW_OUTPUT:false
    Aktiviert oder Deaktiviert den RAW Output
    HIDE_PSA_BYTES HIDE_PSA_BYTES:true
    HIDE_PSA_BYTES:false
    Aktiviert oder Deaktiviert die Ausgabe des ersten Bytes eines Single Frames oder Multi frames oder die ersten beiden Bytes eines Startframes (0x10)
    HIDE_KEEP_ALIVE HIDE_KEEP_ALIVE:true
    HIDE_KEEP_ALIVE:false
    Aktiviert oder Deaktiviert die Ausgabe des Keep Alive Frames
    HIDE_ACK_FRAME HIDE_ACK_FRAME:true
    HIDE_ACK_FRAME:false
    Aktiviert oder Deaktiviert die Ausgabe des Acknowledge Frames
    AUTO_ACK_FRAME AUTO_ACK_FRAME:true
    AUTO_ACK_FRAME:false
    Aktiviert oder Deaktiviert das automatische Acknowledge Frame
    SHOWSPACE SHOWSPACE:true
    SHOWSPACE:false
    Aktiviert oder Deaktiviert die Anzeige der Can-Bytes mit einem Leerzeichen als Trennzeichen
    SHOWID SHOWID:true
    SHOWID:false
    Zeigt die Can ID der empfangenen Daten an.
    LANG LANG:0
    LANG:1
    Ändert die Sprache. 0 = EN / 1 = DE
    AUTOFILTER AUTOFILTER:true
    AUTOFILTER:false
    Filtert alle eingehenden Can-Nachrichten und fügt die ID's dem Filter hinzu.
    IDFILTER_ADD IDFILTER_ADD:0A5 Can-ID dem Filter hinzufügen. Z.b. 0A5
    IDFILTER_REMOVE IDFILTER_REMOVE:0A5 Can-ID aus dem Filter entfernen. Z.b. 0A5
    SHOWIDFILTER Zeigt alle Can-ID's aus dem Filter an
    ECO_OFF Alpha Status! Deaktiviert den Eco Modus für eine Stunde.
    Kompatibel mit BSI2010




    Releases

    • v1.0.0 beta Release

    Bugs & To-Do's

    • Funktion zum entsperren von Steuergeräten
    • Multi frame Support für's senden
    • Funktion zum überprüfen der Multi frame Integrität
    • MCP Einstellungen beim Start anzeigen und zum Fortfahren vorher bestätigen lassen
    • LIN Multi frame Unterstützung
    • Vielleicht: 11Bit Unterstützung
    • Vielleicht: Kompatibilität für nicht auf PSA basierenden Fahrzeuge
    • Vielleicht: Hex To Text via Konsole / Text To Hex via Konsole
    • :ladybug: Keep Alive Frame Befehl auf Richtigkeit überprüfen

    Playground

    Hier sammle ich ein paar Befehle, die ihr zum testen nutzen könnt.

    Zur Zeit teste ich nur auf meiner Werkbank und habe ein BSI und ein Nac zur Verfügung.

    Später teste ich an meinem Auto weiter.


    Wer mitmachen will, kann das gerne tun und seine ausprobierten Befehle hier reinschreiben.

    Viele Befehle kann man via Diagbox auslesen.


    Info: Die meisten Befehle benötigen die Diagnosesitzung (1003), bevor diese akzeptiert werden.


    Befehl Beschreibung Kompatibel NAC? Kompatibel BSI2010?
    1003 Diagnosesitzung starten :check_mark_button: :check_mark_button:
    1103 Steuergerät neu starten :check_mark_button: :check_mark_button:
    2FD6000300 Touchscreen ausschalten :check_mark_button: :x:
    3101DF07 Touchscreen Test :check_mark_button: :x:
    22xxxxx Zone auslesen.
    Bsp: 22F190 = Fahrgestellnummmer auslesen
    :check_mark_button: :check_mark_button:
    190209 Fehler auslesen :check_mark_button: :check_mark_button:
    2FD819030664 Kofferraumbeleuchtung einschalten :x: :check_mark_button:
    2FD877030664 Interior: Led Warnblinker einschalten :x: :check_mark_button:
    2FDAC6030101 Kofferraum entriegeln/öffnen :x: :check_mark_button:
    2FD923030A01 Scheiben entfrosten :x: :check_mark_button:
    2FD822030601 Scheibenwischer vorne aktivieren :x: :check_mark_button:



    Entwicklung

    Es dürfte klar sein, dass dieses Projekt mein persönliches Hobby ist und ich es ausschließlich in meiner Freizeit vorantreibe.

    Ich schätze jede Form von Unterstützung, aber ich bevorzuge natürlich auch die Zusammenarbeit mit Leuten, die ein ernsthaftes Interesse an der Entwicklung und Verbesserung des Projekts oder generell Spaß an sowas haben.


    Da das Programm ziemlich umfangreich ist und ich mehrere Tabs nutze, ist es einfacher, dieses erstmal nur kompiliert zur Verfügung zu stellen, da ich sonst bei jeder kleinen Änderung alle Tabs zusammenführen muss.


    Folgende Unterstützung hilft zur Verbesserung und Motivation:

    • Diagnose und Tests zwecks Funktion und Kompatibilität mehrere Fahrzeuge
    • Übersetzung von Texten in anderen Sprachen (Kein simples Copy & Paste per Übersetzer!)
    • Tests und Reverse Engineering bzgl. Can-Nachrichten Aufbau und Entschlüsselung



    Natürlich hilft es auch, wenn Ihr als nette Geste anderweitig Unterstützung für das Forum und den Server zukommen lasst, um zumindest ein Teil der Kosten decken zu können. :)



    Haftungsausschluss und Nutzungsbedingungen

    Es ist zwar klar, dass die Verantwortung beim Nutzer liegt, jedoch möchte ich aus verantwortungsvoller Sicht explizit nochmal auf folgendes hinweisen:

    Dieser Arduino-Sketch dient ausschließlich zu diagnostischen und Entwicklungs-zwecken.

    Die Nutzung während der Fahrt im Straßenverkehr ist nicht empfohlen und kann im Falle falscher Handhabung und daraus resultierenden Unfällen oder schlimmeres zu schwerwiegenden rechtlichen Konsequenzen führen, seit euch dem bewusst.


    Jegliche Nutzung des Sketches erfolgt auf eigene Gefahr.

    Ich übernehme keinerlei Haftung für Schäden oder Verluste, die direkt oder indirekt durch die Verwendung dieses Sketches entstehen könnten.


    Es liegt in der Verantwortung des Nutzers sicherzustellen, dass die Verwendung des Sketches den geltenden Gesetzen und Vorschriften entspricht.

    Durch die Nutzung dieses Sketches erklärt sich der Nutzer mit den oben genannten Nutzungsbedingungen einverstanden.



    Sketch

    308 GTi (╯°□°)╯︵ ┻━┻

    Einmal editiert, zuletzt von Mittns ()

Jetzt mitmachen!

Hey! Es scheint, als ob Dir dieser Austausch gefällt, aber Du hast bisher noch kein Benutzerkonto erstellt. Mit einem Konto kannst Du über neue Antworten informiert werden, Foto's in unsere Galerie hochladen, unsere Tools nutzen, anderen mit einem „Gefällt mir“ danken oder selbst dabei unterstützen, anderen zu helfen. Gemeinsam können wir dazu beitragen, diese Community zu etwas größerem zu machen.