speicherplatzsparend auf eeprom schreiben

Gast #956829
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
Gast #956870
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.
Gast #956906
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
#956931
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren