Hallo zusammen, weiß jemand, wie genau der 128KHz Oszillator im atmega1284p ist? Im Datenblatt habe ich dazu nichts gefunden. Ich plane, damit eine Digitaluhr zu bauen, allerdings verliere ich mehrere Sekunden pro Minute. Vielen Dank für eure Ratschläge. Ich hänge den Code an, falls irgendwo ein Fehler drin ist, der dafür verantwortlich sein könnte
David P. schrieb: > weiß jemand, wie genau der 128KHz Oszillator im atmega1284p ist? Nicht sonderlich, so um die +/-10%, eher schlechter. > Im Datenblatt habe ich dazu nichts gefunden. > Ich plane, damit eine Digitaluhr zu bauen, Schlechte Idee. > allerdings verliere ich > mehrere Sekunden pro Minute. > Vielen Dank für eure Ratschläge. Nimm einen 32kHz Uhrenquarz und betreibe den am Timer 2 asynchron. AVR - Die genaue Sekunde / RTC
David P. schrieb: > Im Datenblatt habe ich dazu nichts gefunden. Psst, nicht weitersagen: S. 353 https://ww1.microchip.com/downloads/en/DeviceDoc/doc8059.pdf
David P. schrieb: > weiß jemand, wie genau der 128KHz Oszillator im atmega1284p ist? Ziemlich ungenau. > Ich plane, damit eine Digitaluhr zu bauen, allerdings verliere ich > mehrere Sekunden pro Minute. In Relation zu der Anforderung, die ich an eine "Uhr" stellen würde, katastrophal ungenau. > Im Datenblatt habe ich dazu nichts gefunden. Da musst du wohl deine Fähigkeiten bezüglich des Lesens eines Datenblatts noch deutlich erweitern...
Da hab ich wohl an der falschen Stelle gesucht. Ich hatte lediglich auf Seite 326 die Daten zum 8MHz Oszillator gesehen. Warum nennt man das ganze 128KHz Oszillator, wenn er die Frequenz eigentlich nie hat?
Es stimmt ja so ungefähr; ebenso wie die Angabe 8 MHz für den anderen (genaueren) RC-Oszillator - es kommt eben auf die Anforderungen des Anwenders an. Vielleicht noch zwei Zitate aus dem Datenblatt: "... providing a clock of 128kHz. The frequency is nominal at 3V and 25 °C" "Note that the 128kHz oscillator is a very low power clock source, and is not designed for high accuracy" - aber was ist schon unter Letzterem zu verstehen!?
David P. schrieb: > Warum nennt man das ganze 128KHz Oszillator, wenn er die Frequenz > eigentlich nie hat? Wenn man 1000 AVR ausmißt, liegt der Mittelwert schon ganz gut bei 128kHz ;-) So wie der Durchschnittsmensch 1,70m groß ist . . .
David P. schrieb: > Warum nennt man das ganze 128KHz Oszillator, wenn er die Frequenz > eigentlich nie hat? Ja, das ist eine interessante Frage, warum die Watchdog Oscillator Frequency durch ihren höchstmöglichen Wert repräsentiert wird.
Georg M. schrieb: > Ja, das ist eine interessante Frage, warum die Watchdog Oscillator > Frequency durch ihren höchstmöglichen Wert repräsentiert wird. Finde ich völlig uninteressant. Ausserdem ist es nicht der Höchstwert, sondern, wie schon weiter oben angedeutet, ein Durchschnittswert.
Ok, ich hab dann mal einen Uhrenquarz bestellt, mal schauen, wie es dann klappt.
Die internen RC-Oszillatoren kann man für alle zeitkritischen Dinge vergessen. Die sind ungenau und driften mit diversen Einflüssen wie der Temperatur. Ich hab damit mal RS-232 probiert, kannste knicken. Sehr langsam geht (will man aber nicht) und bei hohen Bitraten gibts mehr Fehler als fehlerfreie Bytes.
womit versorgst du den AVR? Hängt da irgendwo ganz vorne ein Trafo in der Kette dann könntest du mit der Netzfrequenz synchronisieren. https://de.wikipedia.org/wiki/Synchronuhr
Georg M. schrieb: > Ja, das ist eine interessante Frage, warum die Watchdog Oscillator > Frequency durch ihren höchstmöglichen Wert repräsentiert wird. Das ist der wesentliche Wert, der für einen Watchdog interessant ist, weil die höchstmögliche Frequenz festlegt, nach welcher Zeit minimal ein Watchdog Reset ausgelöst werden würde. Dyson schrieb: > Finde ich völlig uninteressant. Ausserdem ist es nicht der Höchstwert, > sondern, wie schon weiter oben angedeutet, ein Durchschnittswert. Dann kannst du diese Aussage bestimmt auch durch einen Verweis aufs Datenblatt belegen. Ansonsten würde ich die mal ganz deutlich als Falsch bezeichnen. Hast du schon mal im Datenblatt ins Kapitel 27.11 Internal Oscillator Speed geguckt? Die typischen Werte liegen alle deutlich unter den 128kHz. RTFM
Ben B. schrieb: > Ich hab damit mal RS-232 probiert, kannste knicken. Sehr > langsam geht (will man aber nicht) und bei hohen Bitraten gibts mehr > Fehler als fehlerfreie Bytes. 8MHz geht bis 38400Baud. Ab 57600Baud ist der Rechenfehler zu hoch. Ob Quarz oder RC ist dabei egal. Daher gibt es Baudratenquarze (z.B. 7,3728MHz).
Wolfgang schrieb: > Dann kannst du diese Aussage bestimmt auch durch einen Verweis aufs > Datenblatt belegen. Ansonsten würde ich die mal ganz deutlich als > Falsch bezeichnen. Kann ich nicht und will ich auch nicht. Warum sollte ich auch? Weil du hier den großkotzigen Schlaumeier machst? Die Aussage bezog sich eindeutig auf die Aussage 2 Beiträge zuvor. Ausserdem schreibt man falsch klein und auch fettgedruckt ist es grossgeschrieben falsch. Oder was willst du damit zum Ausdruck bringen? Dass es besonders falsch ist? Wolfgang schrieb: > RTFM Wer oder was bist du eigentlich?
Ben B. schrieb: > Die internen RC-Oszillatoren kann man für alle zeitkritischen Dinge > vergessen. Die sind ungenau und driften mit diversen Einflüssen wie der > Temperatur. Ich hab damit mal RS-232 probiert, kannste knicken. > Atmega1284p Ohne jetzt wirklich das Datenblatt geprüft zu haben.... Üblicherweise, ist der WDT zu ungenau für eine Uhr. Der interne RC Oszillator (für den µC Takt) ebenso. Macht sogar u.U. mit der UART Probleme. Also macht es Sinn, den ATMega mit einem Uhrenquarz zu versehen, wenn man denn halbwegs genau mit der Zeit sein möchte. Hat man das getan, kann man den µC durchaus mit 8MHz intern laufen lassen, und diese Frequenz, anhand der Uhr, kalibrieren (OSCCAL?). Dann klappts auch mit der Baudrate viel besser.
Wolfgang schrieb: > Psst, nicht weitersagen: S. 353 > https://ww1.microchip.com/downloads/en/DeviceDoc/doc8059.pdf Das sind aber nur typische Werte, die in der Realität schon nochmal ordentlich abweichen können. Atmel/Microchip verweigert hier (auf auf interne Nachfrage) sehr hartnäckig irgendwelche Toleranzangaben. Bei der neuen (na ja, mittlerweile nicht mehr ganz so neuen) AVR-1 Serie wird ein "full-opteration range" von +-30% genannt. Aber auch das ist nicht zu 100% nachgemessen, sondern nur charakterisiert. Bei einem Betriebspunkt Vcc=3.0V und +25% werden (überprüfte) +-3 % genannt. z.B. https://ww1.microchip.com/downloads/en/DeviceDoc/ATtiny417-814-816-817-DataSheet-DS40002288A.pdf Seite 511 Gruß Robert
EAF schrieb: > Also macht es Sinn, den ATMega mit einem Uhrenquarz zu versehen, wenn > man denn halbwegs genau mit der Zeit sein möchte. > > Hat man das getan, kann man den µC durchaus mit 8MHz intern laufen > lassen, und diese Frequenz, anhand der Uhr, kalibrieren (OSCCAL?). Dann > klappts auch mit der Baudrate viel besser. Moderne AVR8 können diese Autokalibrierung teilweise sogar selbstständig in Hardware leisten. Man muss das nur noch aktivieren. Z.B. die AVR128Dxyyy.
Falk B. schrieb: > AVR - Die genaue Sekunde / RTC Die Uhrenqartze sind heute gekommen. Ich habe versucht die Anleitung zu befolgen, leider passiert dabei gar nichts.
David P. schrieb: > Ich habe versucht die Anleitung zu > befolgen, leider passiert dabei gar nichts. Welche Anleitung? Der Uhrenquarz ist nur für Timer2. Da ist beim ersten Mal ein bisschen Umdenken erforderlich. https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Timer2_im_Asynchron_Mode
Also mit Verlaub: Ihre Beschreibung ist mehr als dürftig, sie ist nahezu
unbrauchbar.
Trotzdem ein Versuch:
> Auch das hab ich grad versucht
So?
Dann mal die letzte Zeile der ISR ('while(ASSR...') kopieren und zu
Beginn zwischen 'OCR2A=...' und 'TIMSK2>=...' einfügen.
David P. schrieb: > leider passiert dabei gar nichts. David P. schrieb: > leider völlig erfolglos. Da sind Nullaussagen, damit kann niemand was anfangen. Du mußt schon ins Detail gehen und natürlich auch Deinen konkreten Sourcecode anhängen (nicht einfügen).
Ich habe den jeweiligen Source code aus den beiden anleitungen kopiert und in Microchip studio compiliert. Da das ohne Fehler ging, habe ich ihn hochgeladen. Leider leuchtet keine LED. Das wäre der Code.
David P. schrieb: > Leider leuchtet keine LED. Das wäre der Code. Dann lies mal diese Stelle in "deinem" Programm:
1 | while(1) |
2 | {
|
3 | /*Hier kann die aktuelle Zeit
|
4 | ausgeben werden*/
|
5 | }
|
Dietrich L. schrieb: > David P. schrieb: >> Leider leuchtet keine LED. Das wäre der Code. > > Dann lies mal diese Stelle in "deinem" Programm: >
1 | > while(1) |
2 | > { |
3 | > /*Hier kann die aktuelle Zeit |
4 | > ausgeben werden*/
|
5 | > } |
6 | >
|
Da hab ich wohl den falschen Code geschickt. Bei mir stand da schon das:
1 | PORTD=sekunde; |
und vor der While schleife hab ich auch schon port d als output festgelegt
S. Landolt schrieb: > Mit diesem Programm blinkt eine LED an D6 - vielleicht hilft's Ihnen ja. Auch das tut es bei mir leider nicht...
S. Landolt schrieb: > Der Quarz ist an C6 & C7 angeschlossen? Und das ist die Antwort, ich hatte ihn an xtal 1 und 2. dann soll es auch nicht funktionieren...
Was mir noch einfällt: bei mir hier läuft der ATmega1284P mit den Standardfuses, also auf 1 MHz - falls bei Ihnen noch der 128 kHz-Oszillator eingeschaltet sein sollte: "Asynchronous Operation of Timer/Counter2 ... The CPU main clock frequency must be more than four times the Oscillator frequency"
Vlt hatte ich es falsch formuliert. Nachdem ich den Qartz an die richtigen Pins gehängt habe, geht es jetzt. Vielen Dank für die Antworten
> ich hatte ihn an xtal 1 und 2
Das geht nur bei den kleineren, den '8ern': ATmega8, _48 ... _328.
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.