Hallo
Ich hab im Internet eine Software I²C Implementierung gefunden (-> MAIN: i.c HEADER:i2c_software_master.h)
Mein I²C Bus ist auf 3.3V ausgelegt und die Implementierung ist für den 5V Master. Hierfür hab ich externe Pull-Up Widerstände - somit muss ich die internen vom Master ja deaktivieren (auskommentieren):
Code:
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
void sda_low()
{
I2C_PORT &= ~(1<<SDA); // internen Pull-Up aus
I2C_DDR |= (1<<I2C_DDR_REG_BIT); // Pin von SDA als Ausgang
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
void sda_high()
{
I2C_DDR &= ~(1<<I2C_DDR_REG_BIT); // Pin von SDA als Eingang
//I2C_PORT |= (1<<SDA); // internen Pull-Up an
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
////////////////////////////////////////////////////////////////////////////////////////////
#define I2C_SCL_LOW I2C_PORT &= ~(1 << SCL) // Clock Low Output
#define I2C_SCL_HIGH I2C_PORT |= (1 << SCL) // Clock High Output
Ist das richtig so? Oder muss ich da im eigentlichen Programmcode noch ändern?
Lesezeichen