Hm, ich denke mal, dass die Signale, welche vom Reflexkoppler kommen sollten gleich aussehen wie die, welche vom Hall Sensor kommen. Denke ich. Wenn nicht, ist es ja die Aufgabe des Programmierers dies umzusetzen. Also, unter anderem die von mir bisher!
Ich werd mich nun doch erstmal an den EEPROM setzen und dafür versuchen einen Ringpuffer zu schreiben.
Warum einen Ringpuffer?
Der EEPROM ist ja in einzelne Speicherzellen aufgeteilt. Bei dem ATmega8 laut Datenblatt in 512 zu je 1 Byte. Nun ist das Problem, das eine Speicherzelle auf Garantie 100000mal beschrieben werden kann. Das ist recht viel und vlt für das Projekt ausreichend. Jedoch möchte ich mein geschriebenen Code ja auch noch für andere Sachen verwenden. Und dort wird vlt öfter auf den EEPROM geschrieben.
Also, wie funktioniert dieser Ringpuffer?
Ich habe mir das wie folgt überlegt. Es wird irgendwo eine Größe einer "Speicherseite" definiert. Auf diese Speicherseite kann ich nur über eine relative Adresse zugreifen. Das Programm wandelt diese dann in eine absolute Adresse um.
Wenn ich nun etwas lesen möchte von dem EEPROM, dann gebe ich meine relative Adresse ein. Ich gucke auf der ersten Speicherseite, ob dort ein Wert existiert. Wenn ja, gehe ich auf die nächste Speicherseite. Existiert dort wieder ein Wert, gehe ich auf die nächste. usw usf. Komme ich nun an eine Speicherseite wo nichts steht, gehe ich einfach eine Seite zurück und liefere den Wert. So wird immer der aktuellste Wert ausgegeben.
Mit dem schreiben soll dies dann ähnlich funktionieren. Es wird der Wert in der letzten Speicherseite geprüft. ist dieser gleich mit dem zu schreibenden Wert, wird nicht geschrieben, um die Schreibzyklen zu schonen. Ist der Wert nicht gleich, wird auf die nächste Speicherseite geschrieben.
Wenn nun die letzte Speicherseite erreicht ist, habe ich mir bisher überlegt, alle Werte zu kopieren, den gesamten EEPROM zu löschen und wieder auf die erste Seite zu schreiben. Mal schaun!
Dies hat alles den einen großen vorteil, dass der EEPROM einfach geschont wird.
Jedoch auch mehrere Nachteile. Zum einen ist der programmtechnische Aufwand größer. Jedoch ist dies ja auch die Sorge der Programmierer!
Zum anderen hat der µC dann nicht mehr 512Byte EEPROM sondern nur noch so viel, wie eine Speicherseite groß ist. Jedoch ist dies auch die Sorge des Programmierers. Der andere Nachteil ist, den könnten auch die Anwender erfahren und mitbekommen, dass der zugriff auf den EEPROM langsamer ist als vorher. Jedoch möchte ich dies erst einmal testen und dann schaue ich weiter. Es ist schließlich alles erst eine Idee und ich werde versuchen diese so gut wie möglich umzusetzen.
Nochmals kurz zu der Berechnung.
Der EEPROM garantiert mir 100000 Schreib Vorgänge. Wenn der EEPROM nun 512Byte groß ist und eine Speicherseite davon 8Byte ( Das wird vermutlich auch für den Kolbentank reichen ) dann macht dies ( 512 / 8 ) * 100000 = 6400000 Schreibzugriffe. Theoretisch. Jedoch muss ja auch einkalkuliert werden, dass wenn ich auf der letzten Speicherseite bin, der gesamte EEPROM gelöscht wird. Also bleiben mir nicht 100000 Schreibvorgänge, sondern 99999. Das macht dann immer noch 6399936.
Alles nur Theorie!!!
Also, dann mal weiterhin frohes tauchen!
[edit]Ich hab mir nochmal schnell die Rechnung angeschaut. Sind ein paar, aber nur ein paar weniger.
( 512 / 8 ) * ( 100000 - ( 512 / 8 ) ) = 6395904 Schreibzyklen
dazu nochmal. Ich muss 512 / 8 von den 100000 Zyklen abziehen, weil ja nach jedem vollen EEPROM gelöscht werden muss.
Ist aber alles nur theoretische Rechnerei!
[/edit]