Hi,
ich bin gerade dabei das I²C Modul meines PIC12F1840 zu konfigurieren.
Nun habe ich es geschafft, dass er einen Befehlt sendet, aber da stimmt
etwas nicht: Beim Start Bit sollte SCL ja High sein und SDA von High auf
Low wechseln. SDA passt soweit auch, aber SCL ist im ausgangszustand Low
statt High. Auch im übrigen Verlauf ist SCL wie invertiert. Gibt es
irgendeine Einstellung, die so ein Verhalten verursachen kann?
Viele Grüße
Wastel
Hallo!
Laut deiner Beschreibung könnten Leitungen von SDA und SCL vertauscht sein.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Vielen Dank!
Im Datenblatt habe ich natürlich schon jede Menge geschaut. Habe das komplette Kapitel durch und auch die Register mit dessen Hilfe bestimmt. Aber nun komme ich einfach nicht weiter :-|
SDA und SDL habe ich nicht vertauscht. Du meinst im Oszi, oder? Ich habe auf SDA auch mal eine 00h gelegt, da war dann recht klar, welcher welcher ist...
Hat noch Jemand eine Idee?
Ich kann dir nichtmehr helfen, da ich mich mit PICs nicht auskenne. Eventuell kann dir jemand Anderer helfen, der sich mit PICs auskennt. Hast du den Aufbau kontrolliert (jede Leitung verfolgt und geschaut ob es richtig angeschlossen ist)?
Kontrolliere den genauen Aufbau, und poste das Programm (könnte vielleicht auch ein Programfehler sein).
MfG Hannes
Trotzdem vielen Dank! Hier jetzt mal die wesentlichen code Zeilen, die ich für I2C geschrieben habe.
__CONFIG(FOSC_INTOSC & WDTE_OFF);
__CONFIG(LVP_OFF & BORV_25 & STVREN_ON & PLLEN_ON);
void main(void)
{
OSCCON = 0b01101000; //bit7: PLL, bit6-3: 4 MHz internal Clock
OSCSTAT |= 0b00100000; //Start-up Timer on
I2C_Init();
While(1)
SSP1BUF = 0b00000000;
}
void I2C_Init(void)
{
TRISA |= 0b00000110; //SDA and SCL as Input
//SSP1STAT
SSP1STATbits.SMP = 1; //slew rate controll off
SSP1STATbits.CKE = 1; //SMBus disabled
//SSP1CON1
SSP1CON1 = 0x00;
SSP1CON1bits.SSPEN = 1; //initiate SDA and SCL as serial port pins
SSP1CON1 |= 0b00001000; //Master mode
SSP1CON1bits.CKP = 0; //Initiate start condition on SDA and SCL
//SSP1CON2
SSP1CON2bits.GCEN = 0; //Interrupt when general call adr. (0x00) is received in the SSP1SR
SSP1CON2bits.RCEN = 1; //Receive mode enabled
SSP1CON2bits.PEN = 1; //Initiate stop condition enabled. Automatically cleared by hardware
SSP1CON2bits.RSEN = 1; //Repeated start condition
//SSP1CON3
SSP1CON3bits.SBCDE = 1; //Collison Interrupt enabled. See BCL1IF bit in PIR2
SSPADD = 0x09; //FOSC: 4 MHz, Fcy: 1MHz, Fclock
SSP1CON2bits.SEN = 1; //Initiate start condition on SDA and SCL
}
Im Datenblatt (DB) habe ich auf die schnelle nur das gefunden, was ich in Anhang kopieren versucht habe.
"Cäh" kenne ich gar nicht.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Da geht es doch um das Read/Write bit. Das ist das letzte Bit in der Adresse, die über SDA gesendet wird und sagt dem Slave, ob er im weiteren Verlauf empfangen oder senden soll. Auf die SCL Leitung sollte das aber keinen Einfluss haben, wenn ich es richtig verstanden habe...
Sorry, möglicherweise ist das nicht die richtige Erklärung, aber ich bin kein I²C Experte und blicke es nicht so schnell durch.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Bei mir hat es auch TAGE gedauert, bis ich mal eine Vorstellung hatte, wie ich das genau angehen muss.
Ob meine Register richtig beschrieben sind weiß ich aber immer noch nicht, einige Bits sind mir noch nicht so 100%ig klar...
Lesezeichen