PIC32 Problem mit SPI - SDI Port PIC32MRX270F256D Hallo Ich ärgere mich mit SPI und PIC32 herum. Gott sei dank habe ich ein Oszi und dabei ist mir aufgefallen, das die SDO Signale vom Slave richtig ausgegeben werden nur mein In Port verfälscht diese. Manchmal funktioniert es auch ohne Probleme, also Kann SDI und SDO NICHT vertauscht sein Man kann ja Ports mappen, SCK ist fest verdrahtet aber SDI und SDO sind beschränkt auswählbar. Ich habe das mit zwei verschiedenen Ports Probiert mit dem gleichen Ergebnis. Ich habe die Leitung zum Sklaven aufgetrennt und messe an Port RB5 0,52V Ich selber glaube der PIC ist das Problem, aber vielleicht hat ja jemand eine Idee ?! Bei SPI1 sieht man den Slave Ausgang aufgetrennt zum Master, beim zweiten Bild die verbundene Version
:
Bearbeitet durch User
Wechsle mal R42 in deiner Schaltung aus. Und in Zeile 42 in deinem Programm ist auch ein Fehler.
Hallo Was Merkwürdig ist, das der Eingangsport RB5 - SPI den blauen Graph ergibt. Wie gesagt die Leitung zum Slave SDO ist aufgetrennt
Martin M. schrieb: > Was Merkwürdig ist, das der Eingangsport RB5 - SPI > den blauen Graph ergibt. Die Masse ist ja gar nicht angeschlossen.
Martin M. schrieb: > SCK ist fest verdrahtet aber SDI und SDO > sind beschränkt auswählbar. Hellseher schrieb: > Und in Zeile 42 in deinem > Programm ist auch ein Fehler. Da liegt dein Problem
Hallo, nur so als Tipp, falls noch nicht geschehen. Manchmal hilft auch ein Blick ins Errata... PIC32MRX270F256D ist die Bezeichung richtig so?
Also Ich habe da wohl ein Verständnis Problem. Senden ohne Master SDI funkioniert wunderbar. Ich habe das mal auf einen PIC32MX150f128b Probiert mit dem selben Ergebnis. Ich mache etwas mit dem Master SDI Mapping falsch SDI1R = 0b0001; // Gemappt SDI 1 nach RB5 RPA2R = 0b0011; // Gemappt nach SDO1 Laut PORTS I/O Seite 12/10 werde mal im Microchip Forum fragen.
Da gibt's in den Datenblättern von Microchip meist irgendwo eine Stelle in der Beschreibung des PPS... "Remappable peripherals never take priority over any analog functions associated with the pin." oder im entsprechenden Teil des FRMs: "In order to use port pins for I/O functionality with digital modules, like Timers, UARTs, etc., the corresponding ANSELx bit must be cleared (or AD1PCFGset). The ANSELx register has a default value of 0xFFFF (or 0x0000 for AD1PCFG); therefore, all pins that share analog functions are analog (not digital) by default."
:
Bearbeitet durch User
Martin M. schrieb: > Also > Ich habe da wohl ein Verständnis Problem. > > Senden ohne Master SDI funkioniert wunderbar. > > Ich habe das mal auf einen PIC32MX150f128b > Probiert mit dem selben Ergebnis. > Ich mache etwas mit dem Master SDI Mapping falsch > > SDI1R = 0b0001; // Gemappt SDI 1 nach RB5 > RPA2R = 0b0011; // Gemappt nach SDO1 > > Laut PORTS I/O Seite 12/10 > > werde mal im Microchip Forum fragen. Hellers schrieb: > Da liegt dein Problem immer noch das selbe, poste doch deine komplette Initialisierung! Arc N. schrieb: > The ANSELx > register has a default value of 0xFFFF (or 0x0000 for AD1PCFG); > therefore, all pins that share analog functions are analog (not digital) > by default." Genau so ist es, ANSELB = 0; wäre die Lösung.
Danke für die Antwort Neeee ANSELA , ANSELB und ANSELC sind alle 0 also Digital Den Anfängerfehler mache ich nicht mehr
Martin M. schrieb: > Den Anfängerfehler mache ich nicht mehr Macht nix, gibt noch genug andere. z.B. deine Typenbezeichnung ist falsch, auch wenn man erahnen kann welchen du nutzt. Willst du nicht wirklich mal deinen Code posten? Geheimnisse interessieren keinen, es reicht die Initialisierung von PPS und SPI. Ansonst kann man dir eigentlich nicht helfen. Eine Übersicht über übliche Fehler findest du im Netz an vielen Stellen. Wenn du eine Lösung zu einem spezifischen Problem willst, dann sei bitte selbst auch spezifisch.
Hallo Danke für eure antworten Den Code posten Das sind ein Haufen verschiedener Files, ich werde das auf meiner Homepage posten, wenn ich fertig bin ! Also Ich habe mich Mühselig herangetastet und habe gemerkt das ich ein Timing Problem habe, ich habe Nop's in spi Write eingefügt. void lowWrite(const uint8_t address,const uint8_t value) { #ifndef SPI_INTERRUPTS uint8_t tmpRFIE = RFIE; RFIE = 0; RADIO_CS = 0; #endif Nop(); Nop(); Nop(); spiPut(address); Nop(); Nop(); Nop(); Nop(); Nop(); spiPut(value); #ifndef SPI_INTERRUPTS RADIO_CS = 1; RFIE = tmpRFIE; #endif } und nun scheint es zu gehen, der Spi Bus ist knapp 1 Mhz schnell. Was mich aber wundert und ich min 15 Std verbracht habe ist das Signal das in den Pic geht, das sieht auf dem Oszi immer noch sche**e aus, aber ich kann den Sklaven (mrf24j40) die Register richtig auslesen. Wie gesagt Danke für eure Hilfe .-)
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.