Forum: Mikrocontroller und Digitale Elektronik AVR Async Timer2 will nicht


von Dragan (Gast)


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
}

von erklehr behr (Gast)


Lesenswert?

Dragan schrieb:
> Hat jmd eine Idee was das Problem sein könnte?

Erstmal komplette Schaltung zeigen, am besten auch den Aufbau.

von Einer K. (Gast)


Lesenswert?

Dragan schrieb:
> countdown--;
Wie ist countdown definiert?

von Duden (Gast)


Lesenswert?

Wenn der Quarz nicht schwingt, muss man keinen Code posten

von HildeK (Gast)


Lesenswert?

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?

von Dragan (Gast)


Angehängte Dateien:

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

von Helmut -. (dc3yc)


Lesenswert?

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!

: Bearbeitet durch User
von Dragan (Gast)


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?

von C3C4 (Gast)


Lesenswert?

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?

von S. Landolt (Gast)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

C3C4 schrieb:
> Was solls eigentlich?

Sorgt für Mindeststrom in den Kontakten. Schaden tuts also nicht.

von c-hater (Gast)


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.

von Dragan (Gast)


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

von Dragan (Gast)


Angehängte Dateien:

Lesenswert?

Nun schwingt alles so wie es soll.

von c-hater (Gast)


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.

von Dragan (Gast)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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.

von c-hater (Gast)


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.

von Einer K. (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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

von Einer K. (Gast)


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.

von c-hater (Gast)


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.

von Peter D. (peda)


Lesenswert?

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.

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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

von Dyson (Gast)


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.

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.