Hallo zusammen, Folgendes Problem/Überlegung zu dem ich gerne Eure Meinung hören würde: -Ein batt.betriebenes Gerät mit MEGA-8. -Auf einer Folientastatur ist noch 1 Taste frei, das Gerät soll über diese Taste ein/ausgeschaltet werden. -Am AVR KEIN Portpin mehr verfügbar. Idee: Die Taste wird an den RESET des AVR gelegt. In einem Bit im EEPROM speichere ich den aktuellen Zustand (an/aus) ab. Bei jedem Reset (software-entprellt oder auch per rc-glied nur ein impuls) wird das an/aus-Bit getoggelt und der AVR geht dann nach dem Reset eben entweder in den Betrieb oder den Powerdown-Modus. So könnte ich bei jedem Tastendruck abwechselnd EIN/AUS schalten. Kann das so in dieser Art bzw. mit diesem Ansatz klappen? Gruss Joe
Hi Solange du dies nicht öftes wie 100000x machst. Der EEprom unterliegt einem "Verschleiß" und es sind soweit ich weiß, nur 100000 schreibzyklen garantiert. Aber ich denke, das es schon damit gehen wird. Mußt diese Routine in den Initialisierungsbereich legen, also nicht in die Programmschleife. Gruß oldmax
Reset als normalen IO-Pin definieren per Fuse (ACHTUNG: DANN KANNST DU MIT NORMALEN PROGRAMMERN NICHT MEHR PROGGEN!) du kannst du µC dann in den Power-Down Modus oder so setzen. Musst schaunw as passt
aaaa schrieb: > du kannst du µC dann in den Power-Down Modus oder so setzen. Musst > > schaunw as passt Und wie soll er da wieder raus kommen? Mit der Taste an jetzt PC6 wird das nichts. Das mit Reset und dem Toggle im E²Prom ist schon OK. Und um die 100000 Löschzyklen braucht man sich keine Gedanken machen. Das dauert so lange, da geht vorher was anderes kaputt. Und für ein Raumschiff ist das auch nicht. mfg.
Ok, also das hilft schonmal, danke. Ist wirklich nicht für ein Raumschiff, und mit 100k Zyklen lebt das Dingt stat. wirklich 15 Jahre.. Trotzdem noch eine Nachfrage wegen der max. EEProm-Schreibzyklen, wie ist die Angabe eigentlich zu verstehen? Wenn ich einen Wert schreibe, der SCHON DRIN steht, also zwar schreibe, aber nichts ändere, wird das auch angerechnet? Wenn ich ein Byte auslese, EIN BIT ändere und zurückschreibe, wird dann auch die Lebendauer der restlichen Bits tangiert? (Gleiche Frage wie oben, nur etwas konkreter) Nur mal so zur Vermehrung meines Wissens... Joe
Ein RESET löscht den RAM-Inhalt nicht. Du brauchst also gar keinen EEPROM, um dir zu merken, aus welchem Zustand du kommst: das kannst du prima im RAM machen. Allerdings musst du natürlich sicherstellen, dass bei einem Power-On-Reset der Zustand ordentlich initialisiert wird. Wenn du mit C arbeitest, dann werden dort die normalen Variablenbereiche beim Start des Programms initialisert. Das musst du für diese "Merkzelle" umgehen; wie das geht, sagt dir die Dokumentation deines C-Entwicklungssystems.
Das geht dabei um das Löschen. Auslesen kann man das so oft wie man will. mfg.
Jörg Wunsch schrieb: > Das musst du für diese > > "Merkzelle" umgehen; wie das geht, sagt dir die Dokumentation deines > > C-Entwicklungssystems. Das ist aber sicherlich die komplizierteste Variante. mfg.
Thomas Eckmann schrieb: >> "Merkzelle" umgehen; wie das geht, sagt dir die Dokumentation deines >> >> C-Entwicklungssystems. > > Das ist aber sicherlich die komplizierteste Variante. Allemal weniger kompliziert als die mit dem EEPROM, zumal ein Reset während des EEPROM-Programmierens tödlich ist für die programmierte Zelle.
Jörg Wunsch schrieb: > Reset während des EEPROM-Programmierens tödlich ist für die > > programmierte Zelle. Das ist allerdings richtig. mfg.
Thomas Eckmann schrieb: > Jörg Wunsch schrieb: > >> Reset während des EEPROM-Programmierens tödlich ist für die > >> > >> programmierte Zelle. > > > > Das ist allerdings richtig. > > > > mfg. Allerdings kann man das E²PROM auch gleich beim Programmstart toggeln. mfg.
Jörg, Danke sehr. Oh je, das die Zelle leidet, wenn ein Reset beim schreiben kommt, hatte ich garnicht bedacht. Und das ist ja im Betrieb kaum zu vermeiden. Das ist also das KO für die Lösung über EEProm. Werde es also im SRAM machen, was auch kein Prob ist, denn ich arbeite bei dem Projekt rein in Assembler. Macht es sogar einfacher, es per SRAM zu machen. Joe.
Thomas Eckmann schrieb: > Allerdings kann man das E²PROM auch gleich beim Programmstart toggeln. Das verhindert trotzdem nicht, dass der ungeschickte Nutzer (man muss ja immer mit dem schlimmsten rechnen ;-) nicht in diesem Moment erneut Reset drückt.
Jörg Wunsch schrieb: > Thomas Eckmann schrieb: > >> Allerdings kann man das E²PROM auch gleich beim Programmstart toggeln. > > Das verhindert trotzdem nicht, dass der ungeschickte Nutzer (man muss > ja immer mit dem schlimmsten rechnen ;-) nicht in diesem Moment erneut > Reset drückt. An solche Trottel denke immer erst dann wenn es zu spät ist. mfg.
Thomas Eckmann schrieb: > An solche Trottel denke immer erst dann wenn es zu spät ist. naja, schon wenn die Taste prellt hat man verloren.
was würde denn mit der zelle passieren wenn während des schreibens ein reset kommt? mehr als corrupted kanns ja ned werden oder
Und warum nicht einfach ein delay? z.B. 1s nach Loslassen der Taste und dann erst im EEPROM spielen...
Tobi schrieb: > Und warum nicht einfach ein delay? z.B. 1s nach Loslassen der Taste und > dann erst im EEPROM spielen... Und dann drückt der Benutzer in gerade diesem Moment wieder die "Reset"-Taste. ;)
Marcel Papst schrieb: > Und dann drückt der Benutzer in gerade diesem Moment wieder die > > "Reset"-Taste. ;) Dann kriegt der ein paar auf die Schnauze... Irgendwann muß man ja mal riskieren, das E²PROM zu benutzen. mfg.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.