Mit Uhrenquarz Takt vorgeben

OP #5527756
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?
Gast #5527769
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.
OP #5527771
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.
OP #5527773
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
Gast #5527777
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.
OP #5527789
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!
OP #5527794
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 ?
Gast #5527805
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.
OP #5527813
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.
Gast #5527818
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.
OP #5527821
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.
Gast #5527837
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.
OP #5527849
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
OP #5527853
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.
Gast #5527871
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.
Gast #5528338
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.
Angehängte Dateien:
Gast #5528357
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.
OP #5543416
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren