Hallo Josch,
dass die ECU Daten mit Werteklasse 0 nicht durchkommen ist klar, siehe hierzu auch mein früherer Post
hier.
Das Auftauchen der Werteklasse 0 führt dazu, dass die Sensordaten als ungültig deklariert werden, wodurch das An- und Abstecken von Sensoren erkannt wird.
Die Gretchenfrage ist jetzt: Wie kann ich die Werteklasse 0 für einen abgesteckten Sensor von einer Werteklasse 0 für gültige ECU Daten unterscheiden?
Erst wenn ich das herausgefunden habe, macht es wirklich Sinn, am Code was zu machen.
Mal sehen, ob was aus der MSB Spezifikation herauszulesen ist, ich glaube aber eher nicht.
Andererseits ist der Fall eines abgesteckten Sensors für den laufenden Betrieb nicht wirklich relevant.
Vielleicht muss man also hier einen Kompromiß machen und Werteklasse 0 generell als gültige Werteklasse behandeln.
Wenn ich schon dabei bin, hier noch zwei andere Anmerkungen:
1. Der letzte hier veröffentlichte Code hat die Eigenheit, dass die Bits des M-Link Signals nicht genau in der Mitte,
sondern nach etwa zwei Dritteln der Bitdauer abgetastet werden.
Das hat sich durch verschiedene Änderungen an der entsprechenden Interrupt Service Routine eingeschlichen,
da ich nicht daran gedacht habe, das Vorladen des Timers für den ersten Interrupt (1. Datenbit) des SW UARTs anzupassen.
Es wird trotzdem problemlos funktionieren, ich werde das aber bei nächster Gelegenheit korrigieren.
2. Ich bin gerade dabei, den Code (wieder einmal) ein bisschen umzustellen.
Sprich, die Aufteilung auf die einzelnen Module ändert sich, ohne allerdings die Funktion zu verändern.
Ich mache das, weil ich vorhabe, den Code für ein Nanite Board mit ATtiny841 zu portieren.
Dieses Board läuft nur mit 8 MHz und kommt dadurch mit 3,3 V aus.
Es könnte direkt im M-Link Modul untergebracht und über die Telemetrie-Schnittstelle mit Strom versorgt werden.
Dazu muss aber der Code eben etwas umgestellt werden, um z.B. Funktionsaufrufe aus der ISR des SW UART zu entfernen.
Derzeit ist nämlich die Laufzeit der ISR bei 8 MHz länger als die Bitbreite des M-Link Signals.
Und das ist hauptsächlich bedingt durch etwa 40 push und pop Befehle, die der Compiler einbaut, um den Status zu sichern.
Aus früheren Versuchen weiss ich, dass das drastisch abnimmt, wenn keine Funktionsaufrufe in der ISR sind.
(z.B. muss dann kein Stack gesichert werden.)
Es handelt sich übrigens um
dieses Board.
Mal sehen, ob es gelingt, den Konverter mit 8 MHz laufen zu lassen.