dsPIC33 SPI-Schnittstelle

Gast #2986944
Lesenswert?
• ▲
▼
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
(Firma: Promaxx.net) #2987676
Lesenswert?
• ▲
▼
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...
Gast #2988095
Lesenswert?
• ▲
▼
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?
Gast #2988126
Lesenswert?
• ▲
▼
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!
Gast #2988175
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.