ASUR0
26.12.2010, 16:06
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:
//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 */
Bei QDEL habe ich Msleep(50) geschrieben, damit der Bus nicht so schnell ist.
Der Rest ist gleich geblieben.
Mein Programm (Ausschnitt)
InitI2C();
unsigned char val = 0;
while(1)
{
StatusLED(GREEN);
StartI2C(0);
WriteI2C(val);
StopI2C();
StatusLED(RED);
Msleep(1000);
}
Als Adresse habe ich 0x00, damit er auf jedem Fall anspricht.
Da val = 0, sollte der PCF mit allen Pins auf LOW gehen, passiert aber nicht.
Vielen Dank schon mal im voraus
Gruß
ASUR0
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:
//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 */
Bei QDEL habe ich Msleep(50) geschrieben, damit der Bus nicht so schnell ist.
Der Rest ist gleich geblieben.
Mein Programm (Ausschnitt)
InitI2C();
unsigned char val = 0;
while(1)
{
StatusLED(GREEN);
StartI2C(0);
WriteI2C(val);
StopI2C();
StatusLED(RED);
Msleep(1000);
}
Als Adresse habe ich 0x00, damit er auf jedem Fall anspricht.
Da val = 0, sollte der PCF mit allen Pins auf LOW gehen, passiert aber nicht.
Vielen Dank schon mal im voraus
Gruß
ASUR0