mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC: I2C mit MCP23008


Autor: Paddy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Elektroniker,

bastel seit ein paar Tagen mit einem PIC4550 und dem I/O-Expander 
MCP23008 von Microchip rum. Ich verwende den I2C-Bus zum ersten Mal und 
habe prompt ein Problem:

Wenn ich einen Output-Pin setzen möchte und dazu in das OLAT-Register 
schreibe, so schreibt er zwar ins OLAT, übernimmt den Wert von dort aber 
nicht ins GPIO-Register.

Sämtliche Pins sind als Output konfiguriert über IODIR-Register = 0x00.
Desweiteren sieht mein I2CSendByte-Code (programmiert mit dem 
C18-Compiler) folgendermaßen aus:
void i2cSendByteNEW(unsigned char addressModule, unsigned char addressReg, unsigned char data)
{
  PIR1bits.SSPIF = 0;    //SSPIF Bit löschen  
  SSPCON2bits.SEN = 1;    //Bus übernehmen
  while(!PIR1bits.SSPIF);    //Warten bis Bus übernommen
  PIR1bits.SSPIF = 0;    //SSPIF zurücksetzen
  SSPBUF = (addressModule&0xFE); //Adresse des MCP23008   
                
  while(SSPCON2bits.ACKSTAT);  //Wait for ACK      
  PIR1bits.SSPIF = 0;    //SSPIF Bit löschen  
  SSPBUF = addressReg;    //Adresse des Registers 
  while(SSPCON2bits.ACKSTAT);  //Wait for ACK  
  PIR1bits.SSPIF = 0;
  SSPBUF = data;      //Byte Senden
  while(SSPCON2bits.ACKSTAT);  //Wait for ACK
  PIR1bits.SSPIF = 0;  
  SSPCON2bits.PEN = 1;    //Bus freigeben
  while(!PIR1bits.SSPIF);
  PIR1bits.SSPIF = 0;    //SSPIF zurücksetzen
}//End i2cSendByteNEW
Interessant ist, wie gesagt, dass korrekt gesendet wird (wenn ich OLAT 
auslese stimmts), dies aber nicht auf GPIO übertragen wird.

Für Hinweise auf Fehler wäre ich sehr dankbar!

Vielen Dank für die Mühe

MfG

Patrick

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.