Forum: Mikrocontroller und Digitale Elektronik EEPROM eines Mikrocontroller


von Horst G. (betelgeuze)


Lesenswert?

hallo

ich würde gerne wissen, wie viele reine messwerte sich maximal direkt in 
EEPROM des Mikrocontrollers ablegen lassen können. wie kann man so etwas 
berechnen? das datenblatt zu dem mikrocontroller lautet : 
http://www.atmel.com/dyn/resources/prod_documents/2545S.pdf (Kap. 23)
ich würde mich über eine schnelle, sinnvolle antwort sehr freuen!

lg

von Floh (Gast)


Lesenswert?

EEPROM-Speichergröße in Bytes geteilt durch den Speicherbedarf eines 
einzelnen Messergebnisses ergeben die maximale Anzahl der 
"Messspeicherplätze".
:-)

von Horst G. (betelgeuze)


Lesenswert?

wo finde ich diese beiden werte?

von l0wside (Gast)


Lesenswert?

Horst G. schrieb:
> wo finde ich diese beiden werte? im datenblatt kann ich sie gerade nicht
> finden

Die Größe Deiner einzelnen Messwerte kannst Du nur selber wissen, da 
hilft das Datenblatt nichts.

Der Speicherbereich, den Du zur Verfügung hast, ist vermutlich kein 
EEPROM, sondern eher Flash. Im Datenblatt steht so was, wenn Du es in 
einer Minute nicht findest, probiere es mal mit fünf.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Horst G. schrieb:
> wo finde ich diese beiden werte?

Steht doch schon in der 10. Zeile auf der 1. Seite des Datenblatts, 
welches Du hier angegeben hast:

256/512/512 Bytes EEPROM

Der erste Wert ist für ATMega48, dann ATMega88, dann ATMega168.

von Ben _. (burning_silicon)


Lesenswert?

AUUUAAAAAA.....

erstere steht im datenblatt... RTFM!!!

und bei zweitem ist deine aufgabe in der programmierung einen sinnvollen 
wert zu finden.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

l0wside schrieb:
> Die Größe Deiner einzelnen Messwerte kannst Du nur selber wissen, da
> hilft das Datenblatt nichts.
>
> Der Speicherbereich, den Du zur Verfügung hast, ist vermutlich kein
> EEPROM, sondern eher Flash. Im Datenblatt steht so was, wenn Du es in
> einer Minute nicht findest, probiere es mal mit fünf.

Erzähl mir mal, wie Du Messwerte im Flash speichern willst ;-)
Er meint schon EEPROM, das ist genau dafür gedacht.

von Horst G. (betelgeuze)


Lesenswert?

wie bekommt man den Speicherbedarf eines
einzelnen Messergebnisses?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Horst G. schrieb:
> wie bekommt man den Speicherbedarf eines
> einzelnen Messergebnisses?

Das kommt auf das Programm an, welches einen Messwert speichern will. 
Wenn das Programm zum Beispiel den Abstand Sonne <-> Erde in Millimetern 
speichern will, braucht es dafür erheblich mehr Speicher als ein 
Programm, welches lediglich eine Temperatur als Ganzzahl im Bereich 0 
bis 100 Grad speichern möchte.

Da musst Du schon mehr erzählen...

von ??? (Gast)


Lesenswert?

Das tut man wissen tun!!! ...oder man kann nicht programmieren.
Für diesen Fall ist das dann davon abhängig wie und in welcher 
Programmiersprache das Ganze realisiert werden soll. ...und wie genau 
was, womit, wie schnell, gemessen werden soll...

von Ben _. (burning_silicon)


Lesenswert?

er hat keinen plan was er wie programmieren will. ich denke es ist 
hoffnungslos...

von Horst G. (betelgeuze)


Lesenswert?

ich will die sonneneinstrahlung messen, an einem tag, und dazu soll das 
gerät messwerte nehmen, ich müsste aber wissen wieviele reine Messwerte 
sich maximal direkt im EEPROM des Mikrocontrollers ablegen lassen.
und die EEPROM-Speichergröße haben wir ja nun ;-P, aber mit dem 
Messwertsergebnis hätte ich noch ein Problem

von Horst G. (betelgeuze)


Lesenswert?

und es geht mit perl

von Ben _. (burning_silicon)


Lesenswert?

okay

du kannst entweder "sonne scheint" oder "sonne scheint nicht" erfassen. 
dann hast du eine auflösung von 1 bit und davon passen bei 1024 byte 
speichergröße 1024*8=8192 messwerte in das eeprom.

wenn du messen willst "die sonne scheint mit wert x von maximal 256" 
dann hast du eine auflösung von 8 bit, davon passen 1024*1=1024 
messwerte ins gleiche eeprom.

von Horst G. (betelgeuze)


Lesenswert?

ich habe eine solarzelle an den datenlogger angeschlossen, der die 
sonnenenergie in elektrischen strom umwandelt. dieser kann gemessen 
werden, und um diese messwerte geht es

von Ben _. (burning_silicon)


Lesenswert?

ein datenlogger wandelt also sonnenenergie in elektrischen strom um. 
aha.
okay hab ich wieder was gelernt.

wie wäre es eigentlich mit einem kommerziellen gerät? so zum kaufen und 
ablesen meine ich...

von ??? (Gast)


Lesenswert?

Wie groß ist der Datentyp der Messwertvariablen in der bevorzugten 
Programmiersprache? Wieviel davon passt in den vorhandenen Speicher...
Der Controller selbst wird mit Pearl nicht zurecht kommen... oder werden 
die Messwerte woanders gemessen und nur an den Controller übermittelt?
Wenn der Controller selber messen soll dann hat der ADC ja eine 
Auflösung die dem Datenblatt zu entnehmen ist. Wenn man dann von 
10Bit/Messwert ausgeht braucht man aber doch erstmal 2 Byte pro wert. 
Falls das nicht ausreicht gibts auch externe eeproms.

von Glaskugel (Gast)


Lesenswert?

Situation:

1. Auflösung und Wertebereich der Messwerte unbekannt.

Schlussfolgerung:

1. Speichergrösse eines Messwertes nicht bestimmbar.

von xy (Gast)


Lesenswert?

wäre vielleicht sinnvoll den Mathe-Eintrag „Division” zu wiederholen.

von oldmax (Gast)


Lesenswert?

Hi
Vorsicht! EEProm ist nicht für permanentes Besschreiben gedacht, eher 
für die Ablage von Parametern. Der Grund ist, das Schreibzugriffe 
begrenzt sind. Gut, wenn man nur einmal am Tag Daten ablegt, mag es noch 
gehen, bei ca.100000 Schreibzugriffen  kommt man etwa auf eine 
Lebenszeit von ... hmm 273 Jahren... aber, wenn man ständig Werte 
ablegt, sind die Jahre schnell vergangen.
Gruß oldmax

von xy (Gast)


Lesenswert?

du könntest die Messwerte auch auf eine SD-Karte speichern.

von Ulrich P. (uprinz)


Lesenswert?

Natürlich kann man auf einem EEPROM kontinuierlich Werte abspeichern, es 
kommt auf das "wie" und das "wie oft" an.

Ich glaube nicht, dass der OP in der Lage ist eine SD-Card zu 
beschreiben, wenn er schon am internen EEPROM scheitert, bzw an der 
Größe seiner noch unbekannten Variablen im RAM/FLASH/EEPROM.

Sei's drum und noch mal zum Mitschreiben für den OP:

1) Du hast eine Kiste, die (wie auch immer) die eingestrahlte Energie 
einer Solarzelle in einen Messwert verwandelt. Du sagst, das sei ein 
Datenlogger.
Frage: Warum nutzt Du dann nicht die Funktion für die ein Datenlogger 
erfunden wurde und logst diesen Messwert auf den üblicherweise in einem 
solchen Gerät vorhandenen Speicher?

2) Gehen wir mal davon aus, dass Du (noch) keinen Datenlogger hast, 
sondern Deine Frage dahin zielt einen solchen zu bauen:
Frage: Hast Du schon erfolgreich die Energie, die die Solarzelle abgibt 
ein einen brauchbaren Messwert umgewandelt, also eine Spannung oder 
einen Strom, der sich mit der Helligkeit ändert? Hast Du diesen Messwert 
schon in irgend einer Art digitalisiert?

3) Wie programmierst Du den Controller? Assembler oder C oder irgend 
etwas anderes? Bei C gibt es leider eine Falle und die heißt int. Eine 
Variable des Typs int ist per Definition immer so groß, wie die 
Prozessor-Architektur ABER mindestens 16 Bit. D.h. obwohl Du auf einem 
8Bit Prozessor programmierst, ist eine Variable int x (oder unsigned int 
x) zwei Byte groß. Das macht aber nichts, denn wenn wir davon ausgehen, 
dass Du die Messwerte selber digitalisieren willst, dann können wir auch 
davon ausgehen, dass Du das mit Hilfe der im Chip vorhandenen 
Analog-Digital-Wandler (ADC) machen willst und diese geben 10 Bit breite 
Werte aus.

Es ist nun Deine Entscheidung, ob Du diese 10Bit Werte in ein int 
schreibst und damit immer hlab so viele Werte in das EEPROM schreiben 
kannst, wie dieses groß ist, oder eben die Genauigkeit reduzierst und 
z.B. die unteren beiden Bits kappst. Dann passen genau so viele 
Messwerte in das EEPROM wie es groß ist.

4) EEPROM dauernd beschreiben:
Ist für eine solche Anwendung eigentlich irrelevant. Nehmen wir an, wir 
haben 1024 Bytes EEPROM und ein int (besser uint16_t) Messwert:
512 Werte passen ins EEPROM.
Wir messen jede Minute einmal und das EEPROM garantiert 100k 
Schreibzyklen:
100000/60/24, dann würde das EEPROM 69 Tage durchhalten. Ist aber nicht 
richtig, denn wir schreiben nur bei jedem 512ten Mal ein und die selbe 
Zelle, also 69*512=35328 Tage. Der Logger sollte also die nächsten 90 
Jahre durchhalten.
Dabei muss man aber beachten, dass EEPROMs unterschiedliche aufgebaut 
sein können. Bei externen EEPROMs gibt es ein Paging und eine Page (oft 
32 Bytes) wird immer auf einmal geschrieben, egal ob ich ein oder alle 
Bytes der Page ändere. Hier muss man dan ausrechnen, ob man es sich 
einfach macht und mit dem Faktor /32 leben kann, oder ob man immer erst 
mal 32 Messwerte im RAM sammelt und dann auf einmal in eine Page 
schreibt.

5) Was muss man bei einem Datenlogger noch so beachten:
Na ins EEPROM sollte man nicht nur die reinen Daten schreiben, sondern 
auch eine Information, von wann sie stammen. Der Datensatz ist also doch 
größer als zunächst angenommen. Man kann hier jetzt beliebig großen 
Aufwand treiben und z.B. die Sekunden seid Zeitpunkt X zählen oder man 
sorgt dafür, dass das EEPROM nicht überschrieben wird, bevor nicht alle 
Werte ausgelesen wurden oder was auch immer. Man kann auch ein 
komprimiertes Zeitstempelchen austüfteln, also Tag/Monat/Jahr/HH/MM in 
1,5 Byte quetschen.
Letzteres würde die Anzahl der Messwert im EEPROM noch einmal reduzieren 
es aber auch ermöglichen mit nur einem weiteren Byte sogar noch einen 
12Bit ADC Wert abzuspeichern.

Aber ich warte jetzt mal auf dem OP, ob der hier noch folgt oder folgen 
kann, vielleicht müssen  wir ja noch weiter vorne anfangen.

Gruß, Ulrich

von Horst G. (betelgeuze)


Lesenswert?

Hallo, da bin ich wieder^^


ich habe mir nun ein wenig Gedanken über meine weitere Vergehensweise 
gemacht.

Ich habe folgendes gegeben: 8-Bit-Mikrocontroller mit einer 
10-Bit-Auflösug. Dieser hat einen EEPROM von 512 Bytes (laut 
Datenblatt). Es werden Werte von 0 bis 1023 ausgegeben.

--> 8 Bit sind 1 Byte. Also muss ich doch die 512 Bytes in Bit umrechen 
und das Ergebnis dann durch 10 teilen.

Stimmt meine Schlussfolgerung oder habe ich da noch einen Fehler drin?


Gruß

Euer Horst G.

von Toni (Gast)


Lesenswert?

Um Mit Radio Eriwan zu sprechen:
Im Prinzip ja.
ABER:
Das hat, zumindet für Leute mit geringer bis keiner 
Programmiererfahrung,
so seine Tücken. Du muß die Bits passend "zusammenschieben" bis ein Byte
"voll" ist. Blöderweise lassen sich die Bits im EEPROM nämlich nur von
"1" (gelöschter Zustand) auf "0" programmieren.
Ohne Not würde ich mir den Aufwand spren und da halt ein serielles
EEPROM ranhängen und gut ist, die Dinger kosten doch nicht die Welt,
und haben auch sonst noch Vorteile: Mehr Speicherplatz, und in der
Regel die 10 Fache Anzahl an Schreibzyklen.

von Horst G. (betelgeuze)


Lesenswert?

Danke für die Kaufempfehlung, aber der gegebene Speicherplatz sollte 
reichen, um eine Langzeitmessung von 12 Stunden durchzuführen.


Wie kann ich das ohne einen seriellen EEPROM errechnen?

von Helfer (Gast)


Lesenswert?

Speichergröße des EEPROMS in Bytes durch Platzbedarf eines Messwertes 
in Bytes durch Anzahl der Messungen sollte größer 1 sein.

von Lukas K. (carrotindustries)


Lesenswert?

Horst G. schrieb:
> Danke für die Kaufempfehlung, aber der gegebene Speicherplatz sollte
> reichen, um eine Langzeitmessung von 12 Stunden durchzuführen.
>
>
> Wie kann ich das ohne einen seriellen EEPROM errechnen?

Du reduzierst die 10bit auf 8bit bzw. speicherst nur die Differenz
Da die Sonne nicht rast, reicht ein Messwert/Minute
Das macht 1Byte*60min*12h=720Byte
wo ist das Problem?

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

> um eine Langzeitmessung von 12 Stunden durchzuführen.

> Wie kann ich das ohne einen seriellen EEPROM errechnen?

indem du die Anzahl der Messungen innerhalb der 12 Stunden noch mal mit 
hinzu  multiplizierst. Wenn du jede Stunde einen Messwert aufnimmst, 
dann hast du in 12 Stunden 1* 12 = 12 Messwerte. Wenn du jede Minute 
einen Messwert aufnimmst, dann hast du 60 * 12 = 720 Messwerte

Wenn jeder Messwert 2 Bytes benötigt, dann brauchst du
12 * 2 = 24 Bytes bis
720 * 2 = 1440 bytes

Wenn du auf 8 bit reduzierst, dann brauchst du halt nur die Hälfte davon

Hey, wir sind hier bei Grundrechenarten, das ist dir schon klar? Was 
blockiert dich dermaßen, das du schon an solchen Fragestellungen 
scheiterst????

von Guru (Gast)


Lesenswert?

Bei allem Respekt vor Dir als Mensch, Horst,
habe ich den starken Eindruck,
dass sowohl die Fragestellungen als auch die Antworten
weit über Deinen Horizont gehen.

Das I-Tüpfelchen war die Tatsache, dass Du die Transferleistung von:
"Ich habe 512 Körbe in die jeweils 8 Äpfel passen und bekomme jeden Tag 
10 Äpfel. Wieviele Tage lang kann ich jeweils eine komplette Lieferung 
in die Körbe tun?" auf die Frage wieviele 10-Bit Messwerte einen 512Byte 
Speicher passen nicht alleine fertig bringst.

Entschuldige, aber das ist Stoff der 4. oder 5. Klasse; elementare 
Arithmetik.

Falls Du nicht gerade ein sehr begabter 5t-Klässler bist, der bei der 
Division gerade mal eine Aussetzer hatte, solltest Du dieses Thema nicht 
weiter verfolgen. Falls Du ein Erwachsener bist, der nur einfach nie 
Interesse für Mathematik hatte, dann richte Dich darauf ein ein paar 
Jahre lang die Grundkenntnisse nachzuholen.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

ich erwarte noch die Frage: WIe bekomme ich nun die 720 1-byte Messwerte 
in die 512 Byte EEPROM rein? Kan man das irgendwie zippen?

von Max D. (Firma: No RISC, no fun.) (metalfan)


Lesenswert?

Lass mich raten:
Intel Leibniz Challenge ...

von Sam .. (sam1994)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> Wenn jeder Messwert 2 Bytes benötigt, dann brauchst du

Mann braucht aber nur 10bit. Deswegen nimmt einen Puffer im Ram von 4 * 
2Byte. Dann macht man aus 4*10bit = 40bit = 5byte. Das ganze dürfte nur 
aus schiebeoperationen bestehen.

von Ro R. (rond_es)


Lesenswert?

Ulrich hat sich ne Menge Mühe gemacht, und viele Infos gegeben. Horst 
könnte mal darauf eingehen, so kommt man weiter.

von Silvan K. (silvan) Benutzerseite


Lesenswert?

Max D. schrieb:
> Lass mich raten:
> Intel Leibniz Challenge ...

Jep. Und wir haben einen fertig programmierten μC bekommen.
Ist also nichts mit Flash oder ext. EEPROM.

Bitte keine weiteren Hilfestellungen mehr! Das wäre den anderen 
Teilnehmern gegenüber unfair!

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.