PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten dauerhaft speichern



meddie
15.10.2008, 15:21
Hallo Leute,

ich habe mal eine Frage, wie speichere ich Daten (Messergebnisse) in der Atmega32 dauerhaft ab, so daß nach einer Stromunterbrechung die Daten nicht verloren gehen?

Vielen Dank im Voraus.

ikarus_177
15.10.2008, 15:28
Hi,

du kannst doch die Daten ganz einfach im EEPROM des Megas ablegen:


dim x as eram byte
x = 5

... würde dir zum Beispiel den Wert 5 in eine freie Speicherstelle im EEPROM ablegen.

Viele Grüße

meddie
15.10.2008, 15:32
Ok und mit

dim x as eram byte
dim y as integer
y=x

dann bekommt y den wert 5 oder?

Wie ist es wenn ich z.b die messerwerte über einen längeren Zeitraum loggen möchte. Sagen wir 2 Temperaturwerte alle 15 Minuten wie müßte ichd iese Speichern?

Sorry für meine dummen Fragen, aber ich möchte es unbedingt lernen.
Und vielen Dank für die Antwort

ikarus_177
15.10.2008, 15:52
Hi,

dann muss du aber auch die ERAM-Speicherstelle als integer definieren, also
dim x as eram integer

du könntest ja theoretisch einen Timer oder so laufen lassen, sagen wir alle Sekunden einen Overflow, der dir eine Variable um 1 hinaufzählt. Bei 15 Minuten nimmt er die Messwerte auf, und legt sie in einem Array in die nächste Position ab.

Viele Grüße

meddie
15.10.2008, 15:55
Vielen Dank für Deine Antowrten. Ich werde es mal versuchen.

for_ro
15.10.2008, 19:23
Hallo meddie,
etwas Vorsicht beim Umgang mit dem EEProm kann übrigens nicht schaden.
Du kannst jede Speicherstelle nur eine begrenzte Anzahl mal beschreiben, so einige 10.000 mal. Danach kann es Schwierigkeiten geben.
Eine kleine fehlerhafte Schleife schafft das innerhalb einer Sekunde.

Gruß

Rolf

meddie
15.10.2008, 20:47
Oooh - gut zu wissen! Ich bin so ein Spezialist, ich hätte das bestimmt geschafft innerhalb weniger Minuten zu vernichten.

Vielen Dank

stefan_Z
16.10.2008, 00:07
Man hat übrigens noch andere Einschränkungen bei EERAM-Variablen.
Man kann damit nicht so rechnen wie mit anderen.
EEP_Variable = a +b
geht glaubich nicht.
Handbuch sagt: "ERAM variables only can be assigned to SRAM variables"

1hdsquad
16.10.2008, 05:03
Du könntest einen externen EEPROM oder Flash anhängen, der entweder nicht kaputt geht oder eben auswechselbar ist ;)

meddie
16.10.2008, 07:38
Ich dachte auch schon an mmc oder sd karten.
Aber ich habe es noch nciht verstanden wie man die beschreibt und ausliest.

Jaecko
16.10.2008, 07:59
Je nach Datenmenge (wenn der interne EEPROM reichen würde) wär ein I2C-EEPROM um einiges einfacher anzusteuern (I2C) als ne SD-Karte.

Andree-HB
16.10.2008, 08:16
Ich dachte auch schon an mmc oder sd karten


..oder Soetwas : http://www.elektor.de/jahrgang/2008/november/usb-stick-am-controller.710375.lynkx

meddie
16.10.2008, 08:58
Ich habe leider keinen Elektor ABO.

Andree-HB
16.10.2008, 11:11
Ich habe leider keinen Elektor ABO


Na und, ich auch nicht...es geht aber um den/das im Link angegebenen Chip/Gerät.

stefan_Z
16.10.2008, 11:13
Klar, die Vinculum Dinger sind nice.. aber auch teuer und nicht grad einfach zu programmieren...
Für ein paar Temperaturen reicht ein externes I2C EEPROM mit 512 pages locker aus...

for_ro
16.10.2008, 12:09
Je nach Datenmenge (wenn der interne EEPROM reichen würde) wär ein I2C-EEPROM um einiges einfacher anzusteuern (I2C) als ne SD-Karte.
Für kleine Datenmengen ist ein ext. EEPROM bestimmt einfacher. Zu bedenken ist aber auch, dass das Auslesen dann nur über den Controller geht. D.h. du musst auch hier im Programm noch etwas zusätzlich erstellen.
Direktes Auslesen per PC gibt's nicht.

Gruß

Rolf

Jaecko
16.10.2008, 12:53
naja klar, aber sofern der Controller nen UART hat (was ja eigentlich Standard sein dürfte) ist ja ne Dump-Funktion gleich eingebaut.

stekohl
16.10.2008, 21:23
Ist denn der Atmega32 ein muß? Kann es evtl. auch ein Atmega644 sein, falls es aufs DIL Gehäuse ankommt?
Falls Du auf den Atmega32 angewiesen bist, kannst Du ab hier aufhören weiterzulesen. :-)

Mit einem Atmega644:

Da wäre dann die Lösung per BASCOM und AVR-DOS die Daten einfach auf eine SD Karte zu speichern. Selbst auf einer per FAT16 formatierten Karte könnte man sogar bis zu 512 Datein im Hauptverzeichnis speichern.

Also zum Beispiel: Pro Tag eine Datei, in dieser Datei einfach per PRINT oder WRITE die Temperaturdaten schreiben im 15 Sek.-Takt.
Etwa so:

OPEN "Dateiname.ERW" for APPEND as #1
write#1,Messwert1,Messwert2,URHZEIT,DATUM
CLOSE #1

sieht dann per Editor in etwa so aus:
23.44,34.23,"12:23","12.10.2008"

Ich setzte gerne auf SD-Karten, da eben unschlagbar preiswert, relativ einfach anzusprechen (per AVR-DOS) und extrem einfach in der Komunikation mit dem PC. Man erspart sich RS-232 oder andere Schnittstellen.

Ich gehe gerade mit einem ATMEGA644 und einer SD-KARTE den umgekehrte Weg. (Daten auslesen) Ich habe auch zuerst an ein EEprom gedacht, dann aber eben das Problem gehabt die Daten noch per RS-232 in den Speicher zu schreiben oder zu lesen. Davon ab kann man die mit obiger Routine erzeugten Dateien mit Leichtigkeit in Excel einlesen oder per ODBC als textbasierte Datenbank nutzen.

Wenn man dann noch so Vergnügungssüchtig ist und dem Projekt eine DCF-77 oder andere Echtzeituhr verpasst wird es schon langsam edel.

Ich denke für Temperaturen jedoch zu Aufwendig, da sind ja fertige Thermologger preiswerter. (Natürlich nicht wenn man es auf jeden Fall selber machen will O:) )


Gruß,

Stephan

for_ro
16.10.2008, 21:32
Warum muss es denn dafür ein ATMEGA644 sein? Das kann sein MEGA32 doch auch alles.

Gruß

Rolf

stekohl
16.10.2008, 21:39
Warum muss es denn dafür ein ATMEGA644 sein? Das kann sein MEGA32 doch auch alles.

Gruß

Rolf
Ja läuft der Atmega32 denn auch mit AVR-DOS mit dem geringeren SRAM?!
Oder gibts für den Atmega32 ein angepasstes AVR-DOS?

Gruß,

Stephan

for_ro
16.10.2008, 21:51
2K reichen dafür.
Du musst dann die Constanten runtersetzen
Cfilehandles = 1 (je 524 Bytes)
Csepfathandle=0 (561 Bytes, =1 benötigt 1078 Bytes)

Gruß

Rolf

stekohl
16.10.2008, 21:58
2K reichen dafür.
Du musst dann die Constanten runtersetzen
Cfilehandles = 1 (je 524 Bytes)
Csepfathandle=0 (561 Bytes, =1 benötigt 1078 Bytes)

Gruß

Rolf

Ja stimmt, ich habs auch gerade in der Config gesehen. Habe aber immer die beiden Filehandles dringelassen.

Wenn es mit dem MEGA32 dann auch so geht ist ja die Lösung per SD-Karte eigentlich die "Benutzerfreundlichste".

Bauteile sind ja überschaubar, ein paar Widerstände und je nach Spezifikationsverliebtheit zwei Dioden für die 3,3 Volt oder eine 3,3 Volt Z-Diode. Die SD-Karten Kontaktleisten (Einschübe) bekommt man grad ja zum Nippespreis.

Gruß,

Stephan