PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : integer im I2C EEprom speichern ?



stefan1275
06.03.2006, 16:18
Hy,

Habe ein Problem da man im I2C EEprom nur bytes speichern kann. Muß ich also die integer in 2 Bytes aufteilen und dann die Bytes ins EEProm nach einander senden.

Nun Mein Problem :
wie löst man das elegand in C einmal das aufteilen und wenn ich es wieder auslese die beiden Bytes wieder in ein Integer zurück wandeln.

Vitis
07.03.2006, 12:30
ich kenns von bascom mit shift
also erst den lowbyte in ein bytevariable,
dann shift right 4
dann wieder lowbyte in bytevariable (das wär dann ehemals der highbyte)

stefan1275
07.03.2006, 16:09
Genau Danke. Und wie gehts dann umgekehrt ?

izaseba
07.03.2006, 16:18
so vielleicht ?

uint16_t word = (highbyte<<8 ) + lowbyte;

Gruß Sebastian

Edit Quatsch: so müßte es gehen,

word = lowbyte;
word += (highbyte<<8 );

P.S. man sollte erst denken, und dann posten

izaseba
07.03.2006, 17:01
Da fällt mir noch was ein, eine Union sollte noch besser dafür geeignet sein...

Gruß Sebastian

skillii
07.03.2006, 17:03
@izaseba:

Die beiden Lösungen die du geschrieben hast bewirken genau das gleiche!

mfg skillii

izaseba
07.03.2006, 17:18
Die beiden Lösungen die du geschrieben hast bewirken genau das gleiche!

Das heißt ?
Beides daneben, oder beides richtig ?

Gruß Sebastian

skillii
07.03.2006, 17:31
Glaube schon, dass beide richtig sind!
Kann sein, dass es ein problem gibt wenn lowbyte und highbyte vom typ unsigned char sind.
Abhilfe: vor dem shiften nach unsigned int casten.

izaseba
07.03.2006, 17:35
ja, genau, beides richtig,
habe gerade mal kurz kompiliert, beide Lösungen führen zum richtigem Ergebnis.
Ich glaube der Compiler castet die schon automatisch, sonst hätte ich gedacht, daß ich bei den High Byte immer 0 rausbekomme.

Gruß Sebastian

SprinterSB
08.03.2006, 13:02
Rumshiften braicht man eigentlich nicht.
Guckst du hier (https://www.roboternetz.de/wissen/index.php/Avr-gcc#Daten_zerlegen.2Fzusammensetzen).

izaseba
08.03.2006, 16:13
Ja genau, eine union, hab ich schon oben gesagt.

Gruß Sebastian

skillii
08.03.2006, 20:53
Naja, aber für solche kleinen Sachen mache ich auch keine eigene Union....

skillii
08.03.2006, 21:02
Naja, aber für solche kleinen Sachen mache ich aber auch keine eigene Union....