Hallo zusammen. Ich hab mal eine Frage. Ich benutze für ein Projekt den PIC18F27J53: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en548695 http://ww1.microchip.com/downloads/en/DeviceDoc/39964B.pdf Laut angaben in der Übersicht und im Datenblatt hat er 2x MSSP (SPI ODER I²C). SPI1 ist Laut der Übersicht auf Seite 5 bei PIN 7,18,25,26 und I²C1 bei PIN 25,26. Zuerst hab ich mich gefragt, wo denn die SPI2/I²C2 PINs sind, bis ich gesehen hab, dass man die SDI,SDO,/SS,SCK "Anschlüsse" auf die RP-Pins Mappen kann. Doch ich würde gerne den I²C-Bus verwenden und die PINs bei dem das erste I²C Modul hinter ist sind in Benutzung. Wenn ich in der Sektion vom MSSP Nachgucke steht dort bei SPI: > • Serial Data Out (SDOx) – > RC7/CCP10/RX1/DT1/SDO1/RP18 or > SDO2/Remappable > • Serial Data In (SDIx) – > RB5/CCP5/KBI1/SDI1/SDA1/RP8 or > SDI2/Remappable > • Serial Clock (SCKx) – > RB4/CCP4/KBI0/SCK1/SCL1/RP7 or > SCK2/Remappable Bei I²C: > • Serial Clock (SCLx) – > RB4/CCP4/PMA1/KBI0 > RD0/PMD0/SCL2 > • Serial Data (SDAx) – > RB5/CCP5/PMA0/KBI1 > RD1/PMD1/SDA2 Doch bei dem 28pinner gibts kein PORTD und somit auch kein fixen SDA2/SCL2. Jetzt meine Frage: Soll ich jetzt davon ausgehen, dass die 28pinner zwar 2 SPI aber nur ein I²C Modul haben (wovon ich aber weder im DB noch in der Errata gelesen hab) oder ist dieser mit dem SDI2/SCK2 gemultiplext, so wie es bei den fix verbundenen ersten Modulen ist (wovon bei der Liste der Map-baren Peripherie-Pins aber auch nichts Stand)? Zudem steht auf Seite 97 die Fußnote (1): "Nur bei 44pinnern", die aber lediglich bei den PMA-Registern steht, nicht aber bei SSP2ADD, das ausschließlich vom I²C benötigt wird. Weiß dort jemand mehr? Vielen Dank schonmal
steht eindeutig im Datenblatt (Seite 291) " All members of the PIC18F47J53 family have two MSSP modules, designated as MSSP1 and MSSP2. The modules operate independently: • PIC18F4XJ53 devices – Both modules can be configured for either I2C or SPI communication • PIC18F2XJ53 devices: - MSSP1 can be used for either I2C or SPI communication - MSSP2 can be used only for SPI communication " Fazit >> Du hast nur EIN I2C Schnittstelle (MSSP1)
PICfan schrieb: > Fazit >> Du hast nur EIN I2C Schnittstelle (MSSP1) Was überhaupt kein Problem ist, wenn ein I2C nur als Master benötigt wird. I2C-Master geht mit 2 beliebigen IO-Pins. Peter
PICfan schrieb: > steht eindeutig im Datenblatt (Seite 291) Hm, hab ich wohl glatt überlesen :/ Danke Peter Dannegger schrieb: > Was überhaupt kein Problem ist, wenn ein I2C nur als Master benötigt > wird. > I2C-Master geht mit 2 beliebigen IO-Pins. Denke auch, ich werd Software-I²C mal probieren. Soll aber ein Slave werden. Wenn ich ansonsten auf SPI(2) ausweichen wollte, sehe ich das mit dem Mapping wie folgt richtig?: Ich würde SDI auf RP2 (PIN7) und SDO auf RP11 (PIN11) mappen wollen. In den Registern für die Peripherie-Eingänge wird der gewünschte RP-Pin angegeben und bei den Registern für die Ausgänge wird der "Code" für die Pinfunktion eingegeben, oder? Sprich:
1 | RPINR21 = 0x02; // RPINR21 -> SDI2 Register, 0x02 für RP2 |
2 | RPOR11 = 0x0A; // RPOR11 -> Register für RP11, 0x0A -> Code 10 -> SDO (Tabelle 10-14, S. 162) |
Michael Skropski schrieb: > Denke auch, ich werd Software-I²C mal probieren. Soll aber ein Slave > werden. Der Slave sollte immer das HW-I2C verwenden. Dann hat man nicht das Problem, daß andere Interrupts gerade laufen und dann Bits verloren gehen. Peter
Peter Dannegger schrieb: > Der Slave sollte immer das HW-I2C verwenden. > Dann hat man nicht das Problem, daß andere Interrupts gerade laufen und > dann Bits verloren gehen. Würde ich auch gerne. Aber ich kann die Pins leider nicht benutzen. Also werde ich das mal probieren und ansonsten auf SPI wechseln.
Michael Skropski schrieb: > Wenn ich ansonsten auf SPI(2) ausweichen wollte, sehe ich das mit dem > Mapping wie folgt richtig?: Seht soweit gut aus. Es fehlen aber noch die Clock (SCK2) und SlaveSelect (SS) pins.
PICfan schrieb: > Seht soweit gut aus. > > Es fehlen aber noch die Clock (SCK2) und SlaveSelect (SS) pins. Ok. Mir gings aber auch nur um das Verständnis, da hab ich dann ein Beispiel für einen Eingang und ein Beispiel für einen Ausgang genommen. Was passiert eigentlich, wenn man einem Pin 2/mehrere Zuweisungen macht. z.B.:
1 | RPINR21 = 0x02; // RPINR21 -> SDI2 Register, 0x02 für RP2 |
2 | RPOR2 = 0x0A; // RPOR11 -> Register für RP2, 0x0A -> Code 10 -> SDO2 (Tabelle 10-14, S. 162) |
oder:
1 | RPINR21 = 0x02; // RPINR21 -> SDI2 Register, 0x02 für RP2 |
2 | RPINR23 = 0x02; // RPINR23 -> /SS2 Register, 0x02 für RP2 |
Wäre es nicht logischer, für jeden Pin ein Register zu machen und dann den Code für den Ein- ODER Ausgang einzugeben? So könnte man keine Doppel/Mehrfachzuweisungen machen und man braucht nur eine "Art" die Pins zuzuweisen. Und das SDI ein Eingang und SDO ein Ausgang ist, ist ja klar. Oder gibt es dafür einen speziellen bzw plausiblen Grund?
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.