Forum: Mikrocontroller und Digitale Elektronik Mit Uhrenquarz Takt vorgeben


von M. S. (ekkie)


Lesenswert?

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?

von Hmmm (Gast)


Lesenswert?

ISP-Taktfrequenz passend runtergesetzt?

von Werner S. (wernertrp)


Lesenswert?

•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 ???

von Werner S. (wernertrp)


Lesenswert?

Hmmm schrieb:
> ISP-Taktfrequenz passend runtergesetzt?

ja

von Werner S. (wernertrp)


Lesenswert?

Irendwo schreiben die man kann den Uhr-Quarz auch an einen Timer Eingang
anschließen.

von S. Landolt (Gast)


Lesenswert?

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.

von M. S. (ekkie)


Lesenswert?

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.

von M. S. (ekkie)


Lesenswert?

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

von Werner S. (wernertrp)


Lesenswert?

...  soll des 328p Stromsparen so gering werden wie ein Uhren IC ?

von S. Landolt (Gast)


Lesenswert?

> 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.

von S. Landolt (Gast)


Lesenswert?

Pardon, jetzt bin ich selbst hereingefallen: unprogrammed, steht also 
auf '1' bzw. das Fuse-Low-Byte auf 0x54, dann reichen 8 kHz.

von S. Landolt (Gast)


Lesenswert?

Und nochmals falsch, 0xD4 muss das heißen.
(Ich trinke erstmal einen Kaffee)

von M. S. (ekkie)


Lesenswert?

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!

von M. S. (ekkie)


Lesenswert?

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 ?

von S. Landolt (Gast)


Lesenswert?

> mit AVRDUDE den Systemtakt einstellen

Den ISP-Takt, mit Systemtakt ist der des Zielsystems gemeint, also des 
ATmega328.

von S. Landolt (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von M. S. (ekkie)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von M. S. (ekkie)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von Erwin D. (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

> ... (also 0xD4) ...
Nein, das habe ich mitnichten empfohlen, ich wollte sichergehen, dass 
wir vom selben Zustand reden.

von S. Landolt (Gast)


Lesenswert?

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.
von M. S. (ekkie)


Lesenswert?

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

von M. S. (ekkie)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

S. Landolt schrieb:
> Ihre Fragen sind nicht 'doof', sondern die typischen eines Anfängers.

 Fragen sind selten doof - manche Antworten darauf aber schon.

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von M. S. (ekkie)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

Zum Aufbau: ATmega328P in der PDIP-Version, auf Steckbrett, an TOSC1/2 
nur der 32 KiHz-Quarz, keine Kondensatoren.

von Thomas E. (thomase)


Lesenswert?


von M. S. (ekkie)


Lesenswert?

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 ?

von M. S. (ekkie)


Lesenswert?

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
Noch kein Account? Hier anmelden.