PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Adresse bei I2C Bus



Seppi1203
26.12.2006, 17:33
Hallo

Ich habe eine Frage, wie muss ich die Adresse des Ic's welche lautet &H74 bei der Bibliothek von fleury i2cmaster.h bei i2c_start (unsigned char addr) eingeben und was bedeudet das +I2C_WRITE in dieser Funktion

Bitte um rasche Antwort

Danke im voraus

uwegw
26.12.2006, 17:54
Am besten erst nen Namen vergeben, falls sich die Adresse mal ändert, und damit man sie sich besser merken kann:
#define adresse 0x74
Und dann
i2c_start(adresse+I2C_WRITE);

Das I2C_WRITE bzw. I2C_READ wählt aus, ob du den Slave auslesen oder beschreiben willst.
(Hintergrund für die Schreibweise als Addition zur Adresse: Bei I2C haben die eigentlichen Adressen nur seiben Bit. Das achte Bit bestimmt die Richtung der folgenden Datenübertragung. Es wird vom Master direkt nach der Startbedingung also ein Byte gesendet, die seiben Bit Adresse plus ein Bit Richtung. Daher werden nun die beiden Komponenten zusammengerechnet, um das vollständige Byte zu bilden. In der ic2master.h ist I2C_WRITE als 0 bzw. I2C_READ als 1 definiert.
)

Seppi1203
26.12.2006, 17:59
Hallo

Danke
Noch ein Problem wie gebe ich die Ports für Sda und Scl bekannt

Meine Ports sind Port C0 =Scl Port C1 =Sda

Kannst du mir das bitte noch schreiben

uwegw
26.12.2006, 18:49
Was für ein AVR-Typ? Sind die Pins in der Pinbelegung im Datenblatt als SCL/SDA gekennzeichnet (z.B. Mega16/32)? Dann brauchst du die Pins nicht mehr extra angeben. In diesem Fall verwendest du die Dateien ic2master.h und twimaster.c.
ic2master.S darf dann nicht im selben Ordner liegen.

Seppi1203
26.12.2006, 19:03
Hallo


Ich habe den Atmega 32

uwegw
26.12.2006, 19:18
also ic2master.h und twimaster.c verwenden, die Pinbelegungen sind dann schon richtig eingetragen.

Seppi1203
27.12.2006, 17:06
Hallo

Danke das mit dem I2C Bus funktioniert jetzt schon einmal

aber jetzt habe ich ein Problem mit dem schicken der Adresse an den Pcf 8574AP
Ich möchte das Port 0-2 und 5-7 aktiv sind

wie muss ich da die Adresse schicken

Yossarian
27.12.2006, 17:17
Hallo
Du mußt einfach die entsprechenden bits auf 0 oder 1 setzen.
Du liest das Byte ein,manipulierst die gewünschten Bits und schreibst das Byte.

Mit freundlichen Grüßen
Benno

Seppi1203
27.12.2006, 17:21
Hallo

und wie muss ich das machen

Ich bin Anfänger und kenn mich leider nicht so gut aus

könntest du bitte ein kurzes Beispiel schreiben

Yossarian
27.12.2006, 18:05
Hallo
bit 0 und 1 sollen auf null gesetzt werden,der Rest bleibt:
lese byte
and 1111 1100b
schreibe byte
zum setzen: or 0000 0011b
Mit freundlichen Grüßen
Benno

Seppi1203
28.12.2006, 09:56
Hallo



Wie muss ich das genau in die Funktion i2c_write schreiben

jagdfalke
12.03.2007, 19:39
ich hab zwar gerade erst mit gcc angefangen aber ich denke es müsste so gehen:

uint8_t theByte;
theByte = //byte einlesen
theByte &= ~(1<<0);
thebyte &= ~(1<<1);

bitte korrigiert mich falls ich mich irre. omg, ist der thread schon alt ... naja und wenns nur für meine gcc skills gut ist ;)