Forum: Mikrocontroller und Digitale Elektronik Bit-Stuffing Error bei AT90CAN32


von Patrick (Gast)


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.

von Andreas K. (a-k)


Lesenswert?

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.

von crazy horse (Gast)


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.

von Patrick (Gast)


Lesenswert?

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.

von Patrick (Gast)


Lesenswert?

Der Abschlusswiderstand hat nichts gebracht. Hat sonst noch jemand eine 
Idee?

von Andreas K. (a-k)


Lesenswert?

Bitstuffing error klingt nach Kabel oder Bitrate. Mehr lässt sich 
aufgrund des immensen Übermasses an Information schlecht sagen.

von Patrick (Gast)


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?

von Andreas K. (a-k)


Lesenswert?

Wenn die Bitratenparameter entsprechend angepasst sind... Wenn die aber 
auf beiden Nodes gleich sind, können nicht auf beiden Nodes 
gleichermassen 100Kbps rauskommen.

von Patrick (Gast)


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?

von Andreas K. (a-k)


Lesenswert?

Herr wirf Hirn ra! Und ne Brille zum Lesen gleich hinterher.

von Patrick (Gast)


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.

von Andreas K. (a-k)


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.

von crazy horse (Gast)


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.

von Patrick (Gast)


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.

von Patrick (Gast)


Lesenswert?

Ich werde Euch nicht mehr mit dem Thema belästigen. Ich habs 
hingekriegt. Trotzdem Danke.

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
Noch kein Account? Hier anmelden.