Bit-Stuffing Error bei AT90CAN32

Gast #678068
Lesenswert?

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.
Gast #678076
Lesenswert?

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 #678393
Lesenswert?

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 #678409
Lesenswert?

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 #678427
Lesenswert?

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.
#678462
Lesenswert?

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 #678475
Lesenswert?

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 #678479
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren