Forum: Mikrocontroller und Digitale Elektronik Baudrate beim Atmega32 einstellen


von Andreas S. (schunki)


Lesenswert?

Hallo zusammen!

Ich habe hier eine Platine auf der ein AT32UC3C steckt und eine andere 
Platine mit einem XC161. Auf beiden µC ist eine Software vorhanden deren 
Software aber so angepasst werden muss, dass die beiden µC sich über den 
Can-Bus verständigen können. Hierbei ist das Problem, dass der XC161 auf 
eine Baudrate von 250 kBd eingestellt ist und der AT32UC3C angeblich auf 
1000 kBd eingestellt ist.

Jetzt habe ich mir im Internet schon einen Wolf nach einer Anleitung zur 
Einstellung der Baudrate am Atmega gesucht, bin aber dabei nicht 
wirklich fündig geworden. Das was ich bisher gefunden habe ist, dass ich 
für eine Baudrate von 250 kBd PRS, PHS1, PHS2 und PRES so einstellen 
muss, dass zuammen mit der Periodendauer des Oszilators (PGCLCK_CANIF) 
die Formel

erfüllt sein muss.

Der mir vorliegende Programmcode für den Atmega beinhaltet derzeit 
folgende Codezeilen:
1
#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz
2
#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_SJW         1
3
#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PRES        0
4
#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PRS         4
5
#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PHS1        1
6
#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PHS2        3
7
8
#define BAUDRATE        CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz
9
#define BAUDRATE_SJW    CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_SJW
10
#define BAUDRATE_PRES   CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PRES
11
#define BAUDRATE_PRS    CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PRS
12
#define BAUDRATE_PHS1   CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PHS1 
13
#define BAUDRATE_PHS2   CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PHS2

Setze ich die hier definierten Werte in die o.g. Formel ein, dann komme 
ich jedoch auf eine Baudrate von 1,5 MBd und nicht 1 MBd.

Meine Frage wäre also, wie ich die Defines hier umstellen muss um eine 
Baudrate von 250 kBd zu erreichen und vielleicht noch eine kurze 
Erklärung was die einzelnen Werte bedeuten, da ich ja hier auch 
verschiedene Werte für die jeweiligen Variablen einsetzen kann um die 
Gleichung zu erfüllen.


Schon mal im Voraus vielen Dank für Eure Antworten!


Gruß
Andreas

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Jetzt habe ich mir im Internet schon einen Wolf nach einer Anleitung zur
>Einstellung der Baudrate am Atmega gesucht, bin aber dabei nicht
>wirklich fündig geworden.

Und auf die Idee mit dem Datenblatt bist du nicht gekommen? Ab S.764 
(damit du das nicht auch noch ergooglen must).

MfG Spess

von Andreas S. (schunki)


Lesenswert?

Aha.... na das ich da nicht vorher drauf gekommen bin!
Also ehrlich gesagt, war das meine erste Anlaufstelle. Allerdings sagt 
mir das tolle Datenblatt absolut nichts zu PRES! Was ist das für ein 
Wert? Was macht er? Und warum sollte er nicht auf NULL gesetzt werden? 
Was ja in meinem mir vorliegenden Programm der Fall ist!

von spess53 (Gast)


Lesenswert?

Hi

>Warum sollte also PRES nicht 0 sein?

Sie es mal als Vorgabe von Atmel.

Um auf deine 250kBd zu kommen brauchst du doch einfach nur den Prescaler 
auf 3 zu stellen:

#define CAN_BAUDRATE_1MHZ_CANCLOCK_12MHz_PRES        3

Dann stimmt zwar die Bezeichnung nicht mehr, aber der Takt, von dem das 
Bittiming abgeleitet wird beträgt nur noch 1/4 des jetzigen Taktes.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Allerdings sagt
>mir das tolle Datenblatt absolut nichts zu PRES! Was ist das für ein
>Wert? Was macht er?

Dann kannst du nicht lesen. Die PRES-Bits befinden sich im 
CANCFG-Register.

Das ist die Prescalereinstellung. Der Takt, der am CAN-Modul anliegt 
wird vom Prescaler durch 1/(1+PRES) geteilt. Und aus diesem Takt wird 
das ganze Bittiming abgeleitet.

MfG Spess

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Andreas S. schrieb:
> AT32UC3C

Das ist kein ATmega (AVR) sondern ein AVR32. Der hat mit AVR nicht mehr 
gemeinsam als die 3 Buchstaben A, V und R...

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.