Hallo Habe eine Displayeinheit wo die Daten von 6 Knoten ausgwertet werden. Habe aber das problem das ich beim Auslesen des Registers 0x2d immer das Bit 6 RX0OVR aktiv ist ich setzte es zurück und bekomme immer wieder einen Overflow auf Buffer0 obwohl ich nurch setzten des Bits BULK=1 den MCP sage das wenn Buffer0 voll ist auf Buffer 1 zugeriffen wird. Der Code ist von hier http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 wie kann man den Buffer0 Overflow beseitigen. Bus läuft mit 250kbit. MCP alle mit 16Mhz SPI Takt 8Mhz. void mcp2515_init(void) { // MCP2515 per Software Reset zuruecksetzten, // danach ist der MCP2515 im Configuration Mode CAN_cs_low(); spi_putc( SPI_RESET ); _delay_ms(1); CAN_cs_high(); // etwas warten bis sich der MCP2515 zurueckgesetzt hat _delay_ms(10); mcp2515_write_register( CNF1, 0x01 ); mcp2515_write_register( CNF2, 0xB8); mcp2515_write_register( CNF3, 0x05 ); mcp2515_write_register( CANINTE, (1<<RX1IE)|(1<<RX0IE) ); // Buffer 0 : Empfangen aller Nachrichten mcp2515_write_register( RXB0CTRL, (1<<RXM1)|(1<<RXM0)|(1<<BUKT) ); // Buffer 1 : Empfangen aller Nachrichten mcp2515_write_register( RXB1CTRL, (1<<RXM1)|(1<<RXM0) ); // Alle Bits der Empfangsmaske loeschen, // damit werden alle Nachrichten empfangen mcp2515_write_register( RXM0SIDH, 0 ); mcp2515_write_register( RXM0SIDL, 0 ); mcp2515_write_register( RXM0EID8, 0 ); mcp2515_write_register( RXM0EID0, 0 ); mcp2515_write_register( RXM1SIDH, 0 ); mcp2515_write_register( RXM1SIDL, 0 ); mcp2515_write_register( RXM1EID8, 0 ); mcp2515_write_register( RXM1EID0, 0 ); // Deaktivieren der Pins RXnBF Pins (High Impedance State) mcp2515_write_register( BFPCTRL, 0 ); // TXnRTS Bits als Inputs schalten mcp2515_write_register( TXRTSCTRL, 0 ); // Device zurueck in den normalen Modus versetzten mcp2515_bit_modify( CANCTRL, 0xE0, 0); } Danke Gruß ANdy
Hallo Ich habe mal eine Frage zur realisierung der Interrupt abfrage vom MCP Momentan mache ich dies in der Hauptschleife mit abfrage ob INT Pin high oder low. habe mir gedacht ich frage den mcp int pin in der Hauptschleife 3x ab und ich bekomme jetzt pro minute 150 overflows statt vorher in der minute >1500. Ist es noch besser den Interrupt pin des AVR zu benutzen um die Hauptschleife zu un terbrechen???? Ich merke jetzt schon das die anzeigen flüssiger und sofort reagieren wie z.b Tankanzeige und Batteriespannungsanzeige da hat man vorher 2sek geartet bis was kommt.
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.