Guten Abend, ich möchte einen atmega328p mit 3,3V und ca. 8MHz betreiben. Dabei soll die UART, I2C(Sensor) und ISP(SD-Karte) verwendet werden. Für eine fehlerfreie Serielle Datenübertragung würde sich ja ein 7,3728 MHz Quarz anbieten ( https://www.mikrocontroller.net/articles/Baudratenquarz ). Was mich stuzig macht, dass der arduino pro mini und einige andere Boards mit 3,3V ein 8MHz Quarz bzw. Oszilator verwenden. Daher meine Frage: 1)Was spricht für 8 MHz gegenüber 7,3728 MHz? 2)sehe ich das richtig, dass ich bei 9600 baud und 8 MHz kein Problem haben sollte (siehe Anhang)(?). Viele Grüße Peter
1. alles Andere was von 8MHz abgeleitet wird ist runder 2. 0,2% ist im Rahmen der Toleranz
Hallo, im Dabla des uCs gibt es eine Tabelle mit Taktfrequenzen und Teilerverhältnissen für das UART, die angibt, wie groß der Fehler im Vergleich zu einer der üblichen Baudraten wird, je nachdem, welchen Takt man verwendet. Hinzu kommen noch Toleranzen des eigenen Oszillators und desjenigen des Empfängers, so daß man die Toleranz nicht zu groß werden lassen sollte. Dem I2C ist das egal. MfG
:
Bearbeitet durch User
Vielen Dank für die schnellen Antworten! Ich denke ich werde 8 MHz nehmen.
Der Atmega328 verträgt lt. Datenblatt bei 2,7V 10Mhz. Bei 3,3V geht theoretisch sogar etwas mehr. (Diagramm) Ich betreibe den 328 bei 3,3V mit den vollen 20 MHz und hatte noch nie Probleme.
Peter schrieb: > Ich denke ich werde 8 MHz nehmen. Wenn du die noch Shoppen musst: Kaufe dir 18,432 MHz Quarze: Mittels dem System-Clock-Prescaler kannst du auch damit die Taktfrequenz deutlich runter drehen, hättest aber auch für die Zukunft einen Quarz wenn es schnell gehen muss mit dem auch recht hohe Baumarten fehlerfrei drin sind. Wenn du dagegen nur für dieses eine Projekt einen Quarz kaufen musst: Hm, klar, 8 MHz geht. 7,3728 MHz geht aber genauso bzw. man kann sich fragen: Warum keine 4 MHz oder 12 MHz?
Es gibt weitere Baudrate-kompatible Frequenzen in diesem Bereich: 9,8304 MHz und 11,0592 MHz https://www.mikrocontroller.net/articles/Baudratenquarz
Ich nehme immer den internen 8Mhz Taktgeber. Hatte noch nie Probleme damit.
Peter schrieb: > 1)Was spricht für 8 MHz gegenüber 7,3728 MHz? Nichts. Mit 7,3728MHz sind bis zu 921,6kBaud möglich. Mit 8MHz nur max 38,4kBaud.
Pete K. schrieb: > Ich nehme immer den internen 8Mhz Taktgeber. Hatte noch nie > Probleme > damit. Bei 9600 Baud geht der ja auch problemlos mit dem internen Oszillator, dieser schwankt nämlich zwischen 7,4 und 8,4 MHz, je nach Temperatur und Spannung. Auf die 9600 Baud bezogen schwankt der Fehler dann zwischen etwa -0,4% und +0,6% und das ist völlig im grünen Bereich für eine serielle Übertragung.
M. K. schrieb: > schwankt nämlich zwischen 7,4 und 8,4 MHz, je nach Temperatur und > Spannung. Auf die 9600 Baud bezogen schwankt der Fehler dann zwischen > etwa -0,4% und +0,6% hast du da eine Kommastelle verschoben?
Walter S. schrieb: >> schwankt nämlich zwischen 7,4 und 8,4 MHz, je nach Temperatur und >> Spannung. Auf die 9600 Baud bezogen schwankt der Fehler dann zwischen >> etwa -0,4% und +0,6% > hast du da eine Kommastelle verschoben? Mindestens :-) Außerdem bleibt die prozentuale Abweichung natürlich unabhängig von der Baudrate gleich; lediglich die Annäherung an die gewünschte Baudrate durch verfügbare Teilerverhältnisse ist unterschiedlich. Ganz abgesehen davon liegt der grüne Bereich bei +/- 0.2%. Mit 8MHz Quarz sind demnach 2400, 4800, 9600, 19200 und 38400 ok. Der interne Oszillator taugt lediglich für Morsezeichen.
Walter S. schrieb: > hast du da eine Kommastelle verschoben? Nein, hab ich nicht. Ich hab blöder Weise das UBBR mit F_CPU angepasst. Was für ein blöder Schnitzer...
M. K. schrieb: > recht hohe Baumarten Mammutbäume? https://upload.wikimedia.org/wikipedia/commons/5/56/General_Grant_Tree_in_Kings_Canyon_National_Park.jpg
Peter D. schrieb:
1 > Nichts.
2 > Mit 7,3728MHz sind bis zu 921,6kBaud möglich.
3 > Mit 8MHz nur max 38,4kBaud.
1 | Wenn der TO die Geschwindigkeit von 2 möchte, dann ist |
2 | die Geschwindigkeit von 3 ein Widerspruch zur Aussage 1. |
LOL schrieb: > Wenn der TO die Geschwindigkeit von 2 möchte, dann ist > die Geschwindigkeit von 3 ein Widerspruch zur Aussage 1. Nö. Du mußt schon vollständig zitieren und nicht die Frage zu meiner Antwort weglassen: Peter D. schrieb: > Peter schrieb: >> 1)Was spricht für 8 MHz gegenüber 7,3728 MHz? > > Nichts. > > Mit 7,3728MHz sind bis zu 921,6kBaud möglich. > Mit 8MHz nur max 38,4kBaud.
Peter schrieb: > Daher meine Frage: > 1)Was spricht für 8 MHz gegenüber 7,3728 MHz? Du kannst einen genauen 1ms-Timer-Tick bauen (sogar mit einem 8-Bit-Timer - Prescaler 64, CTC bei 124). Ob du das brauchst (und in den 8000 Takten zwischen den IRQs etwas sinnvolles anfangen kannst), musst du schon selbst wissen... genau wie du die Frage selbst beantworten musst, ob dir 38400 Baud reichen oder nicht. MfG, Arno
Arno schrieb: > Du kannst einen genauen 1ms-Timer-Tick bauen bei 7,3728 MHz? wären es 0,1% Fehler bei einem 8Bit-Timer (und PreScaler32) und 0,04% Fehler mit 16Bit-Timer (ohne PRescaler).
Das sind 8,6 Sekunden pro Tag (wenn es Prescaler 32 gibt, wimre haben das nicht alle AVR?) bzw. 3,5 Sekunden pro Tag. Man kann natürlich auch jede fünfte Sekunde verkürzen, um das auszugleichen, aber einfacher wird es mit 8MHz :) MfG, Arno
InFo schrieb: > Ich betreibe den 328 bei 3,3V mit den vollen 20 MHz und hatte noch nie > Probleme. Du hast wahrscheinlich auch noch nie gleichzeitig den vollen Temperaturbereich des ATmega328 ausgenutzt.
Arno schrieb: > Du kannst einen genauen 1ms-Timer-Tick bauen (sogar mit einem > 8-Bit-Timer - Prescaler 64, CTC bei 124). Wozu man auch immer einen exakten 1ms-Takt benötigen sollte, ich kenne jedenfalls keine Anwendung, wo so ein Takt wirklich unverzichtbar wäre... In den allermeisten Anwendungen dürfte es tatsächlich keinerlei Rolle spielen, wenn er ein paar Prozent daneben liegt, denn so ein Takt wird ja üblicherweise nur zur Realisierung irgendwelcher mittellangen Wartezeiten benutzt, und dabei spielt eine ms mehr oder weniger normalerweise überhaupt keine Geige. Probleme bekommen nur die, die dann aus so einem Takt wieder einen exakten Sekundentakt ableiten wollen und die obendrein nicht zur Primfaktorzerlegung in der Lage sind. Alle anderen würden mit einem Fehler von 4% beim "ms-Takt" leben und am Ende doch eine genaue Sekunde haben, naja, so genau halt der Quarz selber ist...
Wenn der Kommunikationspartner des ATmega328P ein selbstprogrammierter Mikrocontroller oder ein PC mit USB-RS-232-Konverter ist, muss man nicht an den krummen Bitraten aus dem Zeitalter der Telefonmodems kleben bleiben, sondern kann bspw. auch 10, 20, 50 oder 100 kbit/s verwenden, die alle sauber aus den 8 MHz ableitbar sind. PCs mit nativer RS-232-Schnittstelle auf 16x50-Basis werden ja immer seltener, und ein USB-UART wie der FT232R kann alle Bitraten exakt darstellen, die auch ein AVR mit 8 MHz kann, und noch viele weitere mehr.
Also ich sehe bei einer Baudrate von 2.4k, 4.8k, 9.6k, 14.4k, 19.2k, 28.8k, 38.4k und 76.8k keine Probleme. (Das Manual sieht übrigens auch keine) Suchen wir uns gerade ein Problem?
Also ich würde mich dem Vorschlag von eProfi mit den 11.0592 MHz anschließen oder auch, da bei 3.3 V 13.3 MHz zulässig sind, 14.7456 nehmen, das sollte keine Probleme verursachen.
Wenn Du mit UART arbeitest und Angt hast, nimm einen baudrate-Quarz. Wenn Du es mit genauen Zeiten hast, ist eine vorn ganzzahlige Zahl mit Nullen dahinter leichter verwendbar. Anwendungen mit USB sind oft auf einen 12MHz-Quarz angewiesen. Nimm halt das was gerade da ist oder am besten von der Baugröße her passt. Ich selbst hab mal einen Gurt mit 50 Quarzen für wenige Euro erworben. Seitdem laufen meine Kontrollerplatinen fast alle mit der doppelten Frequenz des PAL-Farbträgers. (8,6... MHz) Mit ein bisschen Rechnung hab ich immmer ausreichend genaue UART-Takte oder Zeiten hinbekommen.
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.