Forum: Mikrocontroller und Digitale Elektronik Master Bus Collision Detect bei I2C


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Liebes Forum,

Ich bin gerade dabei eine I2C-Verbindung zu erstellen. Ich verwende den 
PIC24FJ128GB204 (=Master) und einen digitalen Temperatur-Sensor 
(=Slave).

Für den Anfang wollte ich einfach mal nur etwas an den Slave senden, um 
auf ein ACK abzuwarten.
Aber bereits hier habe ich ein Problem.
Sobald ich die Condition starten will (I2C1CONLbits.SEN = 1) tut sich 
leider nichts. Ich habe mein Projekt debuggt und habe festgestellt, dass 
sobald ich das Bit SEN setzen will, es nicht gesetzt wird. Jedoch wird 
stattdessen im Status-Register angezeigt, dass ein "Master Bus 
Collision" detektiert worden ist (Bit 10 im I2CXSTAT: I2C Status 
Register).

Ein möglicher Fehler könnte laut meinem Recherche-Ergebnis eine falsche 
Baud-Rate sein.
Zum Berechnen dieser habe ich folgende Annahmen gemacht:
FSCL = 400kHz
PGDx = 104ns
FCY = 16MHz

Daraus ergibt sich nach der Formel (siehe Anhang) eine Baudrate von: 17 
(in Hex: 11)

Weiß jemand von euch, was ich falsch mache?

Danke für eure Hilfe!

Ein Ausschnitt meines Codes:

1
#define FOSC    (32000000ULL)
2
#define FCY (FOSC/2)
3
4
int main(void)
5
{
6
    
7
8
    TRISBbits.TRISB8 = 0; //SCL1 is output
9
    TRISBbits.TRISB9 = 0; // SDA1 is output
10
11
    I2C1CONLbits.I2CEN = 0; //disable I2C1 module
12
13
    I2C1BRG = 0x0011;      //set baudrate
14
15
    I2C1CONLbits.DISSLW = 0;  // Disable slew rate control
16
    IFS1bits.MI2C1IF = 0;   // Clear Interrupt
17
18
    I2C1CONLbits.I2CEN = 1;  // Enable I2C Mode
19
20
    I2C1CONLbits.SEN = 1;        //start condition
21
22
23
    return (EXIT_SUCCESS);
24
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Pullups vergessen?

von Stefan (Gast)


Lesenswert?

Hi,
nein Pull-Ups wurden nicht vergessen.
Habe auch unterschiedliche R-Werte versucht: 1k - 2,2k und 4,7k

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.