mikrocontroller.net

Forum: Haus & Smart Home Probleme CAN bekomme nur Error


Autor: Lars K. (larsk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe ein kleines Problem mit meinem CAN-Bus. Ich habe 
folgendes aufgebaut: Einen Atmega32 mit MCP2515 und MCP2551 sowieo einen 
zweiten Knoten mit einem PCA82c250 (hatten keine zwei Gleichen).
Die RS-Leitung des MCP2551 liegt mit 0 Ohm an , GND der Bus ist an 
beiden Knoten mit 120 Ohm terminiert. Kabellängen zwischen den Knoten 
habe ich schon  verschiedene ausprobiert. Von 10cm bis 5m.
Im Loopbackmodus funktioniert alles richtig. Der Knoten sendet und 
springt dann in seine Interrupt-Routine um das Empfangene wieder 
auszulesen. Die ID ist dabei auch richtig. Sodass ich erstmal davon 
ausgehe das meine Sende- und Empfangsfunktion richtig funktioniert.
Nun aber zum Test mit zwei Knoten: Also ich hab dann einen Knoten auf 
Oneshotmodus gestellt, und schicke in einer schleife alle 5 Sekunden ein 
Paket raus. Sobald ich allerdings ein Paket losschicke, zeigt mit auf 
der Empfängerseite das CANINTF-Register ein MERRE an und der REC-Counter 
erhöht sich um 1. Wenn das Flag nun beim Empfänger lösche kommt nach den 
besagten 5 Sekunden wieder ein MERRE und der Zähler erhöht sich.
Ich hab schon einiges ausprobiert, solangsam weiß ich nicht mehr weiter 
wo ich den Fehler noch suchen soll. Vielleicht hat ja jemand einen Tip 
für mich.

Gruß

Lars

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unterschiede im Takt?
Interner Oszillator geht nicht.

Autor: Lars K. (larsk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also,

der MCP läuft mit 16MHz Quarz. Bei den Atmegas könntest du recht haben, 
der auf der eigentlichen Platine läuft mit 8MHz extern und der auf dem 
Testboard läuft mit 8MHz intern. Das werde ich nochmal probieren, dass 
ich beiden einen externen verpasse.

Gruß

Lars

Autor: Lars K. (larsk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

so ich habe es jetzt nochmal versucht. Jeder MCP2515 und jeder Atmega 
hat einen eigenen Quarz. der MCP2515 läuft mit 16MHz und der Atmega mit 
8MHz. Kein Erfolg nur Bus Error. Wie gesagt der loopbackmodus 
funktioniert, sodass auch davon auszugehen ist dass der spi bus richtig 
funktioniert. Den MCP2515 initiere ich folgendermaßen:

void mcp2515_init(void)
{
  PORTB &= ~(1<<PB4);
    spi_put_char( SPI_RESET );
    _delay_ms(1);
    PORTB |= (1<<PB4);
  _delay_ms(10);
  mcp2515_bit_modify(CANINTE,0b10100011,0xff);

  //Filter Buffer0 aus
    mcp2515_write_register( RXB0CTRL, (1<<RXM1)|(1<<RXM0) );
   
        //Filter Buffer0 aus
    mcp2515_write_register( RXB1CTRL, (1<<RXM1)|(1<<RXM0) );;
  
        //LED als Interruptsignal
    mcp2515_bit_modify(BFPCTRL,0b00001111,0xFF);

  // BRP = 7
    mcp2515_write_register( CNF1, (1<<BRP0)|(1<<BRP1)|(1<<BRP2) );
   
    // Prop Seg und Phase Seg1 einstellen
    mcp2515_write_register( CNF2, (1<<BTLMODE)|(1<<PHSEG11) );
   
    // Wake-up Filter deaktivieren, Phase Seg2 einstellen
    mcp2515_write_register( CNF3, (1<<PHSEG21) );

  // Normaler Modus + Oneshot
    mcp2515_bit_modify(CANCTRL,0b11101000,0b00001000);
   
}

Gruß

Lars

Autor: Lars K. (larsk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habs hin. Als kleinen Tip für andere: Ein Widerstand am Rs kann 
Wunder bewirken.

Gruß

Lars

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Takt hatte ich etwas aus der Hüfte geschossen, nämlich wenn der 
MCP seinen Takt aus einem Taktausgang des AVR bezieht und dieser intern 
getaktet wird. Allerdings ein ziemlich seltenes Szenario.

Wenn der MCP mit eigenem Quarz arbeitet reicht das, der AVR muss es 
nicht auch tun. Man kann allerdings den AVR mit einem Takt aus dem MCP 
versorgen. Nur muss man ein bischen aufpassen, dass man sich nicht 
aussperrt.

Rs an GND (nicht:offen) ist durchaus gängig, nämlich bei hoher Bitrate. 
Was sauberen Abschluss und passable Kabel voraussetzt. Unklar warum das 
bei dir Probleme macht, denn bei mindestens einem Abschluss und 10cm 
kann da eigentlich nichts schiefgehen.

Autor: Lars K. (larsk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es kann ja sein, dass es Probleme auf dem Steckbrett gibt, wenn RS an 
GND liegt und er damit Highspeed nutzt. Vielleicht liegt es auch an der 
Mischung zwischen MCP und PCA ich werde am Wochenende nochmal eine 
Platine ätzen, da hab ich dann den RS auch als 0 Ohm drauf bzw. kann ich 
da auch drauf tauschen und dann nutzte ich auch 2x dem mcp2551 
vielleicht klappt es dann auch mit 0 Ohm. Werde ich dann berichten.

Gruß

Lars

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MCP2551 und PCA82C250 kooperieren erfahrungsgemäss problemlos.

Autor: Lars K. (larsk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja,
wichtig ist es, dass es nun läuft. :-)

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bittiming bei beiden richtig eingestellt?
Mach aus den 10cm Leitung mal 10m, wenns dann wieder nicht mehr 
funktioniert würde ich in der Richtung nochmals suchen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.