Zum schreiben muss die Adresse 1 ,3,5,7....
sein zum Lesen 0,2,4,6,8....
I²C hat 7 Adressbits 0..128 das 8. Bit legt die schreib/Leserichtung fest. ungerade Adressen "schreiben", gerade Adressen "lesen".
Gruß Richard
Hallo Leute,
ich versuche nun seit zwei Tagen, eine Porterweiterung(PCF8574) über I2C anzusteuern, aber es will einfach nicht klappen.
Da ich es über die Liniensensorenpin's laufen lasse, muss ich I2C emulieren. Ich verwende den Code aus der AsuroLib i2c.h und i2c.c
Hardware:Pin 3 ist SDA und Pin 2 ist SCL. Jeweils mit 4,7k Pull-Up. Verbunden mit dem PCF. Ich habe alles nachgemessen: Verbindung zum Asuro steht, Strom da. Habe auch zwei LED's an SDA und SCL angeschlossen: blinken, funkt.
Software: Ich habe die Lib an folgender Stelle geändert:
Bei QDEL habe ich Msleep(50) geschrieben, damit der Bus nicht so schnell ist.Code://Meine Pins #define SDA 3 #define SCL 2 #define NOP asm volatile("nop") /*<! No Operation */ #define QDEL Msleep(50) /*<! 1/4 Delay */ #define HDEL QDEL; QDEL /*<! 1/2 Delay */
Der Rest ist gleich geblieben.
Mein Programm (Ausschnitt)
Als Adresse habe ich 0x00, damit er auf jedem Fall anspricht.Code:InitI2C(); unsigned char val = 0; while(1) { StatusLED(GREEN); StartI2C(0); WriteI2C(val); StopI2C(); StatusLED(RED); Msleep(1000); }
Da val = 0, sollte der PCF mit allen Pins auf LOW gehen, passiert aber nicht.
Vielen Dank schon mal im voraus
Gruß
ASUR0
Zum schreiben muss die Adresse 1 ,3,5,7....
sein zum Lesen 0,2,4,6,8....
I²C hat 7 Adressbits 0..128 das 8. Bit legt die schreib/Leserichtung fest. ungerade Adressen "schreiben", gerade Adressen "lesen".
Gruß Richard
>> Als Adresse habe ich 0x00, damit er auf jedem Fall anspricht.
mögliche Adressen des PCF8574 (A) je nach Beschaltung der A0-A2 ...
Gruss RalfCode:BIT --------7--6--5--4---3--2--1--0 PCF8574 = 0 1 0 0 A2 A1 A0 RW 40 / 42 / 44 / 46 / 48 / 4A / 4C / 4E (WRITE) 41 / 43 / 45 / 47 / 49 / 4B / 4D / 4F (READ) BIT --------7--6--5--4---3--2--1--0 PCF8574A = 0 1 1 1 A2 A1 A0 RW 70 / 72 / 74 / 76 / 78 / 7A / 7C / 7E (WRITE) 71 / 73 / 75 / 77 / 79 / 7B / 7D / 7F (READ)
Soweit ich weiß ist das genau anders herum: Read = 1, Write = 0Zum schreiben muss die Adresse 1 ,3,5,7....
sein zum Lesen 0,2,4,6,8....
Ich habe den PCF8574AP, alle Adresspins auf GND, d.h. meine Adresse zum schreiben lautet 0b01110000.mögliche Adressen des PCF8574 (A) je nach Beschaltung der A0-A2 ...
Die habe ich jetzt ausprobiert und, was für ein Wunder, es klappt!
Nun ist die Frage: Warum funktioniert der general call nicht? Darauf müsste der PCF doch auch ansprechen, oder?
Hallo ASUR0,
PCF8574A A0=0 / A1=0 / A2=0 == Basisadresse (70h)
das R/W Bit ist wie folgt zu setzen:
0 = Write = 70h
1 = Read = 71h
siehe auch hier:
http://www.best-microcontroller-proj...-tutorial.html
Gruss Ralf
@ASUR0
gelöst ? ... woran hat es denn gelegen ?
Schääääähm, Du hast Recht. Dumm wenn man nicht einmal Abschreiben kann.Zitat von ASUR0
Gruß Richard
@Feuering
general call funktioniert nicht, man muss die "echte" Adresse verwenden.
Lesezeichen