mikrocontroller.net

Forum: Compiler & IDEs I2C EEPROM Adressierung


Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin nicht ganz schlüssig, wie ich in eine I2C-EEPROM schreiben soll.
Hab mir die Routinen von P. Fleury dazu angesehen und da war auch ein
Beispiel dabei. Allerdings braucht das von mir verwendete EEProm zwei
Adressbytes. Ich bin mir jetzt nur nicht ganz sicher, ob man nun das
höherwertige Byte zuerst senden muss, oder das niederwertige...

void eeprom_writebyte(uint16_t addr, uint8_t value)
{
  i2c_start_wait(Dev24C256+I2C_WRITE);  // Device auswählen zum
Schreiben
  i2c_write(addr&0xFF);          // Adresse Lo-Byte
  i2c_write((addr&0xFF00)>>8);      // Adresse Hi-Byte

  i2c_write(value);
  i2c_stop();
}

Autor: Peter Sager (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss es auch nicht, aber ich würde einfach mal im Datenblatt
nachlesen...

Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für diesen hilfreichen Tipp. Da hab ich natürlich bereits
nachgesehen, leider reden die da aber nur von Bits, im speziellen von
MSB und LSB. Und zwar kommt das MSB zuerst.

Autor: Matze Klaus (phytomed)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich hatte das gleiche Problem und "glaube",
dass dies eine Lösung ist.
Dabei soll zuerst die ersten 8 Bits übertragen und
dann die letzten 8 Bits.
Die Routinen stammen von Fleury und sind nur
modifiziert.

Falls die "Aufteilung" der 16 Bits in
zwei mal 8 Bits nicht stimmt  bitte ich um Rückmeldeung.

Bis dann
Matthias

Autor: Matze Klaus (phytomed)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hoffentlich jetzt eine C-Source
Matthias

Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denke mir auch das das höherwertige Byte zuerst kommt, wie in deinem
Quelltext. Im Test funktioniert es auf jeden Fall. Hab dazu aber nicht
extra die Quelle umgeschrieben, sondern sende einfach zwei Bytes
nachein ander.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"leider reden die da aber nur von Bits, im speziellen von
MSB und LSB. Und zwar kommt das MSB zuerst."

Da hast Du doch die Antwort: Das MSB einer 16-Bit Adresse ist nun
einmal im oberen Byte und das LSB im unteren.

Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man significant mit Wertigkeit übersetzt kann man so drauf kommen.
Nur bin ich der Meinung, das es eher Bedeutungsvoll heisst...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Standard-Wörterbuch benutzt?

Die sind in dieser Branche nur bedingt hilfreich. Die Bedeutung des
Begriffs MSB ist in der DV dankenswert eindeutig. Auch bei Prozessoren,
deren Bit 0 links und Bit 31/63 rechts liegt (z.B. PowerPC), ist MSB
links.

Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Bit 0 das MSB ist, widerspricht das doch wiederum der Definition,
oder?

http://dict.leo.org/?search=most+significant+bit

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso? Auf PowerPC hat das Bit 0 den höchsten Stellenwert, Bit 63 den
geringsten, die Bitnummer ist einfach nur eine Nummer, kein
Stellenwert. Die Arithmetik hat IBM ja nicht neu erfunden, nur die
Nummerierung ist anders.

Generell landet man leicht in Teufel's Küche, wenn man zwar das
oberste Byte aber das unterste Bit mit 0 numeriert (umgekehrt auch, das
ward aber noch nicht gesichtet). Motorola hatte das bei 68000 verbrochen
und durfte beim 68020 deshalb umnummerieren - alte Bit-Befehle rechts
nach links, neue Bitfeldbefehle links nach rechts.

Autor: Tobias Gärtner (tobster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, kapiert... Ich bleibe dann doch lieber dabei, dass das MSB auch den
höhsten Zähler hat, das wirkt dann auch logischer... ;-)

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.