Hallo! Habe einen ATmega88 getaktet mit internem 8MHz RC-Osc. Zusätzlich
hängt an XTAL1/XTAL2 ein 32,768kHz Uhrenquarz. Leider wird kein
Timer2-Overflow-Interrupt generiert. Auch kann ich an den Quarz-Pins mit
dem Oszi keine Schwingungen messen, die Pins scheinen in der Luft zu
hängen. Der Quarz ist so einer:
https://datasheet.lcsc.com/szlcsc/1901081604_Seiko-Epson-Q13FC1350000400_C32346.pdf
Merkwürdigerweise hat es schon einmal funktioniert, und nun nicht mehr.
Hat jmd eine Idee was das Problem sein könnte?
1
ASSR=(1<<AS2);
2
_delay_ms(500);// Einschwingzeit
3
TCCR2B|=(1<<CS22)|(1<<CS20);// Prescaler = 128, d.h. ein Timer2-Ueberlauf pro Sekunde (32768/256/128 = 1)
4
while((ASSR&(1<<TCR2BUB)));
5
TIFR2=(1<<TOV2);
6
TIMSK2|=(1<<TOIE2);//Datasheet p. 165
Und die ISR (wird fehlerhafterweise aber niemals aufgerufen):
Duden schrieb:> Wenn der Quarz nicht schwingt, muss man keinen Code posten
Ja, vor allem wenn es mit dem Code mal ging.
Was man prüfen kann:
- Quarz tatsächlich angeschlossen? Lötstellen, Leiterbahnen?
- Fuses für den Quarztyp richtig oder vielleicht doch mal verstellt?
- war der Quarz einer zu kräftigen Beschleunigung ausgesetzt?
Danke für eure Antworten. Im Anhang der Schaltplan.
Die Kapazitäten sind nicht unbedingt nötig, aber daran sollte es ja wohl
nicht hängen?!
HildeK schrieb:> - Quarz tatsächlich angeschlossen? Lötstellen, Leiterbahnen?> - Fuses für den Quarztyp richtig oder vielleicht doch mal verstellt?> - war der Quarz einer zu kräftigen Beschleunigung ausgesetzt?
1: Ja, passt
2: Die Fuses sind alles Standardeinstellungen, oder muss man für einen
asynchronen Uhrenquarz noch Fuses setzen?
3: Das würde ich ausschliessen, habe es mit mehreren probiert
Dragan schrieb:> oder muss man für einen> asynchronen Uhrenquarz noch Fuses setzen?
Na klar muss man das! Und außerdem passt die Beschaltung nicht für einen
32kHz-Quarz. Blick ins Datenblatt oder App-Note sollte helfen. Wundert
mich, dass es mit diesem Quarz schon mal gegangen sein soll!
Abgesehen von der Quartz-Problematik:
C3 und C4 sind vollkommen sinnlos. Entprellen geht ganz anders. Ist aber
schon gefühlte 100.000 mal diskutiert und von vielen nicht verstanden.
Was solls eigentlich?
> Standardeinstellungen
So ist es; aber: wie sehen denn die Fuses bei Ihnen konkret aus, sind ja
vielleicht doch verstellt?
Und ein vollständiges (Minimal-) Programm wäre auch sinnvoll - in obigem
Schnipsel fehlt zum Beispiel zur ISR das sei().
Helmut -. schrieb:> Dragan schrieb:>> oder muss man für einen>> asynchronen Uhrenquarz noch Fuses setzen?>> Na klar muss man das!
Unsinn. Der Oszillator an TOSC hat rein garnichts mit dem Systemtakt zu
schaffen und es gibt auch keine Fuses dafür.
> Und außerdem passt die Beschaltung nicht für einen> 32kHz-Quarz.
Das allerdings stimmt, die Bürdekondensatoren sind viel zu groß. Der
Oszillator für TOSC hat bereits interne Bürdekondensatoren, die groß
genug sind, die üblichen Uhrenquarze ohne zusätzliche externe
Bürdekondensatoren zum Schwingen zu bringen. Extern gehört da höchstens
noch ein Trimmer mit 2..6pf oder sowas zum Feinabgleich dran.
Dragan schrieb:
> Und die Beschaltung weicht doch nur in den zwei 18p-Kapazitäten ab, das> sollte den Quarz doch nicht abhalten, loszulaufen?
Natürlich kann zuviel Bürdekapazität locker einen Quarzoszillator davon
abhalten, zu schwingen. Schmeiß' die Kondensatoren raus und er wird sehr
wahrscheinlich schwingen.
Also ich habe die Ursache gefunden, es waren tatsächlich die zwei
18pF-Kapazitäten schuld. Hintergrund war: der Quarz steckt in einer
Fassung, um ihn ggf. schnell mit nem 16 MHz Crystal austauschen zu
können. Hätte nicht gedacht, dass bei einem derart langsamen Uhrenquarz
so kleine Kapazitäten hinderlich sein könnten. Ist nur ein Testaufbau,
daher spielt die Ganggenauigkeit hier auch keine Rolle.
Danke für die Antworten!
C3C4 schrieb:> C3 und C4 sind vollkommen sinnlos. Entprellen geht ganz anders. Ist aber> schon gefühlte 100.000 mal diskutiert und von vielen nicht verstanden.> Was solls eigentlich?
Entspricht der Referenzimplementierung des Encoder-Herstellers.
Entprellung bei einem optischen Sensor, der außerdem via Timerinterrupt
abgetastet wird, ist hier völlig irrelevant.
Wenn du nächstes Mal klugscheißerst: Gib den anderen Lesern wenigstens
nen Link zum Artikel Entprellung.
Helmut -. schrieb:> Dragan schrieb:>> oder muss man für einen>> asynchronen Uhrenquarz noch Fuses setzen?>> Na klar muss man das!
Nein, das muss man definitiv nicht. Hättest du hier lesen können:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Timer2_im_Asynchron_Mode
Dragan schrieb:> Hintergrund war: der Quarz steckt in einer> Fassung, um ihn ggf. schnell mit nem 16 MHz Crystal austauschen zu> können.
Das kannste knicken. Der TOSC-Oszillator ist nicht in der Lage, einen
16Mhz-Quarz zuverlässig zum Schwingen zu bringen. Der ist für genau den
einen Zweck optimiert, einen 32kHz-Quarz möglichst energiesparend zu
betreiben.
c-hater schrieb:> Das kannste knicken. Der TOSC-Oszillator ist nicht in der Lage, einen> 16Mhz-Quarz zuverlässig zum Schwingen zu bringen. Der ist für genau den> einen Zweck optimiert, einen 32kHz-Quarz möglichst energiesparend zu> betreiben.
Hier ausnahmsweise schon, beim ATmega88 sind TOSC und XTAL auf den
gleichen Pins (PB6 / PB7).
Dragan schrieb:> auf den gleichen Pins
"auf den gleichen Pins" heißt "auf den gleichen Pins"
Das heißt allerdings nicht, dass es der gleiche Oszillator ist.
Dragan schrieb:> Hier ausnahmsweise schon
Nicht wirklich.
> beim ATmega88 sind TOSC und XTAL auf den> gleichen Pins (PB6 / PB7).
Ja, das Besondere beim beim Mega88 (gesamte Familie) ist, dass der
TOSC-Oszillator sich auch als Quelle für den Systemtakt benutzen läßt.
Das muß man dann aber per Fuse aktivieren und schließt eine
gleichzeitige Nutzung als asynchrone Taktquelle für Timer2 naturgemäß
aus.
Aber auch als Systemtakt würde das mit 2x18pf natürlich nicht
funktionieren. Da der Oszillator de facto derselbe ist, hat er auch
dieselben Eigenschaften, egal, ob er nur als Taktquelle für Timer2 oder
als Systemtaktquelle benutzt wird.
c-hater schrieb:> Da der Oszillator de facto derselbe ist,
Ich sehe 5 Oszillatoren im Datenblatt des ATmega88A/PA
Davon 3 Quarz Oszillatoren.
Welche alle 3 auf den gleichen Pins rum reiten.
Arduino Fanboy D. schrieb:> Ich sehe 5 Oszillatoren im Datenblatt des ATmega88A/PA
Das mag sein, allerdings reden wir hier über einen Mega88. Nix A und nix
PA.
Siehe allererstes Posting in diesem Thread, allererste Zeile...
Also: Wer auch nur andeutungsweise lesen kann, ist irgendwie klar im
Vorteil...
c-hater schrieb:> Arduino Fanboy D. schrieb:>>> Ich sehe 5 Oszillatoren im Datenblatt des ATmega88A/PA>> Das mag sein, allerdings reden wir hier über einen Mega88. Nix A und nix> PA.>> Siehe allererstes Posting in diesem Thread, allererste Zeile...>> Also: Wer auch nur andeutungsweise lesen kann, ist irgendwie klar im> Vorteil...
Ich sehe was, was du nicht siehst!
Und zwar: 5 Oszillatoren im Datenblatt des ATmega88.
Davon 3 Quarz Oszillatoren.
Welche alle 3 auf den gleichen Pins rum reiten.
Arduino Fanboy D. schrieb:> Und zwar 5 Oszillatoren im Datenblatt des ATmega88.
Wo?
Mal abgesehen davon, dass da nur vier Oszillatoren zu sehen sind
("external clock" ist ja wohl kaum als Oszillator zu rechnen) und von
diesen wiederum einer kaum als Quarz-Oszillator in Frage kommt, weil
schon als "RC-Oszillator" tituliert, bleiben drei.
Naja, und der Witz ist (was das DB nicht sagt), dass halt beim
Mega48/88/168 zwei davon in Wirklichkeit identisch sind, nämlich der
"Low-frequency" und der "Timer/counter".
Das ist durchaus anders als bei vielen anderen Megas. Sowas merkt man
bei vergleichendem DB-Lesen. Wenn man zu selbstständigem Denken in der
Lage ist. Da stellt man nämlich leicht fest, dass bei vielen anderen
Megas der Low-Frequency sehr viel umfassender angepasst werden kann,
während der in der 88er-Baureihe genau nur eine Option anbietet, nämlich
genau das, was auch der TOSC kann: Uhrenquarz. Vermutlich wollte Atmel
Leute wie dich einfach nur nicht zu sehr mit Details verwirren...
Ja, du kannst darauf beharren, dass im Datenblatt steht, dass es sich um
zwei verschiedenene Oszillatoren handelt.
Aber ich sage dir: es ist in Wirklichkeit ein und derselbe. Glaub' es
oder leck mich. Ist mir vollkommen egal.
Dragan schrieb:> Die Kapazitäten sind nicht unbedingt nötig, aber daran sollte es ja wohl> nicht hängen?!
Doch, die sind für den ATmega88 notwendig. Nur beim 88A und 88P sind sie
intern.
> Doch, die sind für den ATmega88 notwendig. Nur beim 88A und 88P> sind sie intern.
? Siehe Anhang.
Wobei mir nicht klar ist, welchen Dragan verwendet: im Text steht
ATmega88, im Schaltplan ATmega88PA.
S. Landolt schrieb:> Wobei mir nicht klar ist, welchen Dragan verwendet: im Text steht> ATmega88, im Schaltplan ATmega88PA.
Vielleicht mal den C-hater fragen!
Der weiß das offensichtlich viel genauer als wir/ich.
Zumindest hätte mich, am Rande, doch interessiert, wie es zu den
unterschiedlichen Kapazitäten zwischen 'System Osc.' und 'Timer Osc.'
kommt, wenn sie "in Wirklichkeit identisch sind".
Wieso identisch? Der Timeroszillator wird auch als
Low-Frequency-Systemoszillator verwendet. Der
High-Frequency-Systemoszillator ist natürlich ein anderer. Die
Kapazitäten sind abhängig von der Bürde, die der Quarz benötigt. Bei
einem Normalquarz(z.B. 16MHz) sind das um und bei 15pF. Da schaden 18pF
dann auch nicht. Bei Uhrenquarzen sind das aber nur 3-6pF. 3pF sind
schon in den beiden Portpins jeweils "eingebaut". Deshalb kann und soll
man die Kondensatoren beim Uhrenquarz häufig weglassen. Näheres erfährt
man aus dem Datenblatt des jeweiligen Quarzes. Aber bei 18+3=21pF geht
ein Uhrenquarz ziemlich sicher in die Knie.