PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega8 10bit speichern!



Torben22
14.03.2009, 22:45
Hallo!
Wie aus der Überschrift zu Entnehmen möchte ich 10bit abspeichern können, sodass ich nach einer Stromunterbrechung noch auf die 10bit zugreifen kann!

Hat jemand eine Idee wie und ob das überhaupt zu realisieren ist?


mfG Torben

Für jede Hilfe dankbar!

vklaffehn
14.03.2009, 23:02
Moin!
Ich würde sagen, die zehn Bit als Integer (16bit) verpacken und im Eeprom speichern wäre eine Möglichkeit.
Mfg
Volker

Torben22
14.03.2009, 23:12
Moin!
Ich würde sagen, die zehn Bit als Integer (16bit) verpacken und im Eeprom speichern wäre eine Möglichkeit.
Mfg
Volker

danke für die schnelle Antwort!

Wie speicher ich die denn in den Eeprom?
also befehl?
mfG Torben

vklaffehn
14.03.2009, 23:19
Moin!
Öhm... voll erwischt, ich habe von Bascom keine Ahnung, aber da gibt es bestimmt eine Hilfe, in der man nach 'Eeprom' suchen kann.
Oder bei Google : http://www.electro-tech-online.com/micro-controllers/84930-how-can-i-use-internal-eeprom-atmega-8-a.html
MfG
Volker

Jaecko
14.03.2009, 23:25
Einfach ne Variable im EEPROM anlegen (Stichwort ERAM) und beim erkennen des Stromausfalles oder schon davor abspeichern.

Angenommen XE ist die ERAM-Variable, XR enthält den Wert als normale Variable im RAM; dann siehts Speichern einfach so aus: XE = XR.

Torben22
14.03.2009, 23:34
ok danke!!

noch was kleines hinterhergeschoben..
ich hab bei variablen ja u.a. bit und byte zur auswahl!!
wenn ich eine byte variable anlege mit dem wert 00000000
und dann sage b=b+1
kommt dann 00000001
und danach 00000010 raus?

Sorry für die Fragen.. habe aber zur Zeit leider kein experimentier Board zur Verfügung... bzw. keine Controller

mfG Torben

Jaecko
14.03.2009, 23:40
jo genau:
...000
...001
...010
...011
...100... etc...

Torben22
14.03.2009, 23:42
nochmals Danke!!

Vitis
15.03.2009, 00:50
dim temp_word as word at &hd0
dim low_byte as byte at &hd0 overlay
dim high_byte as byte at &hd1 overlay
dim eram_high_byte as eram byte
dim eram_low_byte as eram byte

' beim Start nach Reset z.B.

high_byte = eram_high_byte
low_byte = eram_low_byte

do

incr temp_word
print temp_word
eram_high_byte = high_byte
eram_low_byte = low_byte
wait 1
loop

guenter1604
15.03.2009, 11:21
hallo,

dabei gilt es noch zu beachten: das EEPROM bitte nicht ständig mit Schreibattaken in der Doloopschleife vollballern!
erstens dauert das Schreiben ins EEPROM ewig, stellt die ganze Maschine hin und drittens ist das EEPROM nach ein paar Schreibzyklen wegen Altersschwäche hinüber ;-)

Quellenangabe:
Bascom Hilfe:
An important difference is that an ERAM variable can only be written to a maximum of 100.000 times. So only assign an ERAM variable when it is needed, and never use it in a loop or the ERAM will become unusable.

All interrupts are disabled while the EEPROM data is written. Interrupts are enabled automatic when the data is written.

Datasheet ATMega8:
Endurance: 100,000 Write/Erase Cycles

Vitis
15.03.2009, 11:35
war ja nur Pseudocode wie man die z.B. verwenden kann
zur Anschauung quasi.
Idealerweise nutzt man den brown out int für die Aktion

guenter1604
15.03.2009, 11:56
Hallo Vitis,

ich wollte nicht klugscheissen, sondern nur von vorne herein auf diese Fußangel hinweisen. Denn an so einem Fehler kann man sich zu tode suchen ;-).

Zum Brownout ebenfalls ein hilfreicher Auszug aus dem ATMega8 Datasheet:

Keep the AVR RESET active (low) during periods of insufficient power supply voltage. This can be done by enabling the internal Brown-out Detector (BOD). If the detection level of the internal BOD does not match the needed detection level, an external low VCC Reset Protection circuit can be used. If a reset occurs while a write operation is in progress, the write operation will be completed provided that the power supply voltage is sufficient.

Ceos
15.03.2009, 18:29
ich übersetz mal inhaltlich .....


Idealerweise nutzt man den brown out int für die Aktion
schlechte idee, denn BOD bedeutet zu wenig saft für zuverlässiges EEPROM schreiben ... man müsste ne usv für den µC vorsehn damit bei spannungsverlust nochgenug zeit zum speichern ist

Torben22
15.03.2009, 19:16
Danke für die schnellen und hilfreichen Antworten!

Vitis
15.03.2009, 22:57
kann man ... am Einfachsten über nen entsprechend großen
Elko vorm µC und / oder noch nen Spannungsteiler und
den Komparator mit nutzen ... n paar ms geht der AVR
auch vom Elko aus, so die Peripherie entsprechend
freigeschaltet wird.
Andere Methode ist natürlich den aktuellen wert zyklisch
per Timer alle paar Sekunden zu speichern ... 100000 Zyklen
sind schon ne ganze Menge ... je nach Verwendungszweck
natürlich (Laufzeit des Gesamtkustwerks z.B.) ...

kannst's aber auch ganz perfekt machen und n FRAM
dranknoten, dann sind die Zyklen unbegrenzt