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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.