AtMega8, Periodendauer verlängern

OP Persönliche Seite #3544808
Lesenswert?
• ▲
▼
Hallo,
mit dem AtMega8 messe ich per Input Capture und Timer1 (16bit) die 
Periodendauer eines Rechtecksignals, zwischen 4 und 400ms. Das 
funktioniert seit längerem einwandfrei.

Nun möchte ich eine zusätzliche Funktion einbauen, welche mir die 
Periodendauer um einen gewissen Faktor verlängert. Dafür will ich den 
Output Compare Match nutzen und damit PB2/OC1B toggeln. Ich kriege es 
allerdings nicht zum laufen. Zwar toggelt PB2 schön, aber mit viel zu 
langer Periode. Genau messen kann ich das mit meinem ältlichen 
Oszilloskop nicht, habe aber den Eindruck daß der Vorgang beim 
Timerüberlauf kommt. Ein Compare Match findet also nicht statt, was auch 
dadurch bestätigt wird daß ich beliebiges in OCR1B schreiben kann, ohne 
das Ergebnis zu ändern. Hier die entsprechenden Codeteile:
1
u16 pFlanke, periode;
2
void interrupt_init(void)
3
{
4
 //Timer1 16bit          
5
    TCCR1A = 0x00;              // Timer1, normal Port operation
6
    TCCR1B |= (1<<ICES1)|(1<<CS10)|(1<<CS11)|(1<<ICNC1);   
7
                       //(Vorteiler 64, capture on rising edge, Noise canceller
8
    TIMSK |= (1<<TICIE1);       // Counter1, Input Capture, Interrupt Enable
9
 //Output Compare auf OC1B/PB2
10
    DDRB |= (1 << PB2);         // Richtungsregister auf Ausgang
11
    TCCR1A |= (1 << COM1B0);    // Toggle OC1B on Compare Match
12
}
13
ISR(TIMER1_CAPT_vect)  // misst Periode in 16bit -> Weg, Geschwindigkeit
14
{
15
    periode = ICR1 - pFlanke;
16
    pFlanke = ICR1;        
17
    // Comp Match für Ausgang berechnen
18
    OCR1B = (2 * (periode));
19
}

Die Variable <periode> wird an anderer Stelle ausgewertet und angezeigt.
Der Mega8 läuft mit 8MHz, mit dem Vorteiler und dem 16bit-Zähler ergibt 
sich eine Überlaufperiode von ca. 0,5 Sekunden, was geschätzt dem 
Ereignis an PB2 entspricht.
Warum wird OCR1B nicht ausgewertet, was habe ich übersehen?

Danke,
Micha
OP Persönliche Seite #3545445
Lesenswert?
• ▲
▼
Oliver schrieb:
> Der Pin toggelt einmal pro Timerumlauf. Der Wert in OCR ändert lediglich
> das Taktverhältnis.

Wo wäre das zu finden?

Auf Seite 97 steht
Table 36. Compare Output Mode, Non-PWM
COM1A1/COM1B1   COM1A0/COM1B0   Description
...
   0                   1        Toggle OC1A/OC1B on Compare Match

Das ist das was ich einstellte. Von toggeln beim Überlauf kann ich in 
diesem Mode nichts finden.

Weitere Hinweise?

Micha
OP Persönliche Seite #3545911
Lesenswert?
• ▲
▼
Oliver schrieb:
> Ein Compare Match kommt genau einmal pro Zählerumlauf vor. Ein
> Zählerumlauf dauert wie lange?

Ja, jetzt sind die Scheuklappen weg. So einfach und doch so nutzlos, was 
ich da programmierte. Danke für den Nasenstüber.

Also müsste ich wohl den Output Compare Interrupt nutzen und in der ISR 
gleich den nächsten Matchwert berechnen. Funktioniert sowas? Oder gibt 
es eine bessere Möglichkeit?

Micha
OP Persönliche Seite #3545950
Lesenswert?
• ▲
▼
Oliver schrieb:
> Was genau verstehst du denn unter "Periodendauer verlängern?"

Wie in meinem Eingangspost geschrieben, messe ich ein Rechtecksignal, 
dessen Periodendauer zwischen 4 und 400ms liegt.
Nun möchte ich ein Rechtecksignal erzeugen, dessen Periodendauer um 
einen Faktor x länger ist als das Eingangssignal.
Oder anders gesagt, die Frequenz des erzeugten Signals soll um 1/x 
niedriger liegen als die des gemessenen Signals.
Da der Faktor "krumm" ist (1,4), kann ich keinen externen 
Hardware-Frequenzteiler benutzen.

Micha

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.