Gast
#126813
Hallo, noch einmal eine kleine Verständnisfrage zum MCP2515: Eine Nachricht sollte doch wie folgt abgesendet werden koennen: SpiOn(); SpiWriteByte(0x02); // Schreib-Kommando SpiWriteByte(0x0F); // Can-Controlregister SpiWriteByte(0x08); // One-Shot-Modus, Normal-Modus SpiOff(); [...] SpiOn(); SpiWriteByte(0x02); // Schreib-Befehl SpiWriteByte(0x31); // Identifier0-High-Register SpiWriteByte(0xFF); // ID-High (0b11111111) SpiWriteByte(0xE0); // ID-Low (0b11100000), Standard-Identifier SpiOff(); SpiOn(); SpiWriteByte(0x02); // Schreib-Befehl SpiWriteByte(0x35); // Datenlaengen-Register0 SpiWriteByte(0x01); // Länge: 1 Byte SpiOff(); SpiOn(); SpiWriteByte(0x02); // Schreib-Befehl SpiWriteByte(0x36); // Daten-Register0 SpiWriteByte(0xAA); // Data: 0b10101010 SpiOff(); SpiOn(); SpiWriteByte(0x81); //Request-to-Send fuer Nachricht0 SpiOff(); Zum testweisen Empfangen sollte das hier ausreichen: SpiOn(); SpiWriteByte(0x02); // Schreib-Befehl SpiWriteByte(0x60); // Receiver0 einstellen SpiWriteByte(0x60); // Alle Nachrichten empfangen (keine Filter, keine Masken), kein Rollover SpiOff(); [selbstverstaendlich vor dem Request-to-Send oben] SpiOn(); SpiWriteByte(0x03); // Lese-Befehl SpiWriteByte(0x65); // RX0-Laengenregister temp1=SpiReadByte(); // Datenlänge auslesen SpiOff(); SpiOn(); SpiWriteByte(0x03); // Lese-Befehl SpiWriteByte(0x66); // RX0-Datenregister temp2=SpiReadByte(); // Datenbyte auslesen SpiOff(); [...] Jetzt zur Frage: Kann/muss/soll der Baustein auch die Daten empfangen, die er versendet? Wenn ja, dann habe ich hier ein Problem. Die empfangenen Daten stimmen leider nicht (Daten vorhanden, aber falsch). Im Sendepuffer kann ich sie auslesen, die sind korrekt. Kann das an der Hardware liegen? Ein 20cm-Bus ist angehaengt und terminiert. Eventuell spinnt der Treiberbaustein (PCA82C250)? Gibt's eine Möglichkeit,den ohne größe Hilfsmittel zu testen? Oder habe ich oben nur einen Denkfehler gemacht? Dankbar für Hinweise aller Art, Dirk