Mit Timer1 Match sofort Timer2 loslaufen lassen

OP #1005182
Hallo,

gibt es eine möglichkeit per Software nach Interrupt Timer 1 Match 
sofort Timer2 oder Timer1 "loslaufen" zu lassen.
Der Hintergrund ist der das ich nach einem ereignis Timer 1 Match noch 
eine Verzögerung benötige um dann nach der Verzögerung einen weiteren 
Interrupt auslösen zu können. Die grösse des bereichs ist das Problem 
der sich von 2,5 uS bis 25 uS Controller ist ein Mega 16 mit 16MHz.
Gast
Bei 2,5µs sollte man in der ISR warten, bei 25µs könnte man es auch noch 
machen.
Generell könnte man das Register, welches den T1-Interrupt ausgelöst hat 
neu laden und dann den 2. Interrupt nutzen. Einen 2. Timer braucht man 
nicht.
also wenn es um wenige µS geht, wäre es doch schon fast in Betracht zu 
ziehen einfach ein paar NOP's einzusetzen, bei einem Quarz mit 12kHz 
würde man für eine µS ja nur ein NOP benötigen.

Gruß

Jochen

edit: ein Quarz mit 12 MHz natürlich ;)
OP
Hallo,

Verzögerung mit schleife.

hab nur immer das Problem das bei 0 Werten ein Übertrag stattfindet und 
der Zähler dann bei 255 anfängt anstatt einfach Durchzulaufen.
Problematischer ist noch das wenn der Wert TempH = 0 und TempL = 1 ist 
dann
gibt es einen Übertrag im high Bereich. Also vorher immer alles +1 wenn 
tempH oder TempL = 0 sind oder gibt es noch andere Lösungen. Wie gesagt 
den einen Timer dafür zu nehmen kostet mit der Initialisierung vorher 
zuviel Zeit.

        lds  tempH,vorzeitH
vz_lo_2:      lds  tempL,vorzeitL
vz_lo_1:      dec  templ
        brne vz_lo_1
        dec  temph
        brne vz_lo_2
Gast
> ... ein Controller benötigt 12 Quarztakte für einen Prozessortakt

Das sind aber andere Controller (8051 und ältere Derivate desselben).
Die AVR-Controller, um die es hier geht, brauchen für viele Befehle
(insbesondere auch den NOP) tatsächlich nur einen Oszillatortakt.
Gast
@René

Was sind 0 Werte?
Ohne jetzt ins Datenblatt zu sehen, würde ich ein Compare-Register 
(16bit) nehmen, um von T1 einen Interupt zum Start der Verzögerung zu 
erhalten. In der ISR wird das Flag gelöscht, die Verzögerungszeit zum 
Compare-Register addiert und dann gewartet, bis das Flag wieder gesetzt 
ist.
Dazu sind Timer doch da.

Ist m.E. ganz einfach oder habe ich etwas nicht verstanden?
René Schink wrote:
> Verzögerung mit schleife.
>
> hab nur immer das Problem das bei 0 Werten ein Übertrag stattfindet und
> der Zähler dann bei 255 anfängt anstatt einfach Durchzulaufen.
> Problematischer ist noch das wenn der Wert TempH = 0 und TempL = 1 ist
> dann
> gibt es einen Übertrag im high Bereich. Also vorher immer alles +1 wenn
> tempH oder TempL = 0 sind oder gibt es noch andere Lösungen.

Das Carry-Flag ist Dein Freund, wenn es um Rechnungen >8Bit geht.

Hier ein zyklusgenaues Delay:

http://www.mikrocontroller.net/attachment/416/Mdelay.asm



> Wie gesagt
> den einen Timer dafür zu nehmen kostet mit der Initialisierung vorher
> zuviel Zeit.

Das mußt Du mal näher erklären.
Du hast doch 2 Compare Interrupts.
Einfach OCR1A auf die erste Zeit setzen und OCR1B auf die Zeit + Delay.

Und wenn Du zu beiden Zeiten nur einen Pin setzen mußt, dann nimm 
einfach die Compare-Output-Pins.
Dann sind die Zeiten zyklusgenau, sogar ganz ohne Interrupthandler.


Peter
Gast
Hi

Der Timer1 hat zwei OC-Interrupts. Wenn du das zweite OC-Register mit 
einem Wert erstes OC-Register+Verzögerung lädst und OCIE1B in TIMSK am 
Anfang der ersten IR setzt (sbi TIMSK,OCIE1B) bekommst du eine genaue 
Verzögerung mit einem Timer hin.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.