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
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
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.
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.
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
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...
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...
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
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
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.
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
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.
> 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
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
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.
> 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
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.
Was soll das Gezerre um einem Quarz, den gibt es fuer um die 20 cents.
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.
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.
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.
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!
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.
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.
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
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.
Wenn Du genug Pins frei hast, greife doch einfach zu einem FT240X von FTDI oder was ähnlichem. Damit hast Du das Problem komplett umgangen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.