MCP2515 behebn von Buffer0 Overflow

OP #1998190
Lesenswert?
• ▲
▼
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
OP #1999435
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.