PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dauerhafte Speicherung des Km-Stand beim Auto - wie?



enterprise30
19.12.2006, 16:58
Hallo zusammen,

weiss jemand wie beim Auto der Km-Stand gespeichert wird?
Hardware: EE-Prom oder Flash? (Ram kanns nicht sein da ja beim Ausbau
des Tachos der Km-Stand gespeichert wird. Prom auch nicht, da sich sonst die Km-Stände nicht manipulieren liesen))
Software: Wie ist der Ablauf? Was passiert wenn der Km-Zähler um ein hochgezählt hat?

Hintergrund: Ich möchte mir selbst einen Km-Zähler programmieren und weiss
nun nicht wie ich die Speicherung des Km-Standes vornehmen soll ohne das EEprom zu überfordern (zb. beim Atmel nur 100.000 Schreibzyklen).
Wenn ich jeden Km im EEprom speichere ist die letzte eine Speicherstelle nach km 100.000 quasi "verschlissen".
Eine Möglichkeit wäre erst bei "Zündung aus" den Wert zu speichern.
Mich interessiert aber wie das die "Profis" machen!

Jürgen

Felix G
19.12.2006, 17:23
Speicher den Wert im EEPROM...

um die Anzahl an Schreibzyklen möglichst gering zu halten fallen mir spontan zwei Möglichkeiten ein (die ich kombiniert nutzen würde)

1. wenn du nur einen kleinen Teil des EEPROMs benötigst, dann speichere die Daten nicht immer an der gleichen Stelle sondern jedesmal um die Größe deiner Daten versetzt. (also wenn du 1/4 des verfügbaren Speichers brauchst, dann leg die Daten erst an Position 0, danach eben an Position "1/4 EEPROM" etc.)
So nutzt du alle Speicherstellen gleichmäßig.

2. Speichere die geänderten Daten nur bei einem Stromausfall ins EEPROM. Dafür gibt es einen speziellen Interrupt der bei unterschreiten einer bestimmten Versorgungsspannung ausgelöst wird. In der ISR bleibt dann genug Zeit die Daten ins EEPROM zu sichern, bevor der Saft endgültig weg ist.


wenn du beide Techniken nutzt wird dein EEPROM wahrscheinlich in 10 Jahren noch nicht die 100k Schreibzyklen erreicht haben.

enterprise30
19.12.2006, 18:59
Bei dem Satz "Mich interessiert aber wie das die "Profis" machen!"
dachte an die Automobilbauer.
Den Lösungsansatz mit dem Interrupt hatte ich so ähnlich wie Du:
Ich lege die "Zündung" (Klemme15) an einen Port mit Interrupt/fallende Flanke.
Da nun die Stromversorgung durch Elkopufferung ein wenig später als die Spannung an Klemme15 zusammenbricht kann ich in der Zeit den km Stand (+ die Adresse der momentanen Speicherstelle im EEprom) sichern.
(Dazu hab ich ca. 136ms Zeit, danach ist die Spannung am Prozessor nicht mehr konstant).
Wobei ich eigentlich die Adresse der Speicherstelle im EEprom vergessen kann da die ja IMMER gleich sein muß - denn woher weiss das Programm sonst wo es im EEprom nachgucken soll?
Ergo könnte ich mir das versetzen der Daten im EEprom sparen - das beisst sich doch der Hund in Schwanz - oder?

...

Artur
19.12.2006, 19:29
Bei dem Satz "Mich interessiert aber wie das die "Profis" machen!"
dachte an die Automobilbauer....

Da kocht jeder sein eigenes Süpchen bzw. / oft die Leute von VDO / JAEGER / oder sonst welche - dann natürlich nach vorgaben der Auto-Hersteller.

Mittlerweile sind die auch auf verschiedene Module verteilt + Kodiert - oft im EEPROM direkt über µC an dem der EEPROM hängt und wo auch die LIVE-Daten des Modul drinstehen

Also im Klartext gibt's den km-Stand schon lange nicht (mehr)

Gruss
Artur

enterprise30
19.12.2006, 19:38
Also bitte nicht falsch verstehen: Ich will keinen Tacho manipulieren!
Das "die" auch nur mit Wasser kochen ist mir klar, aber vielleicht ist es so eine Art homöopathisches Wasser *g*
Mein Tread ist eigentlich auch ein immer wiederkehrendes Thema:
"EEprom dauerhaft beschreiben" o.ä.
Dachte mir halt daß wenns Leute gibt die Motorchips tunen und Tachos programmieren da was genauer drüber wüssten.


...

Artur
19.12.2006, 21:15
... da was genauer drüber wüssten.


...

Jau ,
und was genauer ?

z.B. Schaltplan ? - die werden z.T. sogar mehrmals pro BauJahr geändert ! und sind Firmen geheimnis

Den Prog.-CODE ?

Also du solltest schon dich etwas genauer Ausdrücken ;-)

Gruss
Artur

enterprise30
19.12.2006, 22:23
Naaaa, ich brauche weder den Schaltplan noch will ich den Prog.Code.
Nur das Prinzip, ein Flip-Chart oder Flußdiagramm.
Aber nur für die Art der zyklischen Speicherung der Daten auf dem EEprom.

....

Felix G
19.12.2006, 23:50
Wobei ich eigentlich die Adresse der Speicherstelle im EEprom vergessen kann da die ja IMMER gleich sein muß - denn woher weiss das Programm sonst wo es im EEprom nachgucken soll?
Ergo könnte ich mir das versetzen der Daten im EEprom sparen - das beisst sich doch der Hund in Schwanz - oder?Warum?
Du kannst doch einfach noch einen zusätzlichen Wert mit ins EEPROM legen, aus dem du entnehmen kannst welcher Eintrag denn nun der aktuellste ist. Im einfachsten Fall wäre das eine Variable die bei jedem Speichern um 1 hochgezählt wird. Beim einschalten musst du dann nur noch den Eintrag finden, bei dem diese Variable den höchsten Wert hat (Überlauf bedenken, denn möglicherweise ist der "höchste Wert" 0)

Prinzipiell könntest du auch den Tachostand selbst dafür verwenden, aber das wäre unflexibler (z.B. wäre es dann deutlich aufwändiger mit dem Tachostand irgendwas anderes zu machen als ihn zu erhöhen)


Damit du bei der Initialisierung auch die richtigen Speicherstellen im EEPROM absuchst, sollten deine Daten inkl. Zählvariable natürlich eine Größe haben die auch "passt" (die Größe des EEPROMs muss ein ganzzahliges Vielfaches der Datengröße sein). Falls die Daten zu klein sind, musst du eben zur nächsten passenden Größe "aufrunden", also die neuen Daten beim speichern eben nicht direkt an die alten hängen, sondern mit etwas Abstand.



oder anders ausgedrückt:
du zerlegst das EEPROM in Segmente gleicher Größe, in die deine Daten gerade noch so rein passen, und dann speicherst du zuerst in Segment 1, dann in Segment 2 ... bis du das Ende erreicht hast, dann geht es wieder bei Segment 1 weiter. Da die Anfangsadressen der Segmente sich nicht ändern, kannst du so problemlos bei der Initialisierung das Segment suchen in dem die aktuellsten Daten liegen. (also das bei dem z.B. eine Zählvariable, oder der Tachostand den höchsten Wert hat)


Du musst dir also nirgends eine konkrete Adresse merken an der deine Daten liegen.


Ich hoffe ich habs halbwegs verständlich erklärt...
ist nicht so einfach zu beschreiben, aber wenn man das Prinzip verstanden hat ist klar wie es laufen muss

enterprise30
20.12.2006, 16:59
Ja, danke erstmal!
Die Idee mit dem auslesen aller Km-Stände aus dem EEprom und vergleichen auf den höchsten Wert hatte ich auch schon.
Die schien mir aber nicht so schön - quasi hinbeschissen :-/
Neu ist Deine Variante mit der "kleinen" Variable für den aktuellsten KM-Stand.
Für 100.000 km müsste ich ja jedesmal 6Bytes auslesen und mit Deiner Methodik reicht erstmal ein Byte.
Ich gehe noch eins weiter:
Eine Speicherstelle hat ja garantierte 100.000 Schreibzyklen.
Ich muß ja nur die niederwertigste Stelle (die 10er Stelle) an eine andere Stelle schreiben und hab dadurch schon eine um den Faktor 10 höhere Lebensdauer! So werd ichs machen :-)
Die restlichen 5 Stellen ändern sich pro Stelle immer um den Faktor 10 weniger oft.

Werde das mal im Frühjahr am Auto ausprobieren - wenn ich wieder nen Digitalen Tacho fahre.
Also KM notieren, ein Stück fahren und dann die Batterie abklemmen. Anschließend die Batterie wieder dran machen und schauen was/ob sich am KM-Stand etwas getan hat.
Dann dasselbe Spiel nochmal und statt der Batterie den Schalttafeleinsatz direkt ab und an stecken.
Werde dann meine Erkenntnisse hier berichten.

Felix G
20.12.2006, 20:15
6 Bytes für den Kilometerstand? wie speicherst du den denn?
3 Bytes reichen doch schon für 16 Millionen, bzw. wenn du auf 100m genau sein willst eben für 1.6 Millionen Kilometer.

Mit deinen 6 Bytes kommst du problemlos auf 280 Millionen Kilometer... bei 1mm Genauigkeit!!


noch eine kleine Beispielrechnung zur "einfachen" Methode, bei der alle Daten durch den Speicher wandern:
Bei einer angenommenen Segmentgröße von 8 Bytes (deine 6 Bytes + 1 Byte Zähler, aufgerundet auf die nächste 2er-Potenz), hättest du bei einem ATmega32 insgesamt 128 Segmente, und damit auch automatisch eine um den Faktor 128 höhere Lebensdauer.

Wenn du z.B. nur ein Byte verschiebst könntest du die Lebensdauer zwar theoretisch noch ein bischen erhöhen, aber dafür ist es in der Realisierung wieder etwas aufwändiger

enterprise30
20.12.2006, 21:24
Ähhhh schääm :oops:
Da hast Du natürlich Recht - wie konnt ich mich nur so vertun!
Nein, 1Million km ohne Komma reichen fett! Wir wolln mal nix übertreiben *g*
Das wären dann bei 2 Bytes 65536 km und -als nächste Größe- Deine 16Mill.

Grüße, Jürgen