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
Gast
#4534955
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
Hellseher Ich glaube Du hast das Falsch gepostet.
Gast
#4534989
Martin M. schrieb: > Was Merkwürdig ist, das der Eingangsport RB5 - SPI > den blauen Graph ergibt. Die Masse ist ja gar nicht angeschlossen.
Gast
#4535381
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
Gast
#4535387
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."
Gast
#4537102
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 .-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.


