Forum: Mikrocontroller und Digitale Elektronik CTC-Flag im Tiny13A


von Tiny10Nutzer (Gast)


Lesenswert?

Ich kämüfe mich grade übel durch alle Timerfunktionen in meinem Tiny13A. 
Ich möchte alle 30 CPU-Zyklen einen Interruppt auslösen. Wie ich in 
anderen AVRs gesehen habe gibt es ein CTC-Flag, dass den Timer (TCNT0) 
bei Compare-Match mit dem Vergleichsregister (OCR0A) automatisch auf 
Null (oder was auch immer) setzen soll.

Im Datenblatt des Tiny13A kann ich aber weder das zuständige Register 
noch das CTC-Flag (Clear-Timer-Compare) finden.

Was bedeutet das?

Das habe ich bisher eingegeben:
 ldi     tmp, 1 << CS00     ; CS00 setzen: für Timerzähler kein 
Vorteiler
 out     TCCR0B, tmp
 ldi     tmp, 0x1D          ; wenn timerzähler 30-1 erreich interruppt 
auslösen
 out     OCR0A, tmp
 ldi     tmp, 1 << OCIE0A     ; OCIE0A: Interrupt bei Timer Vergleich 0A
 out     TIMSK0, tmp
; ldi     tmp, 1 << OCF0A   ; Ist auf 1 wenn Compare-Match 0A zutrifft
; out     TIFR0, tmp
 sei              ; Interrupt erlauben

von Thomas E. (thomase)


Lesenswert?

Tiny10Nutzer schrieb:
> Im Datenblatt des Tiny13A kann ich aber weder das zuständige Register
> noch das CTC-Flag (Clear-Timer-Compare) finden.

Guck in die Tabelle "Waveform Generation Mode Bit Description" in der 
Beschreibung des TCCR0A-Registers. Der Timer wird mit den WGM-Bits 
eingestellt. Ein CTC-Bit hat der nicht.

mfg.

von Tiny10Nutzer (Gast)


Lesenswert?

Folgendes habe ich noch rausgefunden:

Es sollte das Symbol CTC0 im Register TCCR0A sein. Der Compiler sagt 
aber CTC0 kennt er nicht (CTC und CTC1 auch nicht) bzw. ist nicht in der 
include.inc definiert.

Der erste Interrupt wird nach den Eingaben (siehe oben) in Zyklus 55, 
der Zweite bei Zyklus 311, der Dritte bei Zyklus 567, usw. ausgelösst...

Also der erste Interrupt wird vorzeitig ausglösst. Alle Interruppts 
dannach folgen alle 256 Zyklen. Das Timerregister (TCNT0) wird also 
nicht automatisch zurückgesetzt.

Mist...

von spess53 (Gast)


Lesenswert?

Hi

>Es sollte das Symbol CTC0 im Register TCCR0A sein. Der Compiler sagt
>aber CTC0 kennt er nicht (CTC und CTC1 auch nicht) bzw. ist nicht in der
>include.inc definiert.

Ein CTC-Bit gab es bei alten AVRs. Bei den Aktuellen AVRs wird alles 
über die WGM-Bits geregelt.

>Also der erste Interrupt wird vorzeitig ausglösst. Alle Interruppts
>dannach folgen alle 256 Zyklen. Das Timerregister (TCNT0) wird also
>nicht automatisch zurückgesetzt.

>Mist...

Bei welchem Programm?

MfG spess

von Tiny10Nutzer (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Guck in die Tabelle "Waveform Generation Mode Bit Description" in der
> Beschreibung des TCCR0A-Registers. Der Timer wird mit den WGM-Bits
> eingestellt. Ein CTC-Bit hat der nicht.

Danke für die schnelle Hilfe.

Lable WGM01 im Register TCCR0A hats gebracht. CTC wird ausgelösst.

Danke dafür...

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.