Interrupt bei Timer1 und OC1A Mode 15

Gast #5779280
Einen schönen guten Morgen,
folgendes ist gegeben:

Timer1 ist auf fast PWM eingestellt.
OC1A Mode 15 ist eingestellt
Tastenverhältnis auf 50%
Prescaler auf 1/8

PB.1 OC1A macht das was er soll. Jetzt wollte ich die Takte bei high 
verarbeiten doch bekomme ich beim ATMega88 kein Interrupt ausgelöst.
Man sagte mir ich müsste PB.1 auf einen INT0 oder INT1 legen und darüber 
arbeiten. Geht das wirklich nicht anders?
Gast
H.Joachim S. schrieb:
> Welcher Prozessor?
ATMega88
> Normalerweise ist Mode15 fast PWM mit Top=OCR1A. Wie willst du dann an
> PB1 ne PWM bekommen?

TCCR1A auf COM1A0 = Toggle OC1A
TCCR1A auf WGM11 + WGM10 = Fast PWM

TCCR1B auf WGM13 + WGM12
TCCR1B auf CS11 = 1/8

OCR1B auf 0x7FFF = Tastverhältnis 50%

Läuft auch gut! Nur möchte ich gerne auf das High an PB.1 reagieren.
PB.1 ist doch beim ATMega88 der OC1A. Doch kann ich mir nicht vorstellen 
dass ich, wie mir geraten wurde, diesen auf INT0 oder INT1 legen muss um 
reagieren zu können.
Kann man das kombinieren (toggle on OCR1 und PWM OCR1B? Na gut, wenn es 
bei dir läuft.

Du willst also irgendwas ablaufen lassen, wenn PortB.1 H ist?
Eine Möglichkeit wäre der PCINT1, der löst allerdings bei beiden Flanken 
aus. Musst du dann in der ISR entscheiden.

PCICR=(0<<PCIE2) | (0<<PCIE1) | (1<<PCIE0);
PCMSK0=(0<<PCINT7) | (0<<PCINT6) | (0<<PCINT5) | (0<<PCINT4) | 
(0<<PCINT3) | (0<<PCINT2) | (1<<PCINT1) | (0<<PCINT0);
PCIFR=(0<<PCIF2) | (0<<PCIF1) | (1<<PCIF0);

interrupt [PC_INT0] void pin_change_isr0(void)
{
if (PINB.1)
   {
   }
}
Gast
Peter D. schrieb:
> Du kriegst an jeder Flanke einen OCF1A und TOV1 Interrupt. Also einfach
> einen davon nehmen und den Pin prüfen, ob er high ist.

ich wollte gerne einen der Interruptvectoren Benutzen.

Arno schrieb:
> Welchen Interrupt willst du denn auslösen? Overflow? Output Compare?
>
> MfG, Arno

Mir eigentlich egal, die Hauptsache ist das einer ausgelöst wird ob PB.1 
high ist werde ich ja herausbekommen oder?

H.Joachim S. schrieb:
> Eine Möglichkeit wäre der PCINT1

Genau sowas möchte ich ja nicht weil mir ein Pin flöten geht.
Gast
Hi

>PCINT1 liegt auf PB1 :-), braucht also keinen extra Pin.

Im Mode15 tut sich am OC1A-Pin gar nichts weil OCR1A den Topwert 
bestimmt. Ich glaube der TO hat die PWM-Modes nicht wirklich verstanden.

MfG Spess
Gast
Oliver S. schrieb:
> Dann nimm doch einen von den beiden.
>
> Oliver

1000 Dank, was hatte ich schon alles versucht. Auch dieses, doch hatte 
ich nie TIMSK1 gesetzt. TOV1 löst klasse aus und mit:
1
         sbis  PINB, Takt_Ausgang
2
   reti

Läuft es wunderbar.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 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.