Forum: Mikrocontroller und Digitale Elektronik speicherplatzsparend auf eeprom schreiben


von Markus L. (Gast)


Lesenswert?

hallo,

ich hab an meinem AVR ein externes EEPROM hängen, das ich über den i2c 
beschreibe bzw. auslese. Zum Schreiben nutze ich dabei eine Funktion 
i2cwrite(); die Daten in Byteform an den Speicher sendet.

die Funktion:
unsigned char i2cwrite(unsigned char data);

damit sende ich meine Daten bislang in der Form

i2cwrite('1');
i2cwrite('9');
i2cwrite('8');
....

is natürlich totale Platzverschwendung, weil immer ein volles Byte für 
jede Ziffer verschwendet wird. War aber bis jetzt ok, da ich genug Platz 
hatte. Nachdem ich nun noch zusätzliche Daten speichern möchte, würd ich 
gern die int  bzw. float- Werte die ich abspeichere in Hex umwandeln um 
sie platzsparender zu archivieren.

Da gibts doch bestimmt ein intelligentes standardverfahren für
was meint ihr?

danke schon mal im voraus
Markus

von D. W. (dave) Benutzerseite


Lesenswert?

WAS willst du eigentlich von Anfang an speichern? Woher kommt die "198"? 
Wenns nen Integer ist, dann kannste einfach die einzelnen Bytes 
rausziehen (maskieren und shiften) und schiebst halt diese binärdaten (4 
Byte beim Integer, 4 bei ner Single) statt '1''9''8'.

Also, woher kommt die 198?

von ... (Gast)


Lesenswert?

Wenn du zwei Ziffern in ein Byte schreiben willst, dann nimm BCD Zahlen.

von Ping (Gast)


Lesenswert?

Vielleicht genügt auch das BCD-Format?

von Gast (Gast)


Lesenswert?

Wertebereich?
gib uns mal einen Tipp...

von Sven P. (Gast)


Lesenswert?

Du wirst nachher beim Auslesen sowieso wieder Logik dazwischenklemmen, 
weil mit der Lupe erkennt man nich allzu viel im EEProm. Also: Kritzel 
deine Werte als Rohdaten rein, d.h.: Nicht '1' und '2' und '3' als drei 
Bytes, sondern ein Byte mit 123.

von Jochen M. (taschenbuch)


Lesenswert?

>>Wenn du zwei Ziffern in ein Byte schreiben willst, dann nimm BCD Zahlen.

BCD alleine reicht dann nicht, es muss dann packed-BCD sein, also eine 
Ziffer je Nibble.

Jochen Müller

von Peter D. (peda)


Lesenswert?

Warum überhaupt die Zahlen erst umständlich in ASCII umwandeln?

Einfach so wie sie sind (1, 2 oder 4 Byte) binär abspeichern und gut is.


Peter

von Markus L. (Gast)


Lesenswert?

... ok war zugegebenermaßen etwas sparsam mit Informationen - 
gespeichert werden soll ein Integerwert und drei floatwerte der Form:

123198  12.234    36.575   123.56
253677  56.372    78.326   687.83
....


und danke schon mal für die zahlreichen Antworten

gruß
Markus

von Jochen M. (taschenbuch)


Lesenswert?

Markus,

123198  12.234    36.575   123.56
253677  56.372    78.326   687.83

in EINEM Byte kannst Du 2 Ziffern unterbringen, je Nibble also 1 Ziffer.
0000 = 0
0001 = 1
...
1001 = 9

die Codierungen 1010..1111 sind also ungenutzt, und du kannst damit das 
Komma sowie das Zahlenende kodieren. Alle o.g. Floatwerte passen dann in 
jeweils 3Byte.


Beispiel für 12.234

--BYTE---   --BYTE---   --BYTE---
0001 0010   1111 0010   0011 0100
1    2      ,    2      3    4


Jochen Müller

von Markus L. (Gast)


Lesenswert?

danke dir

klasse Tip - einfach, aber draufkommen muss man halt

damit kann ich was anfangen
gruß
Markus

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.