mikrocontroller.net

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


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Abschlusswiderstand hat nichts gebracht. Hat sonst noch jemand eine 
Idee?

Autor: Andreas K. (a-k)
Datum:

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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andreas K. (a-k)
Datum:

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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich initialisiere bei beiden Controllern den CAN so:
CAN128_Init(0x0a, 0x0e, 0x4b);
In der entsprechenden Routine wird dann ausgeführt:
extern void CAN128_Init (uint8_t bt1, uint8_t bt2, uint8_t bt3)
{
...
CANBT1 = bt1;
CANBT2 = bt2;
CANBT3 = bt3;
...
}

Müssen die Parameter bt1, bt2 und bt3 auf den Oszilator abgestimmt 
werden?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herr wirf Hirn ra! Und ne Brille zum Lesen gleich hinterher.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick (Gast)
Datum:

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

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.