www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik speicherplatzsparend auf eeprom schreiben


Autor: Markus L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du zwei Ziffern in ein Byte schreiben willst, dann nimm BCD Zahlen.

Autor: Ping (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht genügt auch das BCD-Format?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wertebereich?
gib uns mal einen Tipp...

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke dir

klasse Tip - einfach, aber draufkommen muss man halt

damit kann ich was anfangen
gruß
Markus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.