Bit-Stuffing Error bei AT90CAN32

Gast #678068
Guten Morgen zusammen.

Ich versuche, die Kommunikation zweier AT90CAN32 über CAN aufzubauen. 
Einer ist der Sender und der andere der Empfänger.
Der Sender soll auf Tastendruck eine CAN-Nachricht verschicken und der 
Empfänger dann die gewünschte Aktion ausführen. Die ID ist immer die 
gleiche. Nun habe ich folgendes Problem:

Ich debugge live mit AVR-Studio über den Atmel JTAGICE MKII und 
beobachte, was beim Empfänger ankommt. Sobald ich beim Sender die Taste 
drücke, wird beim Empfänger ein Interrupt ausgelöst. Ursache: 
Bit-Stuffing Error. Was kann die Ursache dafür sein? Wer hat Erfahrungen 
damit?

Die Baud-Rate ist bei beiden auf 100kb/s eingestellt. Die Verbindung 
zwischen den Controllern erfolgt über ein geschirmtes Kabel mit der 
Länge von ca. 0.5m. Muss ich im Kabel vielleicht ein Abschlusswiderstand 
einlöten? Oder liegt die Ursache beim Sender?

Für Eure Antworten wäre ich sehr dankbar.
CAN funktioniert ohne mindestens einem Abschluss nicht. Egal wie kurz 
das Kabel ist.

Grund: Den dominant state (Pegeldifferenz) erzeugt der Treiber aktiv. 
Den recessive state (Pegelgleichheit) erzeugt der Abschlusswiderstand.
Gast
Hast du denn überhaupt Transceiver dran?
Und ja, die Leitung muss terminiert sein. Üblicherweise macht man das 
aber direkt am Transceiver.
Wo hast du den CAN32 her? Ist bei mir auch vorgesehen, ist im Moment der 
CAN128 drin, weil die kleineren Brüder nicht erhältlich waren. Habe mich 
aber schon 1 Jahr nicht mehr drum gekümmert.
Gast
Als Tranceiver verwende ich PCA82C251T. Die CAN32 hatten wir noch auf 
Lager. Ich werd mal nen 120 Ohm Widerstand zwischen CAN-H und CAN-L 
hängen und sehen was passiert. Danke schonmal für die Antworten.
Gast
Die Bitrate ist bei beiden auf 100kb/s eingestellt. Könnte es vielleicht 
ein Problem sein, dass der Sender einen 12MHz und der Empfänger einen 
8MHz Oszillator hat?
Welche Informationen brauchst Du noch? Etwa ein Code-Schnippsel?
Gast
Ich initialisiere bei beiden Controllern den CAN so:
1
CAN128_Init(0x0a, 0x0e, 0x4b);
In der entsprechenden Routine wird dann ausgeführt:
1
extern void CAN128_Init (uint8_t bt1, uint8_t bt2, uint8_t bt3)
2
{
3
...
4
CANBT1 = bt1;
5
CANBT2 = bt2;
6
CANBT3 = bt3;
7
...
8
}

Müssen die Parameter bt1, bt2 und bt3 auf den Oszilator abgestimmt 
werden?
Gast
Was machst Du mich jetzt so blöd an? Es sind eben nicht alle so super 
Intelligent wie Du, Du Superhirn. Es gibt eben immer noch solche, die 
noch nicht lange mit Mikrocontrollern arbeiten und denen solche 
Sachverhalte nicht ganz klar sind.
Da sollte man doch etwas Verständnis zeigen können und nicht gleich 
beleidigend werden.
Du bist seit Wochen in dem CAN Thema drin, stellst eine Frage nach der 
anderen (ok) und hast es in der ganzen Zeit geschafft, um das 
grundlegende Thema Bitraten/Samplepoint/... von CAN herum zu kommen 
(nicht ok, gibt genug Doku dazu, schau dich beispielsweise mal bei 
Microchip um).

Und dann weise ich darauf hin, dass es ein Bitratenproblem sein kann und 
kriege die Antwort, nein, es seien auf beiden Seiten 100Kbps. Sorry, 
aber da komme ich mir verarscht vor. Bei einer UART würdest du ja auch 
nicht den Bitratenteiler (baud rate) eines 8MHz AVR unverändert auf 
einem 12MHz AVR verwenden.
Gast
dann überlege mal selber:
-alle internen Takte werden vom Haupttakt abgeleitet und sind demzufolge 
ganzzahlige Teile davon
-um auf einen identischen Takt für die Peripherie zu kommen, müssen bei 
unterschiedlichen Quarzfrequenzen unterschiedliche Teiler benutzt 
werden.
-oft genug muss man dabei einen Spagat machen, nicht alles lässt sich 
perfekt unter einen Hut bringen -> Kompromisse.
Gast
Hier liegt ein Missverständnis vor. Ich habe mit keinen Worten gesagt, 
es sei kein Bitratenproblem. Ich wollte Dir nur zeigen, wie ich in 
meiner Routine die Bitrate einstelle und habe anschliessend gefragt, ob 
ich die Werte auf die Oszillatoren abstimmen muss. Vielleicht brauchst 
DU eine Brille.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.