AVR Async Timer2 will nicht

Gast #6641326
Lesenswert?

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):
1
ISR(TIMER2_OVF_vect) {
2
countdown--;
3
}
Gast #6641401
Lesenswert?

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
Angehängte Dateien:
Gast #6641419
Lesenswert?

Helmut -. schrieb:
> Na klar muss man das

OK, vielleicht habe ich das überlesen. Aber welche Fuse-Einstellung wäre 
das? In diesem Artikel: 
https://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC#Beispiel_in_C 
ist von Standardeinstellungen die Rede.

Und die Beschaltung weicht doch nur in den zwei 18p-Kapazitäten ab, das 
sollte den Quarz doch nicht abhalten, loszulaufen?
Gast #6641570
Lesenswert?

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.
Gast #6641582
Lesenswert?

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
Gast #6641592
Lesenswert?

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.
Gast #6641627
Lesenswert?

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.
Gast #6641648
Lesenswert?

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.
Gast #6641659
Lesenswert?

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.
Gast #6642286
Lesenswert?

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.

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