Hallo, ich versuche schon seit einiger Zeit zwei PIC´s(16F877) mit I2C zu verbinden. Ein Master soll eine Hex Zahl an einen Slave rübersenden. Dies versuche ich mit C zu realisieren. Denn Master-Teil habe ich hinbekommen. Er sendet zuerst die Adresse und dann die Zahl. Nur der Slave-Teil will nicht richtig. In meinen SSPBUF (vom Slave) ist nur die Adresse drin. Die darauffolgende Zahl kommt nicht in den SSPBUF Speicher. Die ACK´s werden aber immer vom Slave angegeben, der Slave erkennt anscheinend die Informationen. Auch mein BF im SSPSTAT bleibt null. Wie bekomme ich nun die Hex Zahl in den Slave, um sie ausgelesen? Danke im voraus. Gruß Martin
Hallo! Hast du den Fehler behoben? Falls ja, würde es mich sehr interessieren wie bzw. woran es gelegen hat. Ich selbst will gleiches realisieren, Kommunikation zwischen zwei PICs über I²C; stecke aber mit selbigen Symptomen, wie du beschrieben hast, fest. Was ich noch von meinem Oszi entnehmen kann ist, dass der Slave (der sich eigentlich nicht angesprochen fühlt) mit dem 9.bit kein ACK zurück sendet. Codeschnipsel Slave: Mit
1 | OpenI2C(SLAVE_7, SLEW_OFF); //not interrupt driven |
2 | SSPADD=0b00001110; |
3 | while(1) |
4 | val = ReadI2C(); |
5 | ...
|
lese ich interessanter weise immer die Slave Adresse, welche vom Master am Bus gelegt wird. Wahrscheinlich wird alles vom Bus vom SSP Modul aufgeschnüffelt... Dennoch mit
1 | OpenI2C(SLAVE_7, SLEW_OFF); //not interrupt driven |
2 | SSPADD=0b00001110; |
3 | if (DataRdyI2C()){ |
4 | val = ReadI2C(); |
5 | ...
|
6 | }
|
springt der Code nie in den Block hinein (da sich der Slave anscheinend nicht angesprochen fühlt). Der Mastercode macht in etwa folgendes:
1 | OpenI2C(MASTER, SLEW_OFF); |
2 | SSPADD=39; //@actually 16MHz Clock |
3 | SSPCON1bits.WCOL = 0b0; //keine Ahung warum es vor dem ersten Write nötig ist |
4 | IdleI2C(); |
5 | StartI2C(); |
6 | IdleI2C(); |
7 | if(WriteI2C(slave_adress) == 0) //0b00001110 |
8 | WriteI2C(data); |
9 | IdleI2C(); |
10 | StopI2C(); |
Habe schon mit Brute-Force versucht die Adresse anzusprechen (eifacher 7-bit Counter), da ich dachte, die Bits werden wohlmöglich verkehrt auf den Bus abgelegt, aber keinen Erfolg damit erziehlt. Ich habe mit Assembler wenig zu schaffen gehabt, und will mich damit nicht viel beschäftigen müßen. Ich verwende die c18 Libraries von Microchip. Mittleweile (nach etwa drei Tage surfen und suchen) muss ich zugeben, dass man genügend Master Tutorials im Netz findet, aber keine wirklich brauchbare mit c18-Libs für Slaves. Ich kann nur hoffen, dass du dein Posting gelegentlich beobachtest, bzw. jeman anderes sich meinem Problemchen annimmt! :) lg & thx im vorhinein, r
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.