Forum: Mikrocontroller und Digitale Elektronik Messwerte in EEProm speichern


von Sven Müller (Gast)


Lesenswert?

Hallo,

Ich habe vor mit nem Mega32 Messwerte die ich mit nem mobilen Gerät (da
ist der Mega32 drin) speichere dann zuhause am PC auszulesen..
Soweit eigentlich nicht schwer, aber wie kann ich das genau in C
umsetzen??
Ich nutze Codevision..
Ich dachte mir ich nehme eine Variable als Pointer´, speichere meinen
Messwert an der Stelle wo der Pointer draufzeigt, erhöhe den Pointer um
eins, lese den nächsten Wert ein usw...
am PC dachte ich es mir so, Pointer auf ersten Wert stellen, Wert
lesen, auf 232 ausgeben, wertzuende senden, Pointer erhöhen...usw...

Aber wie nutze ich pointer in C? wo fängt der EEProm Speicher an? Wo
hört er auf? Habe schon mal beim Studium auf nem 8051 in Assembler mit
Pointern programmiert, die Funktiosweise ist mir klar, aber nicht wie
ich das in C umsetzen kann.,...


Danke schonmal, Sven

von Frankl (Gast)


Lesenswert?

Wo fängt der Speicher an/auf ? Siehe Datenblatt

von Martin Zunke (Gast)


Angehängte Dateien:

Lesenswert?

Schau mal hier rein....

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Also, in Codevision würde ich einfach die Meßwerte als Array definieren
(im Anfangsteil des Programms) mit dem Schlüsselwort eeprom davor. Um
den Rest kümmert sich Codevision.

Beispiel für eine solche Deklaration:

eeprom char messwert[200];

mit der Variablen Messwert[x] kannst Du dann hinterher ganz normal im
Programm arbeiten. Um die Umsetzung zum Eeprom hin kümmert sich der
Compiler. Bedenke nur, daß der Speicherplatz im Eeprom begrenzt ist und
der Eeprom auch nur eine begrenzte Lebensdauer von Schreib-/Lesezyklen
hat...

Gruß
KMT

von Sven Müller (Gast)


Lesenswert?

Ah so danke, besonders der letzte Tip hat mir viel weitergeholfen..
klar hat man nur begrenzte Kapazität.
wie kann ich denn prüfen ob das eeprom "voll"ist? oder kann ich da
nur den index des Arrays abfragen und vorher den maximal möglichen
ausrechnen?
Ansonsten ist das ja echt einfach...
Muss ich Interrups vorher sperren oder kümmert der Compiler sich
darum??

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Ganz wichtig vorweg: Meine Hinweise gelten nur unter der Voraussetzung,
daß du den internen, im AVR eingebauten, Eeprom benutzen willst.

Du solltest das Array mit der Anzahl der zu erwartenden Meßwerte vorher
ausrechnen und mit der Deklaration

eeprom int (oder was auch immer) messwert[200oder was auch immer];

am Anfang des Programmes definieren. Das Ausrechnen geht
folgendermaßen:

Anzahl der Einträge im Array * Platzverbrauch eines einzelnen Elementes
= Speicherbedarf.
Der Speicherbedarf muß kleiner sein als die Größe des Eeproms.

char belegt 1 Byte pro Eintrag, Integer 2 Bytes.

Beispiel: hast Du ein Eeprom mit 512 Byte Kapazität, dann kannst Du
entweder 512 Char-Felder belegen oder 256 Integer-Felder.

von crazy horse (Gast)


Lesenswert?

fast exakt, immer ein Byte weniger, also max. 511 char bzw 255
int-Variablen. CodeVision benutzt (aus gutem Grund!) die Adresse0 des
EEPROM nicht.

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.