Forum: Mikrocontroller und Digitale Elektronik Atmega-8, ein/ausschalten nur per Reset.pin?


von nachdenklicher (Gast)


Lesenswert?

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

von oldmax (Gast)


Lesenswert?

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

von Bernd M. (bernd_m)


Lesenswert?

100000 Schreibzyklen pro EEPROM Zelle.

Gruss
Bernd

von aaaa (Gast)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

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.

von nachdenklicher (Gast)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

Das geht dabei um das Löschen. Auslesen kann man das so oft wie man 
will.

mfg.

von Thomas E. (thomase)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

Jörg Wunsch schrieb:
> Reset während des EEPROM-Programmierens tödlich ist für die
>
> programmierte Zelle.

Das ist allerdings richtig.

mfg.

von Thomas E. (thomase)


Lesenswert?

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.

von nachdenklicher (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von bzt (Gast)


Lesenswert?

was würde denn mit der zelle passieren wenn während des schreibens ein 
reset kommt? mehr als corrupted kanns ja ned werden oder

von Tobi (Gast)


Lesenswert?

Und warum nicht einfach ein delay? z.B. 1s nach Loslassen der Taste und 
dann erst im EEPROM spielen...

von M. P. (phpmysqlfreak)


Lesenswert?

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. ;)

von Thomas E. (thomase)


Lesenswert?

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
Noch kein Account? Hier anmelden.