PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sehr viele Daten speichern - wie am günstigsten?



Björn
19.07.2005, 09:46
Moin!

Ich möchte mit einem AVR (am liebsten ATmega8) jede Sekunde einen Wert speichern. Es genügt wenn dies eine Ganzzahl ist und diese liegt zwischen 0-200. Es soll ca. 15 Minuten aufgezeichnet werden.
Also 15 * 60 = 900 Werte.
Fragen: Welcher Zahltyp? - Welcher Speicherort (oder einfach im Flash)?
Es ist nicht unbedingt notwendig dass die Daten auch nach Strom aus noch abrufbar sind, wäre aber gut (dann müssten sie in den EEPROM, damit habe ich aber noch nicht gearbeitet).

Gruß, Björn

uwegw
19.07.2005, 10:12
zahlentyp am besten als byte, das vereinfacht auch den speicherzugriff...

das interne flash hält nur 10000 zyklen aus, ist also wohl nciht die beste wahl. das interne eeprom hat nur 512 bye, reicht also nicht.

du könnest zb ein externes eeprom per i2c anschließen. nen kilobyte für 27 cent...

Björn
19.07.2005, 10:31
Hi,

ist das kompliziert die Daten dort reinzuschreiben und wieder auszulesen?

Gruß, Björn

Björn
19.07.2005, 10:52
Meinst du sowas?

Klick mich (http://www.reichelt.de/index.html?SID=14Qty8z9S4AQ4AACw1RkA5909c3c69723fc 3ba544a961e6eb6aec;LASTACTION=3;SORT=artikel.artnr ;WG=0;SUCHE=Eeprom;ARTIKEL=EE%2024LC01%20B%2FP;STA RT=0;END=16;FAQSEARCH=Microchip%20EEPROM%20seriell %2C%202%2C5V;FAQTHEME=-1;FAQSEARCHTYPE=0;STATIC=0;FC=669;PROVID=0;TITEL=0 ;ARTIKELID=40069;FAQAUTO=1;ACTION=3;GRUPPE=A32)

Gruß, Björn

hrei
19.07.2005, 13:09
Meinst du sowas?



in der Richtung. gebräuchlicher sind die 24c64/256/512 Typen.

Mit Bascom ist das auch recht einfach zu handhaben. Ein Beispielprogramm alá "Klein Erna" hänge ich mal dran, in der Praxis geht das eleganter, so wird aber das Prinzip IMHO am deutlichsten:




'----------------- EEPROM Test für Mega168-Experimenter -----------------------
'Juli 2005 - HR
'------------------------------------------------------------------------------

$regfile = "m168def.dat" 'bzw "m8def.dat"
$crystal = 7372800

Enable Interrupts

Declare Sub Read_eeprom()
Declare Sub Write_eeprom()

Dim Address As Word At &H112
Dim Address_low As Byte At &H112 Overlay
Dim Address_high As Byte At &H113 Overlay

Dim I As Word
Dim Temp As Byte
Dim Dev As Byte

Dim Wert As Byte

Const Ext_eeprom = 162 'I2C Geräteadresse ggf. anpassen

'------------------------------------------------------------------------------

Cursor Off

Cls
Lcd "EEPROM TEST"
Locate 2 , 1
Lcd "SCHREIBE"
'------------------------------------------
Dev = Ext_eeprom

For Address = 0 To 49
Wert = Address 'schreibt die Adresse als Wert
Call Write_eeprom() 'ins EEprom
Next

Wait 2
Cls
Lcd " LESE"

For Address = 0 To 49
Call Read_eeprom()
Locate 2 , 1
Lcd "ADR: " ; Address ; " " ; "Wert: " ; Wert
Wait 1 ' Pause , damit man was sieht
Next

Wait 2

Cls
Lcd "FERTIG"

End
'------------------------------------------------------
'- Byte (wert) auf EEprom Adresse (address) speichern -
'------------------------------------------------------
Sub Write_eeprom()

I2cstart
I2cwbyte Dev
I2cwbyte Address_high
I2cwbyte Address_low
I2cwbyte Wert
I2cstop

Waitms 2

End Sub
'-----------------------------------------------------------------
'--- Byte (wert) von EEprom Adresse (address) lesen ---
'-----------------------------------------------------------------
Sub Read_eeprom()
Dim Devread As Byte

Devread = Dev + 1

I2cstart
I2cwbyte Dev
I2cwbyte Address_high
I2cwbyte Address_low
I2cstop
I2cstart
I2cwbyte Devread
I2crbyte Wert , Nack
I2cstop

End Sub
'------------------------------------------------------------------------------



Grüße
Henrik

FoCus
19.07.2005, 13:18
Moin!
Es ist nicht unbedingt notwendig dass die Daten auch nach Strom aus noch abrufbar sind, ...
Gruß, Björn

Ich würds im RAM speichern... somit hast du keine Probleme mit I2C, Anzahl der Speicherzugriffe und obendrein bekommst du schnelle Zugriffszeiten.

Gruss
Michael

hrei
19.07.2005, 13:37
Ich würds im RAM speichern... somit hast du keine Probleme mit I2C, Anzahl der Speicherzugriffe und obendrein bekommst du schnelle Zugriffszeiten.


Na ja, 1 KB Ram ist ja nun so üppig auch wieder nicht. Was die begrenzte Speicherlebensdauer anbelangt: durchschnittlich 1.000.000 Zyklen im High Endurence Block der Eeproms sind ein Haufen Zeug und im normalen Bereich sind auch die 100.000 nicht sooo schnell erreicht. Für kritische Scherze (und aus Bequemlickkeit, weil auch direkt am PC auszuwerten) nutze ich zur Messdatenerfassung gerne Chipkarten (genau das selbe wie die 8-pol DIP-Käferchen, nur schneller rein und rausgesteckt).

Grüße
Henrik

Björn
19.07.2005, 13:46
Oh danke!

Gruß, Björn

SprinterSB
19.07.2005, 13:48
Das interne Ram eines Mega8 sollte dicke reichen, wenn der restliche Programmcode es nicht aufisst. Es bleiben immerhin 124 Bytes Ram übrig, so viel wie zB ein 90S2313 überhaupt an Ram hat!

Unter dem Aspekt "günstig", ist also die Ram-Variante der Gewinner. Sowohl was Aufwand in Hardware (gar keiner) als auch in Software (praktisch keiner) betrifft.

uwegw
19.07.2005, 14:09
man sollte aber vorher abklären, was der mega8 sonst noch so zu rechnen hat, um die messwerte zu erfassen und ggf auszugeben (mit fließkommazahlen zwischendrin kann mans wohl knicken)... ich weiß nicht wie gut man bascom beibrigen kann dass es sich mit 124 byte ram zufrieden gibt... asm wär vielleicht die bessere wahl, wenn sich der aufwand im rest des programms in grenzen hält...

Björn
19.07.2005, 14:21
Hi,

wieviel Byte Variablen passen denn theoretisch in den ATmega8 RAM?

Gruß, Björn

hrei
19.07.2005, 14:38
Hi,

wieviel Byte Variablen passen denn theoretisch in den ATmega8 RAM?


Die Antwort ist einfach :-): Das wären 1024. Nun fristt Du bereits 900 mit Deinen Messwerten. Frame und die Stacks wollen auch noch mal Platz (abhängig vom Programm im Mittel so zwischen 32 und 128 Byte). Wenn Dein restliches Programm auch nur etwas mehr tut, als 1+1 zusammenzurechnen, kannst Du diesen "RAM Vorschlag" sofort vergessen.

Das, liebe Leute, macht es mir so schwer, immer die Ruhe zu bewahren und mich freundlich auszudrücken. Ein solcher Vorschlag ist praxisfremd und schlicht dumm, wenn man nicht ganz genau die Anforderungen an das Programm kennt. Dann könnte man auch gezielt evtl. einen anderen Prozessor vorschlagen.

Uwe hatte die frage aus Ingenieursicht bereits hinreichend beantrwortet, ich habe mir erlaubt ein Beispiel auszuführen (und auch auf Funkttionstüchtigkeit zu überprüfen).

Wenn mir jetzt mal wieder jemand mit "Meinung" kommt und "man könne das auch anders ausdrücken", möge er mich Götz von Berlichingen.

Henrik

Björn
19.07.2005, 14:41
Dann ist das mit intern auf jeden Fall zu wenig.

Gruß, Björn

uwegw
19.07.2005, 15:12
Dann ist das mit intern auf jeden Fall zu wenig.



gib doch mal genau an, was der avr sonst noch so zu rechne hat! wie holt er sich die messwerte? wie genau werden sie vor dem speichern noch ausgewertet/aufbereitet?

Björn
19.07.2005, 15:34
Also - Die Messwerte kommen über den A/D Wandler und müssen in Stromstärke umgewandelt gespeichert werden.
Im Programm muss auch Platz sein für Max232 Operationen.

@uwegw: Du bist ja Insider dies betreffend, weil es für das Gerät mit der Stromstärke ist.

uwegw
19.07.2005, 16:16
wenn man beim umrechnen auf kommazahlen verzichten kann, könnte das ganze noch gut in nen mega8 passen. eine einfache möglichkeit wäre zb, das umrechnen später am PC erledigen zu lassen und nur die rohdaten zu übertragen.

wenn der PC sowieso während der gesamten messung angeschlossen ist, könnte man aber auch genausogut auf eine vollständige zwischenspeicherung im avr verzichten und die werte einzeln oder zb jede minute einmal 60 werte blockweise übertragen...

PicNick
19.07.2005, 16:34
Kommen die Werte übern den Bereich (0-200) tatsächlich verteilt ?
Vielleicht kann man ein wenig zusammenquetschen und RLE machen

Edit : oder Huffman

Björn
19.07.2005, 18:04
Jop. 0-200 verteilt und der PC kommt erst später ins Spiel. Zwischenspeichern ist also zwingend notwentig.

Gruß, Björn

hrei
19.07.2005, 18:21
Kommen die Werte übern den Bereich (0-200) tatsächlich verteilt ?
Vielleicht kann man ein wenig zusammenquetschen und RLE machen

Edit : oder Huffman

Ja, ist ja auch alles so wenig rechenaufwendig und braucht ja gaaar kein Ram. Mann, für jemanden der großzügig Verwarnungen ausspricht bist Du ziemlich einfach gestrickt.
Nochmal die Frage: Willst Du die Leute hier verarschen?

Das ist beleidigend? Ja! -und das mit Absicht. Auf ein Forum, daß sich solche Moderatoren leistet,. kann ich gut verzichten. Götz von Berlichingen und tschüß.
Habt Euch doch alle weiter ganz doll lieb, laßt Schaltungen im Forum stehen, die zur Zerstörung des µC führen können und wenn dann Kunden mal die in der Produktbeschreibung angegebenen Eigenschaften anmahnen, geht eine Runde ins Forum kuscheln.

Henrik -letzer Beitrag-

Björn
19.07.2005, 18:53
Kann der AVR keine Daten im Flash ablegen - der ist ja 8K groß. Da schreib ich ja auch immer das Programm rein.

Gruß, Björn

uwegw
19.07.2005, 19:07
dann würd ich nen eeprom nehmen. ist dann auch praktischer, weil du auch zwischen messung und übertragung den stromabschalten kannst...

und wenn du schonmal dabei bist kannst du gleich ein paar cent mehr für nen 4 oder 8kbyte eeprom investiern, dann passen sogar mehrere messreihen rein... oder du kannst zb auch die akkuspannung messen und mitspeichern...

Björn
19.07.2005, 19:09
Jo - das dachte ich mir auch schon.

Gruß, Björn