Forum: Mikrocontroller und Digitale Elektronik PIC: I2C mit MCP23008


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Paddy (Gast)


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:
1
void i2cSendByteNEW(unsigned char addressModule, unsigned char addressReg, unsigned char data)
2
{
3
  PIR1bits.SSPIF = 0;    //SSPIF Bit löschen  
4
  SSPCON2bits.SEN = 1;    //Bus übernehmen
5
  while(!PIR1bits.SSPIF);    //Warten bis Bus übernommen
6
  PIR1bits.SSPIF = 0;    //SSPIF zurücksetzen
7
  SSPBUF = (addressModule&0xFE); //Adresse des MCP23008   
8
                
9
  while(SSPCON2bits.ACKSTAT);  //Wait for ACK      
10
  PIR1bits.SSPIF = 0;    //SSPIF Bit löschen  
11
  SSPBUF = addressReg;    //Adresse des Registers 
12
  while(SSPCON2bits.ACKSTAT);  //Wait for ACK  
13
  PIR1bits.SSPIF = 0;
14
  SSPBUF = data;      //Byte Senden
15
  while(SSPCON2bits.ACKSTAT);  //Wait for ACK
16
  PIR1bits.SSPIF = 0;  
17
  SSPCON2bits.PEN = 1;    //Bus freigeben
18
  while(!PIR1bits.SSPIF);
19
  PIR1bits.SSPIF = 0;    //SSPIF zurücksetzen
20
}//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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.