Forum: Mikrocontroller und Digitale Elektronik AVR Mikrcontroller


von unimog (Gast)


Lesenswert?

hallo zusammen,

ich arbeite mit einem at90can128 Mikrocontroller und wollte wissen ob 
ich selber die Übertragungsrate ausrechnen soll oder sie nach belieben 
selbst festlegen kann.
ich benutze ein Meter lang Kabel.

Danke

von Marc S. (marc_s86)


Lesenswert?

Ja.

Spaß beiseite, was für ne Übertragungsrate?
Uart? I2C? CAN? SPI?

von unimog (Gast)


Lesenswert?

CAN

von Jim M. (turboj)


Lesenswert?

unimog schrieb:
> ich arbeite mit einem at90can128 Mikrocontroller

Bei CAN brauchts immer mindestens 2 Geräte am Bus. Alle Geräte am Bus 
müssen sich über die Übertragungsgeschwindigkeit einig sein.

von F. F. (foldi)


Lesenswert?

unimog schrieb:
> CAN

CAN CAN(n) ich nicht.

SCNR

von H.Joachim S. (crazyhorse)


Lesenswert?

Du musst sie einmal festlegen und ist dann für alle Geräte am Bus 
verbindlich.
Sinnvollerweise nimmt man Standardbaudraten, aber es steht dir durchaus 
frei z.B. 12,43kBaud zu benutzen.

Es ist allerdings nicht ganz so einfach wie bei der UART, wo die 
einfache Angabe der Baudrate reicht.

http://www.bittiming.can-wiki.info/

von Rudolph (Gast)


Lesenswert?

Ist doch alles schon im Datenblatt als Tabelle abgelegt.
Kapitel 19.12: "Examples of CAN Baud Rate Setting"

500kBit @ 16MHz? -> CANBT1 = 0x02, CANBT2 = 0x0c, CANBT3 = 0x37

von MArkus S. (markus1991)


Lesenswert?

Rudolph schrieb:
> 500kBit @ 16MHz? -> CANBT1 = 0x02, CANBT2 = 0x0c, CANBT3 = 0x37

Ich beschäftige mich zufälligerweise ebenfalls gerade mit diesem Thema.

Was genau muss ich mit den von dir angegeben Registern machen?
Außerdem habe ich eine Clock von 14,7 MHz. Ändert sich dann was?

von Rudolph (Gast)


Lesenswert?

MArkus S. schrieb:
> Rudolph schrieb:
>> 500kBit @ 16MHz? -> CANBT1 = 0x02, CANBT2 = 0x0c, CANBT3 = 0x37
>
> Ich beschäftige mich zufälligerweise ebenfalls gerade mit diesem Thema.
>
> Was genau muss ich mit den von dir angegeben Registern machen?

Im Ernst? Wie wäre es denn damit, da die Werte rein zu schreiben?

Etwa so:
1
// setup für 500 kBit/s mit 16 MHz Quarz
2
CANBT1 = (1<<BRP0);
3
CANBT2 = (1<<PRS2) | (1<<PRS1);
4
CANBT3 = (1<<PHS21) | (1<<PHS20) | (1<<PHS11) | (1<<PHS10) | (1<<SMP);

Einfache Beispiele gab es hier im Forum schon genug, die Suche nach 
"90CAN" oder auch "16M1" sollte weiter helfen.

> Außerdem habe ich eine Clock von 14,7 MHz. Ändert sich dann was?

Ja, dafür gibt es dann aber auch kein Beispiel im Datenblatt.
Aber wie man das ausrechnet ist ja auch angegeben.

Gibt es irgend einen Grund, einen Quarz von 14,7 MHz einzusetzen?
UART Baudrate wird es ja eher nicht sein, den Fehler bei 16 MHz kann man 
vernachlässigen, vor allem wenn da noch ein UART-USB Wandler mit dran 
hängt.

Und der CAN hat auf jeden Fall die höheren Anforderungen an den Takt, 
also einfach mal 16 MHz Quarz einbauen und dabei auch die für den Quarz 
passenden Kondensatoren zu verwenden könnte helfen.

von MArkus S. (markus1991)


Lesenswert?

Rudolph schrieb:
> // setup für 500 kBit/s mit 16 MHz Quarz
> CANBT1 = (1<<BRP0);
> CANBT2 = (1<<PRS2) | (1<<PRS1);
> CANBT3 = (1<<PHS21) | (1<<PHS20) | (1<<PHS11) | (1<<PHS10) | (1<<SMP);

OK super das hat mir schonmal weitergeholfen.
Ich verstehe auch die einzelnen Begriffe (BRP,PRS,...). Jedoch habe ich 
noch nicht verstanden, wie du da genau die Bits setzt?
Wärst du so freundlich und könntest mir das nochmal kurz erläutern?

von MArkus S. (markus1991)


Lesenswert?

Ok, das Bitsetzen habe ich verstanden.

Nur noch eine weitere Frage: In dem Datenblatt gibt es für jede 
Übertragungsrate zwei verschiedene Einträge, die sich in TQ 
unterscheiden. Wie ist das zu verstehen bzw. für welches entscheide ich 
mich da?

von Rudolph (Gast)


Lesenswert?

MArkus S. schrieb:
> Wie ist das zu verstehen bzw. für welches entscheide ich
> mich da?

So wie ich das verstehe sind das einfach nur zwei verschiedene Wege um 
auf die letztlich gleiche Konfiguration zu kommen.

Für 500kBit@16MHz benutze ich die obere Konfiguration.
Warum? Weiss ich nicht mehr, vor Jahren mal ausgesucht, läuft. :-)

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.