Forum: Mikrocontroller und Digitale Elektronik Baudratenquarz auch bei Verwendung von FTDI o.ä.?


von Micha (Gast)


Lesenswert?

Hallo,

ich möchte mit einem Atmega8 und einem CP2102 eine Kommunikation 
zwischen Controller und PC aufbauen.
Benötigt man dafür einen externen bzw. Baudratenquarz oder genügt dazu 
der interne RC-Oszillator des Mega8?
Es handelt sich nicht um ein industrielles Projekt, aber funktionieren 
soll es schon...

Vielen Dank
Micha

von Carsten-Peter C. (carsten-p)


Lesenswert?

Hallo, der ATmega8 bekommt vom vom CP2102 ein TTL-Signal mit einer 
festen Baudrate. Um diese zu erkennen, braucht er einen genauen Takt. Du 
kannst ausprobieren, ob der interne Takt ausreicht. Je größer die 
Baudrate, je genauer muss der Takt sein.
Gruß Carsten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Carsten-Peter C. schrieb:
> Je größer die Baudrate, je genauer muss der Takt sein.
> Gruß Carsten
Das stimmt übrigens nicht.
Denn 5% Abweichung sind 5% Abweichung, egal ob die Baudrate 115kBd ist 
oder 9600Bd. Und bei 5% Abweichng funktioniert die SIO nicht mehr 
zuverlässig.

Beitrag #6907752 wurde von einem Moderator gelöscht.
von H.Joachim S. (crazyhorse)


Lesenswert?

Braucht man nicht ausprobieren, die Grundrechenarten reichen um das zu 
verstehen.
@TO: du kannst (zumindest beim FTDI) fast beliebige Baudraten 
einstellen. D.h. du kannst den internen Oszillator benutzen, und dann 
z.B. auf 10kB stellen statt theoretischer 9600. Aber dazu muss man eben 
auch die tatsächliche Frequenz kennen...
Quarz (oder Resonator) machen Sinn wenn es ohne messen/einstellen 
einfach funktionieren soll, auch bei verschiedenen Temperaturen.
Baudratenquarz muss es nicht sein, wenn du nur in deinem System bleibst. 
16MHz und 100kB z.B.

von Carsten-Peter C. (carsten-p)


Lesenswert?

Hallo, ich nutze genau diese Anbindung zum ATmega 1284. Läuft 
problemlos. Das Zeitkritische ist der Eingang vom Atmega.
bei
2400 Bd dauert ein Takt 416 uS, bei 9600Bd noch 104 und bei 38400 nur 
noch 26uS.
Die 5% Systemtakt bleiben immer gleich. Wie gesagt, probier es aus.
Gruß Carsten

von Jens M. (schuchkleisser)


Lesenswert?

Milliarden von Arduino-Platinen nutzen 8- und 16MHz-Resonatoren und 
einen Seriell-zu-USB-Adapter mit einer Standarddatenrate, afaik 57600 
oder 115200 baud.
Die würden da keinen Reso oder gar Quarz einsetzen, wenn es zuverlässig 
ohne ginge...

von Programmierer (Gast)


Lesenswert?

Micha schrieb:
> Benötigt man dafür einen externen bzw. Baudratenquarz oder genügt dazu
> der interne RC-Oszillator des Mega8?

Du brauchst einen Quarz/Resonator, aber es muss kein Baudratenquarz 
sein, denn der ATmega hat ausreichend flexible Vorteiler im UART, um 
viele Baudraten zu erreichen. Daher gehen auch z.B. 8 MHz.

Oder einen Controller mit integriertem USB verwenden, welcher den Takt 
aus dem USB-Signal rückgewinnen kann und somit keinen Quarz braucht, und 
natürlich auch keinen CP2102...

von Wolfgang (Gast)


Lesenswert?

Häuptling zappliger Wolf schrieb im Beitrag #6907752:
> Das stimmt vollkommen. Probiers aus!

Du vermischt zwei völlig verschiedene Probleme:
Frequenzabweichung und Teilerquantisierung

: Wiederhergestellt durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Du vermischt zwei völlig verschiedene Probleme:
> Frequenzabweichung und Teilerquantisierung
Das ist der Knackpunkt: natürlich lassen sich für niedrigere Baudraten 
einfacher Vorteiler finden, bei denen der Fehler rechnerisch mit 
korrekter Taktfrequenz näher bei 0% Abweichung ist. Und dann hat man 
auch eher kein Problem bei 5% Taktabweichung.

Wenn man für eine höhere Baudrate beim Vorteiler aber schon bei idealer 
Quarzfrequenz 3% Abweichung hinnimmt und dann wegen des RC-Oszillators 
noch 5% Abweichung dazu kommen, dann tickt die Übertragung noch 
schneller aus.

Das Problem ist die "Baudratenabweichung bei idealer F_CPU" zuzüglich 
der "Taktabweichung von dieser F_CPU".

: Bearbeitet durch Moderator
von Wolfgang (Gast)


Lesenswert?

Lothar M. schrieb:
> Und dann hat man auch eher kein Problem bei 5% Taktabweichung.

5% Taktabweichung führt beim letzten Bit eines per UART übertragenen 
Bytes zu einem Zeitfehler von fast eine halben Bit-Zeit. Da sähe ich 
schon ein Problem.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Da sähe ich schon ein Problem.
Ja, latürnich. Deshalb schrieb ich ja "eher kein Problem". Aber 
meinetwegen streich die 5% und denk dir 4% dorthin.

Der Witz ist trotzdem, dass beim Vorteiler, der theoretisch genau 9600/s 
schafft diese neuerlichen 4% eben eher nichts ausmachen.
Aber wenn bei 115k/s der theoreische Fehler schon 3% sind und 
zusätzlich noch 4% dazukommen, dann ist mit den resultierenden 7% 
ziemlich sicher Schicht im Schacht.

Es kann natürlich auch sein, dass die 4% sich von den 3% abziehen und 
die Baudrate dann beim RC-Oszillator nur noch 1% abweicht. Glück gehabt.

: Bearbeitet durch Moderator
von Harald A. (embedded)


Lesenswert?

Micha schrieb:
> Es handelt sich nicht um ein industrielles Projekt, aber funktionieren soll es 
schon

Mache den Quarz einfach drauf und fertig. Falls Du keinen Quarz zur Hand 
hast zumindest vorsehen. Tut ja auch nicht weh es einmal vorher ohne zu 
probieren, falls keiner zur Hand.

von Olaf (Gast)


Lesenswert?

> Benötigt man dafür einen externen bzw. Baudratenquarz oder genügt dazu
> der interne RC-Oszillator des Mega8?

Um mal deine eigentliche Frage zu beantworten, RC-Oszillatoren sind in 
aller Regel nicht genau genug um RS232 zuverlaessig laufen zu haben. Es 
gibt Microcontroller wo der Hersteller die kalibriert oder 
Kalibrierkonstanten im Flash mitliefert. Da kann man das machen solange 
nicht gerade den kompletten industriellen Temperaturbereich ausnutzt.

Der Mega8 ist aber eine steinalte Kiste wo das sicherlich nicht geht.

Was du aber machen kannst wenn deine Kiste Slave ist, also zuerstmal 
etwas empfangen muss bevor es selber sendet, du koenntest reinkommende 
Bytes analysieren und dann passt du deine Baudrate darauf an.

Es muss im uebrigen nicht zwangslaeufig ein Quarz sein. Es gibt auch 
noch Keramikresonatoren. Die sind nicht ganz so gut wie Quarze, aber 
fuer RS232 genau genug.

Olaf

von Anja (Gast)


Lesenswert?

Wolfgang schrieb:
> 5% Taktabweichung führt beim letzten Bit eines per UART übertragenen
> Bytes zu einem Zeitfehler von fast eine halben Bit-Zeit. Da sähe ich
> schon ein Problem.

Man könnte auch so wie früher 5 Datenbits und 1,5 - 2 Stop-Bits 
verwenden um ein etwas entspannteres Timing zu haben.

Gruß Anja

von Stefan F. (Gast)



Lesenswert?

Es ist aber auch so, dass kein UART Signal wirklich rechteckig ist. Die 
Flanken der Signale sind mindestens ein bisschen abgerundet.

Je höher die Baudrate ist, umso stärker ist das Risiko, dass das Signal 
bis zur Unkenntlichkeit verzerrt wird.

Abweichungen der Baudrate sind eine Komponente, Verzerrungen des Signals 
eine weitere. Wenn erst beides Zusammen zur Fehlfunktion führt, bekommt 
man den Eindruck, dass niedrige Baudraten weniger kritisch seien.

von Olaf (Gast)


Lesenswert?

> Es ist aber auch so, dass kein UART Signal wirklich rechteckig ist. Die
> Flanken der Signale sind mindestens ein bisschen abgerundet.

Ja, das ist ein guter und richtiger Einwand. Je nach 
Uebertragungsstrecke (z.B Optokoppler) kann das auch extrem werden.

Es kann auch noch vom UART und dem Teilerverhaeltnis der Baudrate 
abhaengen. Silabs hat in ihren MCUs teilweise Baudratengeneratoren wo 
das Schieberegister Teil eines fraktionalen Teilers ist. Kennt ihr ja 
bestimmt von fraktionalen PLLs. Wenn man dann eine Baudrate verwendet 
die sich nicht gerade runterteilen laesst dann sind einzelne Bits 
unterschiedlich lang, damit es im Mittel ueber das gesamte Datenwort 
wieder passt.

Was mich aber an der ganzen Sache aber am meisten fasziniert, ich hab 
bisher noch nie irgendein Dokument gefunden das sagt bis x% Prozent 
Fehler ist okay, darueber ist kacke. Ich vermute mal das haengt 
teilweise auch noch vom UART ab er am 1, 3 oder 5x abtastet und 
bewertet. Aber trotzdem erstaunlich in einer Zeit wo es fuer jeden 
Tuedelkram eine Norm und drei Vorschriften gibt.

Olaf

von Stefan F. (Gast)


Lesenswert?

Olaf schrieb:
> Was mich aber an der ganzen Sache aber am meisten fasziniert, ich hab
> bisher noch nie irgendein Dokument gefunden das sagt bis x% Prozent
> Fehler ist okay, darueber ist kacke.

Dann schau dir mal die Datenblätter der AVR in. Ich meine, dass in jedem 
einzelnen drin steht, maximal 2% Abweichung in Ordnung gehen. Die gehen 
dabei vom worst case aus, dass der AVR zum beispiel 2% darüber liegt und 
der UART 2% darunter.

Exakter kann man das auch gar nicht sagen, weil man nicht genau weiß, 
wann die Bits abgetastet werden. Das hängt nicht nur vom UART und seiner 
Taktfrequenz ab, sondern auch von der Steilheit der fallenden Flanke des 
Start Bits und der Schaltschwelle auf LOW Pegel, die ist ja nur sehr 
grob spezifiziert.

von Purzel H. (hacky)


Lesenswert?

Was soll das Gezerre um einem Quarz, den gibt es fuer um die 20 cents.

von Stefan F. (Gast)


Lesenswert?

Purzel H. schrieb:
> Was soll das Gezerre um einem Quarz, den gibt es fuer um die 20 cents.

Plus Kondensatoren, Plus zwei Pins, und er erhöht das Ausfallrisiko, vor 
allem bei Stößen.

von H. H. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Purzel H. schrieb:
>> Was soll das Gezerre um einem Quarz, den gibt es fuer um die 20 cents.
>
> Plus Kondensatoren, Plus zwei Pins, und er erhöht das Ausfallrisiko, vor
> allem bei Stößen.

Keramikresonator hat die Kondensatoren schon drin, ist robuster und 
billiger.

von ups (Gast)


Lesenswert?

Purzel H. schrieb:
> Was soll das Gezerre um einem Quarz, den gibt es fuer um die 20
> cents.

Im Zweifelsfall der Stromverbrauch. Ist kritisch mit Batterie.

Bei manchen CPUs kann man aber immer noch mit Uhrenquarz den internen RC 
Oszillator kalibrieren. Ein Uhrenquarzoszillator braucht wesentlich 
weniger Strom als ein schneller.

von H. H. (Gast)


Lesenswert?

ups schrieb:
> Bei manchen CPUs kann man aber immer noch mit Uhrenquarz den internen RC
> Oszillator kalibrieren. Ein Uhrenquarzoszillator braucht wesentlich
> weniger Strom als ein schneller.

Clever!

von Christian (Gast)


Lesenswert?

Wenn es nicht am Budget und am Platz mangelt,
mach nen Quartz dran.

Ist später bei der Fehlersuch etwas einfacher, also eine Fehlerquelle 
weniger.

von Rudolph (Gast)


Lesenswert?

Olaf schrieb:
> Was mich aber an der ganzen Sache aber am meisten fasziniert, ich hab
> bisher noch nie irgendein Dokument gefunden das sagt bis x% Prozent
> Fehler ist okay, darueber ist kacke.

Ich schon: https://www.maxlinear.com/appnote/dan108.pdf

Wobei hier die Abweichung der Sender- und Empfänger-Baud-Rate betrachtet 
wird. Da sind voneinander abweichende Baud-Einstellungen und 
Clocktoleranzen halt schon mit drin. Ist oben ja schon erwähnt worden.

von Arno (Gast)


Lesenswert?

Olaf schrieb:
> Was mich aber an der ganzen Sache aber am meisten fasziniert, ich hab
> bisher noch nie irgendein Dokument gefunden das sagt bis x% Prozent
> Fehler ist okay, darueber ist kacke. Ich vermute mal das haengt
> teilweise auch noch vom UART ab er am 1, 3 oder 5x abtastet und
> bewertet.

Vor allem kann man es ausrechnen: Da das Bit üblicherweise mittig 
abgetastet wird, darfst du maximal ein halbes Bit Versatz haben, bevor 
die Leitung neu synchronisiert (und auch bei Überabtastung, z.B. 3x pro 
Bit, wird einer der Abtastpunkte in der Mitte liegen und bei sauberem 
Signal derjenige sein, bei dem die Erkennung kippt).

Bei der vermutlich meistverwendeten 8N1-Übertragung wird nach 10 Bits 
(1x Start, 8x Daten, 1x Stop) neu synchronisiert. 0,5/10 sind 5%.

Jeder der Kommunikationspartner kann falsch liegen, also maximal 2,5% 
Abweichung pro Kommunikationspartner, und um etwas auf der sicheren 
Seite zu liegen, nennt man meist maximal 2%.

Wie Anja schon richtig schrieb: Mit weniger Datenbits wird die 
tolerierbare Abweichung größer.

Und wenn man keine universellen Kommunikationsgeräte baut, sondern beide 
Kommunikationspartner kennt, kann man statt 2x2% auch 0,1% und 3,9% 
Abweichung zulassen. Ich weiß nicht, ob die Toleranz der Baudrate des 
CP2102 spezifiziert ist, beim FT232R sind es 0,7%. Da kann man 
allerdings auch den internen Oszillator des FT232R an einem Pin ausgeben 
und als Takt für den Mikrocontroller nutzen...

MfG, Arno

von c-hater (Gast)


Lesenswert?

ups schrieb:

> Bei manchen CPUs kann man aber immer noch mit Uhrenquarz den internen RC
> Oszillator kalibrieren.

Das kann man eigentlich bei jedem µC machen, sofern er über einen 
getrennten Oszillator für einen Uhrenquarz verfügt, und zwar in 
Software.

Was du meinst, sind die "Luxusteile", die einem das abnehmen und gleich 
in Hardware abfackeln. Z.B.: AVRxxxDA/Byy.

> Ein Uhrenquarzoszillator braucht wesentlich
> weniger Strom als ein schneller.

So ist es.

von FOp (Gast)


Lesenswert?

Wenn Du genug Pins frei hast, greife doch einfach zu einem FT240X von 
FTDI oder was ähnlichem. Damit hast Du das Problem komplett umgangen.

von Georg (Gast)


Lesenswert?

Olaf schrieb:
> Ich vermute mal das haengt
> teilweise auch noch vom UART ab er am 1, 3 oder 5x abtastet

Sowas gibt es nicht, üblich sind Abtastraten von 8 x oder bei guten 
UARTs 16 x Bitrate. D.h. nach der Flanke des Startbits erfolgt die erste 
Abfrage nach 4 Takten (Mitte des Startbits), danach nach 12 Takten 
(Mitte des ersten Bits) usw. usw. (bei 16fach: nach 8, 24 usw.). Es gibt 
auch UARTs, die in der Mitte eines Bits mehrfach, z.B. 3fach abtasten, 
zur Sicherheit.

Nebenbei bemerkt, bei 1, 3 oder 5 Takten pro Bit kann man garnicht in 
der Mitte eines Bits abtasten - teil mal 3 Takte in 2 gleiche Hälften.

Georg

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.