Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

THEMA:

Tauchtanksteuerung 15 Jahre 8 Monate her #16943

  • Horti
  • Hortis Avatar
  • Offline
  • Kaleu
  • Kaleu
  • Beiträge: 140
  • Dank erhalten: 0
Ich hab heute mal Hallsensoren bei Reichelt bestellt und werde ein bischen mit denen rum experimentieren. Ich hoffe, das sie am Dienstag ankommen.
Kann man die Schaltung, die eigendlich für den Sensorausgang des Refexkopplers gedacht war, eigendlich unverändert für den Hallsensor übernehmen oderkann man den auch dierekt an den Eingang des µC setzen?

LG Horti
Ein Held ist jemand,

Bitte Anmelden um der Konversation beizutreten.

Tauchtanksteuerung 15 Jahre 8 Monate her #16944

  • KeDaiv
  • KeDaivs Avatar Autor
  • Offline
  • Maat
  • Maat
  • Beiträge: 19
  • Dank erhalten: 0
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! :D

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! :D
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!!! :D
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]

Bitte Anmelden um der Konversation beizutreten.

Re: Tauchtanksteuerung 15 Jahre 8 Monate her #16945

  • Andy Jungmann
  • Andy Jungmanns Avatar
  • Offline
  • Kaleu
  • Kaleu
  • Beiträge: 136
  • Dank erhalten: 0

KeDaiv schrieb: Hallo,
Ich wurde von meinem Bruder gerade mal darauf aufmerksam gemacht, das es an einer Tauchtanksteuerung fehle.


Hallo KeDaiv, was auch immer das heißen mag. Dein Bruder und auch Du haben wirklich sehr schlecht recherchiert. Gerade an TTS fehlt es nicht. Sowas wurde von vielen verschiedenen Leuten erfolgreich gebaut. Sehr gut, sehr zuverlässig.

Und ein Tipp am Rande. Wenn Du schon sowas machst, dann muss es erst einmal zuverlässig funktionieren. Mit Deinem "Ringbuffer" baust Du Dir ohne Grund Fehler ein. Ich bezweifle mal stark dass man sowas unbedingt braucht. Versteh mich nicht falsch, wenn Du richtig Bock auf so was hast dann mach es. Wo wären wir heute wenn nicht immer mal jemand das Rad neu erfunden hätte. Ich denke aber dass Du es sehr schwer hast eine neue Schaltung zu etablieren. Es gibt sehr gute und vor allem sehr zuverlässige Schaltungen die ich jederzeit vorziehen würde.

Gruss

Andy
pressluftjunkies.net

Bitte Anmelden um der Konversation beizutreten.

Tauchtanksteuerung 15 Jahre 8 Monate her #16946

  • KeDaiv
  • KeDaivs Avatar Autor
  • Offline
  • Maat
  • Maat
  • Beiträge: 19
  • Dank erhalten: 0
Hey Andy,
Zum einen wollt ich sagen, das mein Bruder der Modellbauer ist und ich eigentlich nur gerne ab und an mal programmiere. Also von daher habe ich gar nicht recherchiert. Das stimmt wohl! ^^
Wenn du diese Schaltung, bzw das Programm nicht nutzen möchtest, dann ist es halt so. Jedoch möchte ich hoffen, das irgendwann jmd diese Software nutzt, wenn nicht dann zumindest mein Bruder. Was jeder nutzt ist schließlich seine Sache. ;)
Zu der anderen Sache. Ich habe vor kurzem erst angefangen µC zu programmieren und natürlich brauche ich, um mich dort einzufinden wenigstens ein kleines Projekt, an welchem ich mich austoben kann, wo ich basteln kann und natürlich auch lernen kann. Hätten das nicht andere Leute früher schon gemacht, wo wären wir denn dann, wie du ja schon sagtest. Von daher ist es ein kleines Projekt, welches ich nicht hinter verschlossenen Türen bauen wollte, sondern auch zeigen wollte, was ich geschafft hab. Vlt auch darum, um andere zu animieren mit zu machen oder oder oder. Von daher erwarte bitte nicht, das so etwas innerhalb von ein paar Wochen fertig ist. Darum gibt es gerade nur ein noch nicht mal halb fertiges Projekt.
Und nun noch als letztes zu dem Ringpuffer. Wie schon in dem Beitrag gesagt, benötige ich diesen nicht unbedingt für die TTS jedoch versuche ich den Code für diese SW so zu schreiben, das diese auch für andere Projekte wieder verwendet werden kann. Da sich dies gerade auch hier anbietet, mache ich mir dort gerne etwas mehr Arbeit! ;)

mfg
KeDav

[edit]Sei froh über die Vielfalt, die es gibt, oder wie würdest du es finden, wenn jeder nur ein Auto fahren würde, oder es gäbe nur ein Essen zu kaufen. Je mehr es gibt, umso mehr kann man von den anderen lernen.[/edit]

Bitte Anmelden um der Konversation beizutreten.

Tauchtanksteuerung 15 Jahre 8 Monate her #16947

  • Andy Jungmann
  • Andy Jungmanns Avatar
  • Offline
  • Kaleu
  • Kaleu
  • Beiträge: 136
  • Dank erhalten: 0
Hi

ich erwarte nicht dass Du es in ein paar Wochen schaffst. Eigentlich erwarte ich gar nix. Spass beiseite. Ich wollte Dir nur ein paar Tipps geben. Ich halte diesen "Ringbuffer" für absolut untauglich. Bin jetzt kein Elektroniker, ich denke aber dass Du mit Deiner Aussage, dass jede Speicherstelle nur eine definierte Anzahl an Schreibzugriffen verkraftet, falsch liegst. Mit einem Pointer auf den Speicher baust Du Dir 100% Probleme ein. Die Werte die dann in den "verbrauchten" Zellen stehen sind ja nicht ungültig. Wenn einmal der Pointer daneben zeigt, ist das ganze Geraffel schon für den Arsch.

Dann würde ich als erstes mal von vorne anfangen. Versuche erst einmal die Signale des Empfängers zu lesen. Vor allem wenn vom Empfänger Grütze kommt.

Ich hab gelesen dass Du die Zeit messen willst die der Kolben braucht. Willst Du wirklich ohne Poti oder Hallsensoren die Position festlegen? Wenn ja dann sag ich jetzt schon dass es nix wird.

Andy
pressluftjunkies.net

Bitte Anmelden um der Konversation beizutreten.

Tauchtanksteuerung 15 Jahre 8 Monate her #16948

  • KeDaiv
  • KeDaivs Avatar Autor
  • Offline
  • Maat
  • Maat
  • Beiträge: 19
  • Dank erhalten: 0
Hey, danke für deine Tipps, die nehme ich auch gerne Entgegen! ;)
Das du da nix erwarten kannst ist auch ganz normal, weil dies ein Projekt ist, welches in meiner Freizeit entsteht. Außerdem werde ich dafür nicht bezahlt! :D

Nochmal zu dem Ringpuffer ( Bitte mit "P" ;) ). Du musst um diesen zu verstehen kein Elektroniker sein. Nur vlt Softwareentwickler oder dir das einfach mal vorstellen. Der EEPROM hat nur eine begrenzte Anzahl an Schreibzyklen. Zu lesen in dem Datenblatt von Atmel auf Seite 19. Wie kannst du dir das vorstellen...
Schnapp dir nen Block und nen Bleistift und schreib drauf. Radier es weg, schreib nochmal drauf &&&
Irgendwann schreibst du auf dem Tisch! :p
So ist es nicht ganz. Der EEPROM funktioniert an sich folgendermaßen. Das sind dort alles kleine Transistoren. Ein Transistor für jedes Bit. Diese haben eine kleine Brücke, nennt sich auch Floating Gate. Wenn du nun HIGH in dem Transistor speicherst muss diese Brücke wiederhergestellt werden, damit dieser durchsteuert. Wenn du LOW gibst, wird die Brücke zerstört. Wie man sich vlt vorstellen kann, kann die Brücke nicht beliebig hergestellt werden. Die geht irgendwann kaputt. Lesen kannst du so oft du willst. Weil dort keine Spannung zum wiederherstellen der Brücke gegeben wird. Von daher geht das ding irgendwann kaputt. Wie lange es sicher hält, steht ja im Datenblatt. ;)
Um das zu verhindern möchte ich die einzelnen Speicherstellen nicht so oft beschreiben und warum soll ich denn, den Platz der mir gegeben wird nicht ausnutzen? Denn um die Einstellungen zu speichern brauche ich keine 512Byte! ^^
Ob das für die TTS wirklich nötig ist, ist natürlich zu hinterfragen. Aber, wie schon in dem Post davor gesagt, ich baue dies, weil ich noch vor habe andere Projekte zu programmieren. Wenn ich dann schon ein mal am EEPROM sitze, dann kann ich dies auch richtig machen. :p
Ich hantiere da nicht mit einem "Pointer" oder, bleiben wir deutsch, mit einem Zeiger. Ein Zeiger liegt auf einer Adresse im RAM und kann hin und her bewegt werden. Ich möchte im EEPROM etwas schaffen, womit ich relativ, nicht absolut wie bei einem Pointer, die Adresse angeben kann. Diese wandel ich dann in eine absolute Adresse um und kann somit den Wert auslesen.

Das mit dem Zeit messen ist natürlich Quark. Da hast du natürlich recht. Jedoch wurde dies schon verworfen und die Hall-Sensoren sind schon bestellt. Ich möchte dir auch noch mal einen kleinen Einblick in meine Umgebung machen, was ich gerade zur Verfügung habe, um zu entwickeln. Zur Zeit habe ich nur ein kleines Demo Board. Dort sind ein paar LEDs und ein paar Taster drauf. Ich kann dies alles nur theoretisch hier "vorspielen". Jedoch ist es bald so weit, das die überarbeitete Version der Platine auch hier bei mir liegt. Dann werde ich anfangen zu Testen und zu programmieren, was ich bisher nicht ordentlich programmieren konnte. Jedoch kann ich alles, was ich zur Zeit mit meinen Mitteln schaffen kann, schon mal machen bevor es mir auf die Füße fällt wenn ich mit anderen Sachen ( Hall-Sensor, Steuerung &&& ) zu tun hab! ;)

Bitte Anmelden um der Konversation beizutreten.