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 damit beschäftigt habe (AVR ATMega16M1).

Folgende Ausgangswerte:

  • 8 MHz Systemtakt
  • 16 kbps gewünschte CAN Baudrate (kleinst möglichster Wert des Highspeed Tranceiver MCP2551)
  • 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