Normalerweise werden die Kilometer aufaddiert und dauerhaft gespeichert.
Klar in einen EEprom, nur die Speicherstelle des internen EEproms ist nach 100.000 Zyklen kaputt.
Man könnte die EEprom Adressen wechseln, nur muss man dann die Adresse vorher speichern.
Die Katze beisst sich in den Schwanz
Man muss auch bei jeden Kilometer einen EEprom Zugriff machen, da man nie weiß wann die Bordspannung ausfällt, z.b Unfall etc.
Das es funktioniert sieht man in unseren Autos.
Kommen da spezielle EEproms zum Einsatz ? , oder ein Algo der die Standart EEprom's schont
Normalerweise werden die Kilometer aufaddiert und dauerhaft gespeichert.
Klar in einen EEprom, nur die Speicherstelle des internen EEproms ist nach 100.000 Zyklen kaputt.
Am besten speicherst Du den Kilometerstand in einen batteriegepufferten RAM-Speicher, der beliebig oft beschreibbar ist.
Z.B. hat ein DS1307 Uhrenchip 56 Bytes RAM-Speicher, die von der Pufferbatterie der Uhr mitgepuffert werden.
Und wenn Du einen DS1307 in Deinen Arduino-Tacho einbaust, kannst Du gleich noch eine Funktion "Uhrzeit" für den Tacho vorsehen.
Normalerweise werden die Kilometer aufaddiert und dauerhaft gespeichert.
Klar in einen EEprom, nur die Speicherstelle des internen EEproms ist nach 100.000 Zyklen kaputt.
Man könnte die EEprom Adressen wechseln, nur muss man dann die Adresse vorher speichern.
Die Katze beisst sich in den Schwanz
Man muss auch bei jeden Kilometer einen EEprom Zugriff machen, da man nie weiß wann die Bordspannung ausfällt, z.b Unfall etc.
Das es funktioniert sieht man in unseren Autos.
Kommen da spezielle EEproms zum Einsatz ? , oder ein Algo der die Standart EEprom's schont
Die EEPROM-Adresse, die den aktuellen Zähler enthält, kann man durchaus im EEPROM speichern. Diese Angabe ändert sich ja nicht 100.000 mal, sondern nur, wenn man auf eine neue Speicherzelle wechselt. Ich würde es z. B. so machen:
in den EEPROM-Zellen 0 und 1 die Kilometer zählen. Das geht mit 16 bit bis zum Kilometerstand 65535,
wenn der Zähler überläuft, also wieder auf 0 springt, in den Zellen 2 und 3 von vorne anfangen zu zählen,
der Sketch kann erkennen, dass die Zellen 0 und 1 eine Null enthalten und die "echten" Kilometer folglich in 2 und 3 stehen und 65536km addiert werden müssen,
kann man beliebig fortsetzen, bis alle 1024 Zellen in Gebrauch waren, das sind dann immerhin über 33 Mio. km
es würde sogar genügen, immer nur um eine Zelle "weiterzuschalten", da die Zelle, die das high byte enthält, erst 256 mal beschrieben wurde
Du kannst auch die km kontinuirlich in immer neue Speicherplätze schreiben. (2 oder 4 Bit pro km Stand) um zu wissen welchen Speicherort neu zu beschreiben suchst Du einfach die älteste (kleinste) km-Angabe und überschreibst die. So verliert man bei einem Schreibfehler nur wenige (am besten Fall nur einen) km.
Die Rechnung mit den 33 mill möglichen km pro 100000 Schreibzyklen für ein 1024 byte EEprom stimmt nicht ganz da meines Wissens immer Blöcke gelöscht und geschrieben werden. Dennoch erreicht man bei normaler nutzung eines Fahrrades kaum jemals die max löschzyklen des EEproms. Wer macht schon als nicht hauptberuflicher Radfahrer schon 65000 km?
Man kann auch die km ins RAM der RTC schreiben und zur Sicherheit beim einschalten bzw alle Stunde oder x km mal ins EEprom.
Das fiese bei den EEproms ist daß die Probleme nicht gleich auftreten müssen. Ein Bit das nach etlichen Tagen seinen Zustand verliert ist bei normalen, von User durchführbaren Tests nicht zu erkennen. Das EEprom muß ja beschreibbar sein und die Daten für längere Zeit behalten.
Der Hersteller garantiert x Schreibzyklen und daß die Daten dann noch x Jahre halten.
Uwe hat recht, die 10000Zyklen gelten nur für interne EEPROM, weil das (zumindest bei anderen Controllern) kein EEPROM ist, sondern im Flash ein EEPRom Emuliert wird.
externe "echte" EEPROMs haben alle 1,000,000 Program/Erase Cycles und 100 Year Data Retention.
Für den spezielle Fall des KM-Standes im Auto wird der Wert verschlüsselt abgelegt, natürllich über Checksumme abgesichert, und ausserdem redundant.
Für manche Fahrzeughersteller heißt redundant in dem Falle: in zwei getrennten Bausteinen.
Es geht hier nicht um einen Fahrrad Computer, sondern um eine Theoretische Frage wie sowas in einen KFZ Kombiinstrument realisiert wird.
guntherb:
externe "echte" EEPROMs haben alle 1,000,000 Program/Erase Cycles und 100 Year Data Retention.
Für den spezielle Fall des KM-Standes im Auto wird der Wert verschlüsselt abgelegt, natürllich über Checksumme abgesichert, und ausserdem redundant.
Für manche Fahrzeughersteller heißt redundant in dem Falle: in zwei getrennten Bausteinen.
Klingt so als ob du in der Automotiven Entwicklung tätig bist ?
Ich bin KFZ-Elektriker mit Schwerpunkt Fehlersuche, und mein privates Interesse an Mikrocontrollern (und Entwicklen eigene Projekte) ist in meinem Beruf sehr vorteilhaft.
Für mich ist ein Steuergerät keine BlackBox wie für viele meiner Kollegen.
Habe vor einiger Zeit mal ein Kombi eines 3B Passat (Bj ca. 2002) zerlegt, dort war vermutlich kein externes EEprom verbaut (vermutlich deshalb weil manche Bauteile kein orginale Bezweichnung haben).
Aktuelle Autos speichern den Kilometerstand in diversen Steuergeräten, ist auch einen Art von redundanz.
Dank der Erklärung von Uwe kann ich mir vorstellen wie der Algo in etwa ausschaut, eine Art Bytehopping.
Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
Data retention: 20 years at 85 °C/100 years at 25°C
Der Test im Video schreibt das EEprom und liest es sofort wieder. Laut Hersteller muß das EEprom nach 100000 Programmier/Löschvorgängen die Daten noch 20 bzw 100 Jahre ohne Fehler behalten.
Zum Video kann man nur sagen: netter Versuch, aber sagt nichts aus.
Uwe hat das alles schon sehr gut auf den Punkt gebracht. Einen Zähler im EEPROM mit wear leveling habe ich hier Wear Leveling | Blinkenlight breitgetreten. Man kann so einen Zähler benutzen um dann die Werte im Rest des EEPROMs zu adressieren.
Allerdings ist es bei einem reinen Zähler vermutlich einfacher so vorzugehen wie Uwe vorschlägt. Einmal alle Zellen mit 0 initialisieren und dann successive hochzählen. Der höchste Wert muß ja der aktuellste sein. Falls man dazwischen rückstellen können will, dann wäre ein Ringpufferansatz mit Index (wie oben angedeutet) allerdings wieder besser.
rudirabbit:
Klingt so als ob du in der Automotiven Entwicklung tätig bist ?
Aktuell nicht mehr in der Entwicklung, aber ich habe viele Jahre Elektroniken für KFZ entwickelt, richtig (bei dem grossen Zulieferer mit dem orangen Pferd)
rudirabbit:
Habe vor einiger Zeit mal ein Kombi eines 3B Passat (Bj ca. 2002) zerlegt, dort war vermutlich kein externes EEprom verbaut (vermutlich deshalb weil manche Bauteile kein orginale Bezweichnung haben).
Aktuelle Autos speichern den Kilometerstand in diversen Steuergeräten, ist auch einen Art von redundanz.
Dass der km-Stand verteilt gespeichert wird, kenne ich nicht, aber ich weiß, dass der KM-Stand oft nicht im Instrument gespeichert wird, sondern nur über CAN übermittelt. Das kann sich aber in den letzten Jahres geändert haben. Die Wegfahrsperren sind auch immer komplexer geworden!
Allerdings ist es bei einem reinen Zähler vermutlich einfacher so vorzugehen wie Uwe vorschlägt. Einmal alle Zellen mit 0 initialisieren und dann successive hochzählen. Der höchste Wert muß ja der aktuellste sein.
Dies wäre sogar relativ einfach zu machen.
uwefed:
rudirabbit:
Aktuelle Autos speichern den Kilometerstand in diversen Steuergeräten, ist auch einen Art von redundanz.
Würde auch sagen damit es etwas schwieriger ist den Tachostand zurückzudrehen
Grüße Uwe
Der fehlte bei meinem Posting.
Klar das ist der eigentliche Zweck, es werden auch andere Fahrzeugdaten gespeichert ( z.b die Fin)
Und wenn man bestimmte Steuergeräte aus anderen Autos einbauen will funktionieren die nur eingeschränkt.
Man muss diese freischalten, geht alles Online über den Server des Herstellers.
Hatte neulich einen Fall:
Kunde kauft gebrauchtes Steuergerät in der Bucht, und wollte es eingebaut haben.
Natürlich waren etliche Funktionen gesperrt, und das Freischalten schlug fehl. Ich hatte da schon einen Verdacht warum das so ist
Ein paar Stunden später war die Kripo in unserer Firma...
Es gibt aber auch für moderne Autos immer wieder entsprechende Geräte zu kaufen um die diversen Sperren zu umgehen.
Und ich frage mich ob da nicht undichte Stellen in der Entwicklung gibt, ansonsten müssten die "Hersteller" dieser illegalen Geräte die Firmware dumpen,disassemblieren und den Asm Code dann auch noch verstehen.
Wenn einer soviel drauf hat dies zu tun, hat sowas wohl nicht nötig.