I2C mit ATmega32 und MCP23017

OP #2470412
Lesenswert?

Hallo,
ich möchte über einen ATmega 32 per I2C einen MCP23017 ansteuern und an 
die IOs LEDs ansteuern.

Ich habe jedoch Probleme den MCP23017 anzusprechen.

Hier habe ich meine Startfunktion doch ich bekomme kein ACK vom 23017.

TBool I2CStart(void){

    DDRC &=~ ((1<<DD0)|(1<<DD1));
    PORTC = (1<<DD0)|(1<<DD1);

    TWBR = 0x19;
    TWSR &= ~((1<<TWPS0) | (1<<TWPS1)); //Prescaler
    TWCR = ((1<<TWINT)|(1<<TWSTA)|(1<<TWEN)); //start condition

    while(!(TWCR & (1<<TWINT)));
    if((TWSR & 0xF8) != TW_START)   return EFALSE;

    return ETRUE;
}


Hat jemand Erfahrung mit dem MCP23017 und kann mir helfen?
Vielleicht hat wer eine brauchbaren Code für mich?
Gast #2485218
Lesenswert?

Hab den Code jetzt mit PC0/PC1 ausgebssert, ändert aber nichts.

Mit dem Befehl  while(!(TWCR & (1<<TWINT)));
warte ich ja bis das TWINT Flag gesetzt ist. Aufgrund der Start 
Condition müsste es ja gesetzt sein. Doch es wird nicht gesetzt!?!?
Gast #2488060
Lesenswert?

Anbei eine Lösung:

#include "i2cmaster.h"
#define CP2317  0x40 //Habe A0 bis A2 auf GND gelegt

int main(void)
{
   i2c_init();                 // initialize I2C library
   //Setzte GPB als Ausgänge
   i2c_start_wait(CP2317+I2C_WRITE);     //set device address +write 
mode
   i2c_write(0x01);                      //spreche IODIR von GPB an
   i2c_write(0x00);                      //setzte GPB auf Ausgänge
   i2c_stop();

   while(1)
  {
     i2c_start_wait(CP2317+I2C_WRITE);
     i2c_write(0x15);                        // write adresse = OLATB
     i2c_write(0xFF);                        // schalte alle Ausgänge 
ein
     i2c_stop();
     _delay_ms(500);
     i2c_start_wait(CP2317+I2C_WRITE);
     i2c_write(0x15);                        // write address = OLATB
     i2c_write(0x00);                        // schalte alle Ausgänge 
aus
     i2c_stop();
  }
}


lg MX

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren