AVR CAN Baudraten Berechnung

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Ich wollte hier mal kurz die Berechnung der CAN Baudrate erklären, da ich mich gerade darin eingearbeitet habe am Beispiel eines AVR ATMega16M1.

Folgende Ausgangswerte:

  • 8 MHz Systemtakt,
  • 16 kbps gewünschte CAN Baudrate
  • Zeitquanten 25 (muss immer zw. 8-25 sein) und besteht aus PRS+1, PSH1+1 und PSH2+1 und unterteilt ein einzelnes Bit, so wie ich das sehe ist 25 ein sehr sicherer Wert und auf lange Leitungslängen usw abgestimmt. Man kann sich hier also nicht nur auf den Teiler verlassen, da die Zeitquanten die Bitlänge bestimmen. Es gibt also noch viel mehr Möglichkeiten auf 16 kbps zu kommen.

Systemtakt 8.000.000 / 2 / 25 = 160.000

Taktvorteiler = 160.000 / 16.000 = 10

in .asm würde man die Register dann so beschreiben

ldi temp, (0<<BRP5)|(0<<BRP4)|(1<<BRP3)|(0<<BRP2)|(0<<BRP1) |(1<<BRP0) sts CANBT1, temp ldi temp, (1<<PRS2)|(1<<PRS1)|(1<<PRS0) sts CANBT2, temp ldi temp, (1<<PHS22)|(1<<PHS21)|(1<<PHS20)|(1<<PHS12)|(1<<PHS11)|(1<<PHS10)|(1<<SMP) sts CANBT3,temp