Forum: Mikrocontroller und Digitale Elektronik Tiny85 CTC Interrupt + OVF Interrupt @ TIMER1


von MOBA 2. (Gast)


Lesenswert?

Hallo,

ich weiß nicht was das bei mir ist. Ich nutze den Tiny85, PLL auf 16 Mhz 
intern. Der Timer 0 wird zur Signalerfassung an einem I/O genutzt.

Der Timer1 soll Systemtakte erzeugen.
1
TCCR1 |= (1<<CS10)|(1<<CS11)|(1<<CS12);    //prescaler 64
2
  TIMSK |= (1<<TOIE1)|(1<<OCIE1A);      //TOIE ==> ~1 kHz, OCR1A = 125 kHz
3
  OCR1A = 2;
4
sei();


ISR(TIMER1_OVF_vect) erzeugt mir 1 Khz Takt. Passt also.

ISR(TIMER1_COMPA_vect) erzeugt mir auch 1 kHz Takt?! Warum? Da müsste 
125 kHz sein.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Ohne jetzt ins DaBla reingeschaut zu haben - der Timer1 wird beim Match 
nicht resettet, wodurch Er immer bis 255 hoch läuft und erst nach dem 
Überlauf wieder auf die 2 kommt, wo der nächste Interrupt ausgelöst 
wird.
Denke, Du suchst nach CTC.

Dann hast Du aber keinen OVF-Interrupt mehr :/

MfG

von MOBA 2. (Gast)


Lesenswert?

Patrick J. schrieb:
> Hi
>
> Ohne jetzt ins DaBla reingeschaut zu haben - der Timer1 wird beim Match
> nicht resettet, wodurch Er immer bis 255 hoch läuft und erst nach dem
> Überlauf wieder auf die 2 kommt, wo der nächste Interrupt ausgelöst
> wird.
> Denke, Du suchst nach CTC.
>
> Dann hast Du aber keinen OVF-Interrupt mehr :/
>
> MfG

Ja, stimmt, da habe ich einen Gedankenfehler. Stimmt, dann macht bei 
beiden 1 kHz auch sinn. Da der Tiny nur 2 Timer hat (blöd) wollte ich 
jetzt folgendes haben:

1. Timer (Timer0) ist weg für die Signaldetection (da muss das TCNT 
Register immer resettet werden, daher kann man da nichts mehr mit 
machen, ist auch unregelmäßig).

2. Timer (Timer1) soll 1ms Takt OVF generieren um die Systemzeiten zu 
erzeugen. Außerdem soll er im CTC 125 kHz erzeugen, geht das dann 
überhaupt mit beiden?


Mist. Wo war ich denn da mit meinen Gedanken. Hat jmd. ne Idee wie ich 
die Kuh vom Eis bekomme?

von batman (Gast)


Lesenswert?

Laß den Timer doch ne ISR mit 125kHz takten und darin noch nen Zähler 
auf 125:1 für den 1kHz runterteilen.

von Thomas E. (thomase)


Lesenswert?

MOBA 2. schrieb:
> Hat jmd. ne Idee wie ich
> die Kuh vom Eis bekomme?

Du hast noch 2 weitere Timer.

Erstens kannst du den Watchdog als Timer laufen lassen. Der ist 
allerdings recht langsam. Kürzeste Zeit 16ms.

Zweitens kannst du den ADC im Free Running Mode laufen lassen. Der 
generiert dann je nach Vorteiler einen exakten Takt. Daß er dabei 
irgendwas wandelt, stört keinen großen Geist. Mit dem kommst du auch 
einigermaßen an 1KHz ran. Hab jetzt keine Lust das auszurechnen. Wohl 
nicht genau, aber das muß ja meistens gar nicht sein. Hauptsache 
regelmäßig.



batman schrieb:
> Laß den Timer doch ne ISR mit 125kHz takten und darin noch nen Zähler
> auf 125:1 für den 1kHz runterteilen.

Damit der Ausgangspin mit 125KHz wackelt, muß der Timer mit 250KHz 
takten. Das ergibt dann alle 32 Takte einen Interrupt bei 8MHz. Könnte, 
vorsichtig ausgedrückt, knapp werden.

von MOBA 2. (Gast)


Lesenswert?

Thomas E. schrieb:
> MOBA 2. schrieb:
>> Hat jmd. ne Idee wie ich
>> die Kuh vom Eis bekomme?
> Zweitens kannst du den ADC im Free Running Mode laufen lassen. Der
> generiert dann je nach Vorteiler einen exakten Takt. Daß er dabei
> irgendwas wandelt, stört keinen großen Geist. Mit dem kommst du auch
> einigermaßen an 1KHz ran. Hab jetzt keine Lust das auszurechnen. Wohl
> nicht genau, aber das muß ja meistens gar nicht sein. Hauptsache
> regelmäßig.
>
>
>
> batman schrieb:
>> Laß den Timer doch ne ISR mit 125kHz takten und darin noch nen Zähler
>> auf 125:1 für den 1kHz runterteilen.
>
> Damit der Ausgangspin mit 125KHz wackelt, muß der Timer mit 250KHz
> takten. Das ergibt dann alle 32 Takte einen Interrupt bei 8MHz. Könnte,
> vorsichtig ausgedrückt, knapp werden.


Nene 16 MHz habe ich uns mit reichen die 125khz ist klar das das die 
halbe frequency ist.

von MOBA 2. (Gast)


Lesenswert?

batman schrieb:
> Laß den Timer doch ne ISR mit 125kHz takten und darin noch nen Zähler
> auf 125:1 für den 1kHz runterteilen.

Was los heute mit mir Brett vor dem Kopf man eyy. Natürlich so mache ich 
es

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.