Hallo zusammen, ich versuche den Takt meines atmega328p mit einem Uhrenquarz 32,768kHz (12,5pF) laufen zu lassen, da mit diesem Quarz eine "relativ" einfache Umrechnung in Sekunde, Minute erreichbar ist. Dafür habe ich die LFuse so eingestellt wie ich es im Datenblatt steht unter "Low frequency crystal oscillator". dabei habe ich SUT1..0 auf 01 gesetzt (slowly rising Power) und CSKEL3..0 auf auf 0100 gesetzt (This option should only be used if frequency stability at start-up is not important for the application). Nun erkennt AVRUDE den µC aber nicht mehr. Die Keramikkondensatoren an XTAL1 und XTAL2 besitzen 22pF. Der Quarz sitzt parallel dazu. Nun frage ich mich, was hab ich diesmal falsch gemacht?
•Low Freq.: 0,9 - 3 MHz •Medium Freq.: 3 - 8 MHz •High Freq.: >= 10 MHz Das versteht das Datenblatt unter low frequency. Was passiert bei 32kHz ???
Irendwo schreiben die man kann den Uhr-Quarz auch an einen Timer Eingang anschließen.
Der ISP-Takt darf maximal 1/4 des Systemtaktes sein, in Ihrem Fall also rund 8 oder 1 kHz, je nachdem, wie CKDIV8 gesetzt ist. Meist ist es sinnvoller, den internen RC-Oszillator mit 8 MHz laufen zu lassen und den Uhrenquarz asynchron per Timer2 auszulesen.
S. Landolt schrieb: > Der ISP-Takt darf maximal 1/4 des Systemtaktes sein, in Ihrem Fall also > rund 8 oder 1 kHz, je nachdem, wie CKDIV8 gesetzt ist. > > Meist ist es sinnvoller, den internen RC-Oszillator mit 8 MHz laufen zu > lassen und den Uhrenquarz asynchron per Timer2 auszulesen. Ich danke Ihnen wieder für die Antwort. Das habe ich auch schon gelesen, allerdings weiß ich nicht genau wie man sowas veranstaltet. Frage wäre hier: ist es dann trotzdem noch stromsparend den µC zu verwenden, sonst könnte ich ja auch wie sie aus meinen vorherigen Beitrag vielleicht noch wissen einen 8 oder 16 MHz Quarz nehmen.
S. Landolt schrieb: > Der ISP-Takt darf maximal 1/4 des Systemtaktes sein, in Ihrem Fall also > rund 8 oder 1 kHz, je nachdem, wie CKDIV8 gesetzt ist. > > Meist ist es sinnvoller, den internen RC-Oszillator mit 8 MHz laufen zu > lassen und den Uhrenquarz asynchron per Timer2 auszulesen. das mit den 1/4 hab ich schon oft gelesen, allerdings kann ich immer noch nichts damit anfangen. CKDIV8 ist bei mir unprogrammed
> stromsparend Ja sicher, es ist überhaupt die stromsparendste Methode, man kommt unter 1 uA: der uC schläft und wird z.B. im 1 s-Rhythmus geweckt. > CKDIV8 ist bei mir unprogrammed Dann müssen Sie AVRDUDE auf unter 1 kHz einstellen, wie, kann ich Ihnen nicht sagen.
Pardon, jetzt bin ich selbst hereingefallen: unprogrammed, steht also auf '1' bzw. das Fuse-Low-Byte auf 0x54, dann reichen 8 kHz.
Und nochmals falsch, 0xD4 muss das heißen. (Ich trinke erstmal einen Kaffee)
S. Landolt schrieb: >> stromsparend > Ja sicher, es ist überhaupt die stromsparendste Methode, man kommt unter > 1 uA: der uC schläft und wird z.B. im 1 s-Rhythmus geweckt. > >> CKDIV8 ist bei mir unprogrammed > Dann müssen Sie AVRDUDE auf unter 1 kHz einstellen, wie, kann ich Ihnen > nicht sagen. gut zu wissen, dann werde ich in den Timer wohl verwenden um den Takt auf z.B. eine Sekunde setzen zu können. Auch gut zu wissen dass ich das mit AVRDUDE den Systemtakt einstellen muss. Das sollte ich in den "Introduction" wohl irgendwo finden. Vielen Dank für ihre Antworten!
S. Landolt schrieb: > Und nochmals falsch, 0xD4 muss das heißen. > (Ich trinke erstmal einen Kaffee) Alles gut! gilt 0xD4 also!? kann ich mit dem angeschossenen 328p (Werkeinstellung) mit angeschlossenen Uhrenquarz so umkonfigurieren (also mit setzen des LFUSE auf 0xD4) und es sollte klappen und ich muss den Systemtakt bei AVRDUDE nicht mehr umstellen ?
> mit AVRDUDE den Systemtakt einstellen
Den ISP-Takt, mit Systemtakt ist der des Zielsystems gemeint, also des
ATmega328.
Großes Missverständnis: nach Ihrer Schilderung haben Sie anfangs das Fuse-Low-Byte auf 0xD4 gesetzt: CKDIV8 unprogrammed, SUT 01, CKSEL 0100 und CKOUT wurde ja sicher auf '1' gelassen.
Machen Sie jetzt erstmal den ATmega328 wieder normal zugänglich, d.h. das Fuse-Low-Byte auf 0x62 (1 MHz) oder 0xE2 (8 MHz). Die asynchrone Nutzung des Uhrenquarzes erfolgt rein softwaremäßig.
S. Landolt schrieb: > Machen Sie jetzt erstmal den ATmega328 wieder normal zugänglich, d.h. > das Fuse-Low-Byte auf 0x62 (1 MHz) oder 0xE2 (8 MHz). > Die asynchrone Nutzung des Uhrenquarzes erfolgt rein softwaremäßig. ich erreiche den 328p leider nicht mehr. allerdings habe ich jetzt noch ein paar. Daher nehm ich mir erstmal ein neuen. Den alten 328p kann ich später nochmal mit einem anderen µC versuchen zu erreichen. Da sie ja meinen, dass es sinnvoller und auch effizienter ist den Uhrenquarz mittels dem Timer zu nutzen, könnten sie mir Auskunft geben was ich mir dort aneignen sollte und wo ich so welche Informationen finde. Natürlich nur als ersten Impuls, ich erwarte keine vollständige Erklärung! In der Literatur wurde es bisher nur oberflächlich angesprochen.
Grundlage ist das Datenblatt, logisch. Sie finden auch einiges am Ende des Artikels 'AVR - Die genaue Sekunde / RTC' https://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC das ist allerdings für den Anfang unnötig kompliziert, da eine Justierung vorgesehen ist. Vielleicht gibt es auch eine Application-Note von Atmel/Microchip, müsste ich aber auch erst suchen.
S. Landolt schrieb: > Großes Missverständnis: nach Ihrer Schilderung haben Sie anfangs das > Fuse-Low-Byte auf 0xD4 gesetzt: CKDIV8 unprogrammed, SUT 01, CKSEL 0100 > und CKOUT wurde ja sicher auf '1' gelassen. und ich frage mich halt auch warum es nicht funktioniert, wenn sie mir ja das Selbe (also 0xD4) empfehlen. Also der alte µC funktioniert mit dem neuen Quarz natürlich allerdings viel zu langsam. jeder (eigentliche Sekunden) Takt dauert nun 16000/32,768. Also ungefähr 8 min.
PS: Datenblatt: 'Asynchronous Operation of Timer/Counter2', aber erschrecken Sie nicht ob der Textfülle, das Programm selbst schrumpft auf vielleicht 15 oder 20 Zeilen.
Meik S. schrieb: > Also der alte µC funktioniert mit dem neuen Quarz natürlich allerdings > viel zu langsam. jeder (eigentliche Sekunden) Takt dauert nun > 16000/32,768. Also ungefähr 8 min. Schau dir mal das Bit clkdiv/8 an.
> ... (also 0xD4) ...
Nein, das habe ich mitnichten empfohlen, ich wollte sichergehen, dass
wir vom selben Zustand reden.
Strich drunter: Sie informieren sich und nehmen dann einen neuen ATmega328, der ja auf 0x62 (1 MHz) steht; lassen vor allem die Fuses unangetastet, bis die neue Version der Uhr läuft. Bei der Reaktivierung des alten helfe ich Ihnen gerne, irgendwann mal.
Beitrag #5527843 wurde von einem Moderator gelöscht.
S. Landolt schrieb: > Strich drunter: > Sie informieren sich und nehmen dann einen neuen ATmega328, der ja auf > 0x62 (1 MHz) steht; lassen vor allem die Fuses unangetastet, bis die > neue Version der Uhr läuft. > > Bei der Reaktivierung des alten helfe ich Ihnen gerne, irgendwann mal. Ja ich versuche jetzt erstmal dieses Verfahren mir näherzubringen. Danke trotzdem
Listig, Listig, Tralalalala schrieb im Beitrag #5527843: > S. Landolt schrieb: >> Strich drunter: >> Sie informieren sich und nehmen dann einen neuen ATmega328, der ja auf >> 0x62 (1 MHz) steht; lassen vor allem die Fuses unangetastet, bis die >> neue Version der Uhr läuft. >> >> Bei der Reaktivierung des alten helfe ich Ihnen gerne, irgendwann mal. > > Wahnsinn. Der Kerl führt die Leute an der Nase herum, daß es nur so > kracht. > Aber immer korrekt und immer höflich. Das ist das Tückische an ihm. All die Fehler stammen eher von mir und so falsch finde ich die Tipps nicht. Und sonst antwortet ja auch keiner hier (kein Vorwurf! kann verstehen, dass das den Meisten hier meine Fragen zu doof sind). Verstehe dennoch nicht was der Kommentar an dieser Stelle soll.
Ihre Fragen sind nicht 'doof', sondern die typischen eines Anfängers. Ansonsten reagieren Sie im realen Leben doch sicher auch nicht, wenn der Dorftrottel Sie anpöbelt - man macht sich dabei bestenfalls schmutzig.
S. Landolt schrieb: > Ihre Fragen sind nicht 'doof', sondern die typischen eines Anfängers. Fragen sind selten doof - manche Antworten darauf aber schon.
an Meik S.: Ich habe Ihnen mal ein Beispiel geschrieben; aber Nachsicht, C ist nicht meine Sprache, vielleicht lugt irgendwo Assembler allzu sichtbar hervor. Sie können es ja vorläufig liegen lassen und erst dann anschauen, wenn Sie zu einer eigenen Lösung gelangt sind, dann die beiden vergleichen. Und sicher findet sich noch der eine oder andere, der auch etwas beitragen kann/möchte.
Falls es Ihnen jedoch nicht um den Lerneffekt, sondern lediglich um eine gute Genauigkeit für Ihre Uhr geht, sollten Sie sich mal eigene RTC-Module anschauen, die damit erzielbare Genauigkeit ist in der Regel höher. Und lernen kann man auch etwas, nämlich die Anbindung eines externen Moduls, per SPI, I2C o.ä. Ich selbst habe u.a. von Reichelt 'RPI RTC CLOCK', das ist ein DS3231 auf kleiner Platine mit Buchsenleiste, für gerade mal 2.75 EUR bietet das Teil wirklich Erstaunliches.
Danke für das Beispiel Programm! Ich kann dadurch sehr gut nachvollziehen welche Register wie gestellt werden müssen damit man asynchron einen Uhrenquarz betreiben kann. Allerdings blinkt die LED bei mir im 20sec Takt und nicht im 1sec Takt. Was mache ich hier wieder falsch ? Ich finde den Code sehr plausibel. Haben sie diesen selbst praktisch getestet? Denn die Rechnung und der Prescaler macht ja Sinn. Kann es etwa an meiner Schaltung liegen ? PS: hatte viel privat zu tun deswegen konnte ich erst jetzt antworten.
Das Programm ist getestet, habe es eben nochmals laufen lassen; leider fällt mir im Augenblick nichts ein, woher dieser Faktor von 20 kommen könnte.
Zum Aufbau: ATmega328P in der PDIP-Version, auf Steckbrett, an TOSC1/2 nur der 32 KiHz-Quarz, keine Kondensatoren.
Also der ist noch komplett neu der µC. die Fuses sind auf Standard eigentlich eingestellt. Lfuse:0x62 Hfuse:0xD9 Efuse:0x07 was könnte man denn noch falsch machen ?
alles klar, habe die Kondensatoren entfernt und TOSC1/2 liegen nicht mehr auf Masse. jetzt blinkt sie im Sekunden takt.
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.