Forum: Mikrocontroller und Digitale Elektronik UART auf 93,75KBits/s einstellen


von Ed M. (edmu)


Lesenswert?

hallo zusammen,
Ich habe einen RS485-Profibus an meinem AVR-ATMega162 an die UART0 über
einen MAX485 angeschlossen, um die Empfangsdaten zu lesen. Diese lese
ich über einen Interrupt für UART0 aus. Ich bekomme auch Daten in die 
UART0
rein, aber das sind nicht die Daten, die ich erwarte. Und zwar habe ich
ein Oszilloskop mit an der UART0 geschlossen und sehe jedes einzelne
Bit. Es ist das Token-Telegramm mit insgesamt 3 Bytes (0xDC,0xXX,0xXX).
Wieso bekomme ich nicht die richtigen Daten? Ich denke es liegt an der
initialisierung der UART0.
Meine Bausrate muss 93,75 KBaud sein.
Ich habe den UBRR auf 4 gestellt, ist dass soweit richtig? Wie kann ich
die UART denn auch auf 93,75 KBits/s stellen.

Danke im Vorraus

von Hans J. (hjm)


Lesenswert?

Hallo Ed,

mit welcher Frequenz läuft der AT?

Die Werte für UBRR lassen sich ja nach Formel berechenen:

für Normalmode UBRR = (fosc/16/Baudrate)-1
für Doublespeed UBRR = (fosc/8/Baudrate)-1

Wie ich entnehme planst Du etwas Richtung Profibus, hast Du die 
Schnittstelle auch auf 8E1 eingestellt?

Übrigens für UART-Nutzung sind die graden Quarze 2, 4, 8, 16MHz nichts, 
gibt immer Fehler, waobei, abhängig von der Gegenseite dies meist bis 
ca. 0,5% nichts macht.

Wenn Du als Gegenseite einen PC nutzt, läßt der sich meist auch auf 
187,5Kbit oder 500Kbit hochstellen, was wieder eine normkonforme 
Baudrate ist

Grüße
Hans-Josef

von 3357 (Gast)


Lesenswert?

93kbit sind nichtstandard. mit einem normalen Quarz wird da nichts. Die 
obige Baudratenformel sagt welche frequenzen gehen.

von edmu (Gast)


Lesenswert?

Mein interner Takt ist 7,3 MHz, den ich aber bei dem ATMega162 
beeinflussen kann.

Die UART0 habe ich auch mit 1 STOP, 1 Paritätsbit Gerade, 8 Datenbits
initialisiert.

ich rechne mal mit der formel zurück und probiere es aus.

mfg ed

von Gast (Gast)


Lesenswert?

>Mein interner Takt ist 7,3 MHz, den ich aber bei dem ATMega162
>beeinflussen kann.

Interner Takt beim xx162 und genaue Baudrate?
Das geht nicht (gut)! Überschlägig gerechnet brauchst Du eine Vielfaches 
von 1,5MHz. 12MHz könnte gehen - höher wäre besser.

von Jörg S. (Gast)


Lesenswert?

>Wieso bekomme ich nicht die richtigen Daten? Ich denke es liegt an der
>initialisierung der UART0.
Was bekommst du denn für Daten? Vielleicht einfach nur A und B 
vertauscht?

von edmu (Gast)


Lesenswert?

ich habe jetzt den mega162 auf 7,5 MHz gestellt und jetzt funktioniert 
es.
ich kann bisher den token und die tokenanfrage abfragen. die daten gebe
ich über die uart1 (115200kbit/s) raus. klappt bisher prima, aber ich 
sollte trotzdem auf den internen takt verzichten und den von aussen 
beschalten.
vielen dank

von Gast (Gast)


Lesenswert?

>... trotzdem auf den internen takt verzichten ...

Das hast Du ja nocheinmal die Kurve bekommen ;-)
Ich würde dennoch zu höherer Taktfrquenz raten, da bei 93kBd die Daten 
mit fast 10kHz eintreffen und auch schnell verarbeitet werden sollten. 
Langsamer bekommt man einen µC immer - schneller aber nicht.
Beim Profibus muß ja auch noch mehr geprüft werden, um im Verbund zu 
fúnktionieren.

von edmu (Gast)


Lesenswert?

ich werde versuchen mit einem höheren takt zu arbeiten, aber nicht 
jetzt. ich muss erst einmal ordnung in mein programm bekommen und dann 
testen.

danke für die unterstützung
mfg ed

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.