Hallo zusammen, ich habe mal eine ganz blöde Frage. Ich möchte mit einem dspic33fj32mc204 eine SPI Kommunikation aufbauen. Nun kann ich im Datenblatt aber einfach nicht finden, auf welchen Pins eigentlich die Datenleitungen SDO und SDI liegen. Kann mir bitte jemand sagen wo es steht, bzw. was ich wissen muss um es herauszulesen? Viele Grüße
Die meisten IO-Pins haben beim DSPIC33 keine feste Pin-Zuordnung, sondern können auf beliebige Pins gemappt werden, s. Kapitel "Peripheral Pin Select" im Datenblatt.
Vielleicht heißen sie nur anders, sehr üblich sind MOSI und MISO. Wenn Dein anzusteuernder Chip als Slave arbeitet, dann ist SDO(slave) = MISO und SDI(slave) = MOSI. Wenn Master dann andersrum.
Danke für die schnellen Antworten! Ich denke damit werde ich weiter kommen. :)
Hallo, die wirst Du wohl mappen müssen. Es gibt Pins, die fest belegt sind. Dann gibt es Pins, auf die Funktionen gemappt werden können (Matrix) und dann kann es auch noch 5V-tolerante Pins geben. Ist tricky, aber geht, wenn man es mal verstanden hat. Da müssen diese Zuordnungen entlocked und nachher wieder gelocked werden...
Nochmal danke für die Antworten. Ich habe mir das Thema Mapping jetzt in Ruhe angesehen und mal Aufgeschrieben, was ich alles tun muss. Ich schreibe es mal hier in Detail auf. Wäre super, wenn Ihr mir bestätigen könntet, dass ich es richtig mache um die Fehlersuche zu verkürzen. Was ihr wissen müsst: mein SCK liegt auf Pin 44 (RB8 bzw. RP8) und SDO auf Pin 1 (RB9 bzw RP9). 1. I/O definieren
1 | TRISBbits.TRISB8 = 0; //Pin 44 auf Ausgang |
2 | TRISBbits.TRISB9 = 0; //Pin 1 Ausgang |
2. Entsperren
1 | OSCCON &= 0xFF00; |
2 | OSCCON |= 0x0046; //Unlock-Sequenz laut Datenblatt |
3 | OSCCON |= 0x0057; //Unlock-Sequenz laut Datenblatt |
4 | OSCCONbits.IOLOCK = 0; //Entsperren |
3. Pin-Funktionen definieren
1 | RPOR4 = 0x0708; //RP8 = SCK, RP9 = SDO |
4. Sperren
1 | OSCCON &= 0xFF46; //Unlock-Sequenz laut Datenblatt |
2 | OSCCON |= 0x0057; //Unlock-Sequenz laut Datenblatt |
3 | OSCCONbits.IOLOCK = 1; //Sperren |
Alternativ zu Schritt 2 und 4 kann man mit dem C30 Compiler laut Datenblatt auch das hier schreiben.
1 | __builtin_write_OSCCONL(value) |
2 | __builtin_write_OSCCONH(value) |
Aber was wäre hier mein value?
Das geht so: Unlock:
1 | uint8 oscconl_u8; |
2 | oscconl_u8 = OSCCONL; |
3 | oscconl_u8 &= ~0x40; |
4 | __builtin_write_OSCCONL( oscconl_u8 ); |
Lock:
1 | uint8 oscconl_u8; |
2 | oscconl_u8 = OSCCONL; |
3 | oscconl_u8 |= 0x40; |
4 | __builtin_write_OSCCONL( oscconl_u8 ); |
PS: Was ist mit SDI? Mußt Du auch noch zuordnen!
Hallo Bronco, SDI habe ich weggelassen, weil ich nur ein LCD ansteuern möchte. Dafür genügt doch SDO, oder? Danke für den Code. Wäre meine Variante denn auch richtig oder ist da ein Fehler drin?
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.