robo_tom_24
16.06.2012, 14:50
Hallo
Ich hab im Internet eine Software I²C Implementierung gefunden (-> MAIN: 22585 HEADER:22586)
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):
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
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?
Ich hab im Internet eine Software I²C Implementierung gefunden (-> MAIN: 22585 HEADER:22586)
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):
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
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?