PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Atmega16/32 mit 16MHz und 921600 Baud



!*sascha*!
29.01.2012, 11:03
Hallo *,

ich baue mein Servocontroller momentan von I2C auf UART zurück, da ich eine höhere Geschwindigkeit bei der Datenübertragung benötige.

Wenn ich den IC mit einer Baudrate > 115200 betreibe, kommt auf der anderen Seite nur Datenmüll an. Ich verwende keinen Pegelwandler sondern nur 5V TTL!
Mein USB UART Adapter funktioniert noch ohne Probleme bei Geschwindigkeiten > 921600 Baud. Habe ich natürlich getestet.

Ich habe einen kleinen Baudraten Scanner in C# geschrieben und so festgestellt, dass die Baudrate leicht verschoben ist. Bei 230k Baud waren es ca. ein paar 1k Baud verschiebung.

Die Fuse Bits für den 16MHz Quarz sind richtig gesetzt!

Es gibt ein C Programm von Ulrich Radig für eine UART Kamera, dieses Kommunikation funktioniert ohne probleme bei 921600 Baud.

Gibt es da einen unterschied, weil ich einen 16MHz Quarz verwende und er einen 14.xxxMHz Quarz?

Vielleicht gibt es noch den einen oder anderen Trick, den ich nicht kenne :-)

Gibt es jemanden, der seinen Atmega mit Bascom jenseits der 115k betreibt?

Ich würde mich über ein paar Ideen freuen...

Liebe Grüße
Sascha


$regfile = "M32def.dat"
$crystal = 16000000

'$baud = 921600
'$baud = 230400
$baud = 115200

Do

Print "Ich schreibe..."
Waitms 50

Loop

Kampi
29.01.2012, 11:26
Es kann sein das mit einem 16MHz Quarz bei 115200 Baud die Abweichung zu groß ist.
Und ja es gibt einen Unterschied zwischen den beiden Quarzen. Das eine Quarz mit 14.7456MHz ist ein Baudratenquarz, was soviel heißt wie das man das gerade runterteilen kann.
Schau mal hier auf Seite 167:

http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf

Da siehst du in der Tabelle das der Fehler mit einem 14.7456MHz Quarz 0% ist. Bei 16MHz sind es bereits 3,5%.
Bei so hohen Baudraten würde ich dir empfehlen das 16MHz Quarz durch ein 14.7456MHz Quarz zu tauschen damit sollte das Problem gelöst sein.

Edit:
Habs bei mir gerade nochmal probiert. Ein "Hallo Welt" Programm funktioniert bei mir mit 115200Baud. Und dein Programm geht ebenfalls. Ich verwende ein RS232 Kabel was auf einen selbst gebauten RS232-USB Adapter geht.

Sauerbruch
29.01.2012, 11:31
Gibt es da einen unterschied, weil ich einen 16MHz Quarz verwende und er einen 14.xxxMHz Quarz?


Also ich bin zwar nicht so der UART-König, und in solche Baudraten-Bereiche habe ich mich auch noch nie vorgewagt - aber ich benutze ein kleines, feines Baudraten-Berechnungstool, das man sich auf der Homepage von R. Walter runterladen kann. Und daraus geht hervor, dass sich 921.600 Baud mit einem 16MHz-Quarz nur mit einem Fehler von 9% erzeugen lassen. Und das ist natürlich richtig viel.

Mit einem 14,7456 MHz-Quarz lassen sich dagegen 921.600 Baud exakt und ohne jede Abweichung erzeugen.

Wahrscheinlich wird´s also genau daran liegen...

ePyx
29.01.2012, 11:32
hast du mal versucht den Fehler auszurechnen ?

Kann man auch online machen : WormFood's AVR Baud Rate Calculator (http://www.wormfood.net/avrbaudcalc.php)

Wie Kampi schon angemerkt hat ist der realtiv hoch. Bei einem Quarz mit 14.7456MHz lassen sich die Baudraten einfach besser ableiten und man hat geringere Fehler.

Kampi
29.01.2012, 11:43
Bei so hohen Baudraten kann es halt mit 16MHz funktionieren oder es funktioniert nicht.....bei mir gehts und bei dir nicht ;) beste Beispiel :D
Und ich weiß gerade nicht wie hoch die Toleranz laut der EIA-232 sein darf aber es war soweit ich mich recht erinnere bischen unter 9% ;)

!*sascha*!
29.01.2012, 11:51
Hallo *,

ich weiß nicht, was ich sagen soll!

Jetzt wo ich die Antworten lese, stimmt da gab es Tabellen beim googeln mit Fehlerwerten...

Ich habe noch einen 14.7456MHz Quarz gefunden und werde diesen mal einbauen!

Ich bedanke mich schon mal bei allen, für die schnelle hilfe!

Aber auch wenn es einen anderen Fehler gibt, war es die Frage schon wert! Wieder etwas gelernt^^

Ich werde mich mit dem Ergebnis wieder melden ;-)

Gruß,
Sascha

!*sascha*!
29.01.2012, 12:04
Es geht :-)

Habe den Atmega32 auf einem Steckbrett mit 14.7456MHz Quarz und es geht.

Also das Thema kann dann mit erfolg geschlossen werden.

Danke, danke, danke nochmals an alle für die schnelle und auch erfolgreiche Fehlersuche!

Gruß
Sascha

Kampi
29.01.2012, 12:24
Es geht :-)

Habe den Atmega32 auf einem Steckbrett mit 14.7456MHz Quarz und es geht.

Also das Thema kann dann mit erfolg geschlossen werden.


Danke, danke, danke nochmals an alle für die schnelle und auch erfolgreiche Fehlersuche!

Gruß
Sascha


Schön das es klappt :)
Freut einen immer wieder wenn man dann doch ließt das einem geholfen werden konnte :)