Forum: Mikrocontroller und Digitale Elektronik DSPIC33F SPI- Problem mit Highpegel an SDO


von Christian (Gast)


Lesenswert?

Hallo zusammen,

ich möchte einen dsPIC33FJ12MC202 programmieren. Derzeit bin ich daran 
die SPI Schnittstelle flott zu machen.
Das ganze funktioniert auch soweit ganz gut. Die einzige Problematik, 
die sich mir stellt ist, dass der SDO Pegel nicht auf die (meines 
Erachtens) vorgesehenen 3,3V schnellt. sondern lediglich auf ca. 1V. Der 
Clock funktioniert völlig normal und erreicht den logischen High-Pegel 
von 3,3V.

Habt ihr Tipps, wie ich an diese Problematik herangehen sollte?

Vielen Dank im Vorraus

Christian

Hier der relevante Code :
1
// ### Basic includes ###
2
#include "p33fxxxx.h"
3
#include "math.h"
4
5
char test=0;
6
char test2=0;
7
8
int main(void)
9
{
10
  
11
  // ## Initialisierung ##
12
    
13
  // Wählen, welche ANx PINS analog oder digital genutzt werden (0=analog)
14
  AD1PCFGL = 0b1111111111111111;  // 15...0 : as digital
15
16
  //SPI initialisiert: Mode 00, SDI PinRP0, SDO PinRP1, SCK PinRP2!
17
  SPI1CON1bits.CKE=0;
18
  SPI1CON1bits.CKP=0;
19
  SPI1CON1bits.MSTEN=1;  // Master
20
  SPI1CON1bits.SPRE=0;  // Divide by 8
21
  SPI1CON1bits.PPRE=0;  // Divide by 64
22
  SPI1CON2 = 0x0000;
23
  SPI1STAT = 0x8000;
24
  __builtin_write_OSCCONL(OSCCON & ~(1<<6));  //Unlock Registers
25
  RPINR20bits.SDI1R=0;//SDI
26
  RPOR0bits.RP1R=7;//SDO
27
  RPOR1bits.RP2R=8;//SCK
28
  __builtin_write_OSCCONL(OSCCON | (1<<6));  // Lock Registers again
29
30
  //In der Main Schleife steht folgendes:
31
32
33
  while(1)
34
  {
35
    while (test<256)
36
    {
37
      SPI1BUF = test;
38
        while (!SPI1STATbits.SPIRBF);
39
        test2 = SPI1BUF;
40
        test++;
41
      }    
42
    test=0;
43
   }
44
}

von Max H. (hartl192)


Lesenswert?

Christian schrieb:
> Habt ihr Tipps, wie ich an diese Problematik herangehen sollte?
Ich würde nach einem Hardwarefehler (Lötbrücken,...) suchen und den IO 
mal über LATx Register wackeln lassen um zu testen ob der 
Ausgangstreiber kaputt ist.

von Chris B. (dekatz)


Lesenswert?

SDO auf RP1 - das ist auch der PGEC1 Anschluss. Hängt da der PICKIT3 / 
ICD3 noch dran? Eventuell stört der ja.

von Christian (Gast)


Lesenswert?

Zuerst mal, danke für die schnelle Antwort und dass ihr euch dafür zeit 
genommen habt:

Zu euren Vorschlägen:

Max H. schrieb:
> Ich würde nach einem Hardwarefehler (Lötbrücken,...) suchen

Das ganze ist auf einem Breadboard aufgebaut, ich habe allerdings 
bereits alles nochmal von vorn verkabelt, keine Änderung :(

> und den IO mal über LATx Register wackeln lassen um zu testen ob der
> Ausgangstreiber kaputt ist.

Ich habe es auch nach deinem Vorschlag wackeln lassen. Hier funktioniert 
er völlig normal.

Chris B. schrieb:
> SDO auf RP1 - das ist auch der PGEC1 Anschluss. Hängt da der PICKIT3 /
> ICD3 noch dran? Eventuell stört der ja.

JA, der Pickit3 hängt noch dran. Ich habe den Pin auf RP15 gelegt, 
selbes Ergebnis :(

von Frank K. (fchk)


Lesenswert?

Wo hast Du eigentlich den SDO-Pin auf Ausgang gestellt? Lösche mal das 
entsprechende Bit im TRISx-Register (x=A oder B) und probiere dann 
nochmal.

fchk

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
Noch kein Account? Hier anmelden.