Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Schon wieder Verständnisproblem: Eeprom.c2 Kategorie: I²C-Bus (von AndrĂ© H. - 30.06.2004 18:08)
Als Antwort auf Re: Schon wieder Verständnisproblem: Eeprom.c2 von Christoph Fuest - 30.06.2004 15:42
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Christoph,

Du verstehst leider eine Kleinigkeit falsch. Und Wille hat es etwas unglücklich erklärt. (nicht böse gemeint)

Ersteinmal etwas Grundlagen:
Das Adressbyte, welches mit der Start-Bedingung gesendet wird hat 8 Bit.
Nennen wir diese B7 bis B0. B7 ist dabei das MSB und wird zuerst gesendet. B0 ist das LSB
und wird folglich zuletzt gesendet.
Diese Byteadresse besteht aus meist aus drei Teilen.
- Einen festen der bausteinspezifisch ist. Dies sind immer die höchswertigen Bits.
  Bei den meisten Bausteinen besteht dieser Teil aus 4 Bit. (z.B. EEProms bis 64kBit, PCF8574 etc.)
  Bei manchen kann dieser auch aus 6 oder gar nur einem Bit bestehen. (Oder bei µController
  mit Hardware I²C, welche als Slave fungieren können, ist kein Bit fest.)
- Das nächste wäre ein z.B. durch Adresspins benutzerdefinierbarer Teil.
  Bei EEProms bis 64kBit und z.B. PCF8574-Portexpander sind dies 3Bit.
  Bei EEProms ab 128kBit bis 512kBit sind es nur zwei Bit.
- Der dritte Teil gehört eigentlich nicht zur Adresse selbst. Das Bit0 bestimmt nur ob gelesen oder
  geschrieben werden soll.

Es gibt beim I²C-Bus, wenn man vom Extended Mode absieht, lediglich 128 mögliche Adressen.

Nun zu Deinem Problem mit den drei Adressleitungen:
Diese Adressleitungen können entweder mit GND oder der Versorgung(5V) verbunden werden.
Ist ein Pin mit GND verbunden, so ist es logisch 0=low, ist dieser mit 5V verbunden, so ist dies
logisch 1=high.
Es gibt hierbei 8 verschiedene Kombinationen die Adressleitungen entweder mit
GND oder 5V zu verbinden.(3Bit = 2Âł = 8)
Du bildest sozusagen eine Binärzahl bestehend aus 3 Bit aus der Adressleitung.
Wenn alle Pins mit GND verbunden sind, so sähe das so aus:
A2  A1  A0
GND GND GND
 0   0   0  = 0b000 = 0


Sind z.B. A2 mit GND und A1,A0 mit 5V verbunden:
A2  A1  A0
GND 5V  5V
 0   1   1  = 0b011 = 3


Wenn Du jetzt selbst per i2c.c2 ohne eeprom.c2 das EEProm ansprechen möchtest,
so mu� Du die Adresse selbst zusammensetzen. Dafür benötigst Du das DAtenblatt des EEProms
fĂĽr den festen Teil der Adresse.
Nehmen wir einmal das letzte Beispiel an:
Zum Schreiben mĂĽsstest Du folgendes Byte senden:
1 0 1 0 A2 A1 A0 R/W (=Aufbau des Adressbytes)
0b10100110 = 0xA6 = 166

Zum Lesen sähe das Byte so aus:
0b10100111 = 0xA7 = 167
Hier wird das R/W-Bit gesetzt.

Dies alles muĂ?t Du aber nicht wissen.
FĂĽr Dich reicht es, die Sub-Adresse aus A0 bis A2 entsprechend dem Bitmuster zu bilden
und im "Highlevel-Treiber" anzugeben.
Bei der Angabe der Subadresse muĂ?t Du hier nicht beachten, ob Du lesen oder schreiben willst.
Beim letzten Beispiel wäre die Subadresse 3. Wenn es Dir einfacher fällt, kannst Du diese
auch binär angeben: 0b011. (A2 A1 A0)

Bei all meinen Modulen wird immer nur die Subadresse, welche aus den Adress-Jumpern
gebildet wird, angegeben.
Adresse 0 im entsprechenden C2-Modul ist hierbei immer die unterste mögliche Adresse für
einen I²C-Baustein. Diese hat i.d.R. nichts direkt mit der Busadresse selbst zu tun.

Ich glaube jetzt wird es doch einmal Zeit, da� ich den schon seit längeren für CC2Net.de geplanten
I²C-Bereich angehe. Jedoch fehlt mir dazu leider die Zeit. Denn vom geplanten Umfang her wäre
das schon ein halbes Buch. ;-)

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: