Forum: Mikrocontroller und Digitale Elektronik dsPIC33 I2C Slave Problem


von Harry (Gast)


Lesenswert?

Hallo zusammen!

Ich habe folgendes Problem und komme irgendwie nicht weiter. Ich 
verwende einen dsPIC33EP64MC204. Die AD-Wandler und 2 Timer 
funktionieren bereits wie gewollt. Allerdings bekomme ich den Controller 
nicht als I2C Slave zum funktionieren. An RC5 hängt SCL und an RC4 hängt 
SDA. Zudem initialisiere ich das Modul wie folgt:

  // I2C Slave initialisieren.
  I2C1CON = 0x8000;
  I2C1ADD = 0b00000010;
  I2C1MSK = 0;
  // I2C Slave Interrupts einstellen.
  IFS1bits.SI2C1IF = 0;
  IEC1bits.SI2C1IE = 1;

Zudem verwende ich folgenden Interrupt:

  void _attribute_ ( ( interrupt, no_auto_psv ) ) _SI2C1Interrupt ( 
void )
  {
     // Some Code...
     return;
  }

Vom Master sende ich folgende 3 Bytes (Dezimalschreibweise): 4, 1, 30
Die Bytes werden auch geschickt. Mein Logic Analizer zeigt mir das 
richtig an. Dort sehe ich folgenden Ablauf:

START, 4, 1, 30, STOP

Nun würde ich erwarten, dass der PIC beim empfangen des Adressbytes in 
den Interrupt springt, damit ich dort die empfangenen Werte lesen kann. 
Nur leider tut er das nicht. Den gleichen Code verwende ich bereits mit 
einem PIC24. Dort funktioniert alles gut. Übersehe ich etwas? Ich hoffe 
irgendjemand hat einen Tipp für mich. Bin langsam am verzweifeln :(

Vielen Dank!
euer Harry

von hmmm (Gast)


Lesenswert?

Nur als Beispiel:
// FPOR
#pragma config ALTI2C1 = OFF        // Alternate I2C1 pins (I2C1 mapped 
to SDA1/SCL1 pins)
#pragma config ALTI2C2 = OFF        // Alternate I2C2 pins (I2C2 mapped 
to SDA2/SCL2 pins)

oder:
// Make all the ANx pins as digital pins
    ANSELC = 0;


    // Configre SCA/SDA pin as open-drain. This may change from device 
to device.
    //Refer the datasheet for more information.
    ODCCbits.ODCCx = 0;
    ODCCbits.ODCCx = 0;

    I2C1BRG = xxx;

von Harry (Gast)


Lesenswert?

Danke für die Antwort, aber an all dem kann es nicht liegen. Das habe 
ich alles schon kontrolliert. Es ist ja nicht das erstemal, dass ich 
mich mit I2C rumärgere, aber so ratlos wie gerade war ich dabei noch 
nie..

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.