Forum: Mikrocontroller und Digitale Elektronik Interrupt bei Timer1 und OC1A Mode 15


von R. Brettschneider (Gast)


Lesenswert?

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?

von H.Joachim S. (crazyhorse)


Lesenswert?

Welcher Prozessor?
Normalerweise ist Mode15 fast PWM mit Top=OCR1A. Wie willst du dann an 
PB1 ne PWM bekommen?

von R. Brettschneider (Gast)


Lesenswert?

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.

von H.Joachim S. (crazyhorse)


Lesenswert?

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)
   {
   }
}

von Peter D. (peda)


Lesenswert?

R. Brettschneider schrieb:
> Nur möchte ich gerne auf das High an PB.1 reagieren.

Du kriegst an jeder Flanke einen OCF1A und TOV1 Interrupt. Also einfach 
einen davon nehmen und den Pin prüfen, ob er high ist.

von Arno (Gast)


Lesenswert?

Welchen Interrupt willst du denn auslösen? Overflow? Output Compare?

MfG, Arno

von R. Brettschneider (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

R. Brettschneider schrieb:
> 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.

Dann nimm doch einen von den beiden.

Oliver

von H.Joachim S. (crazyhorse)


Lesenswert?

PCINT1 liegt auf PB1 :-), braucht also keinen extra Pin.
Du hast also die freie Auswahl zwischen 3 verschiedenen. Und bei allen 
musst du per Software nachschauen, ob der Pin nun H oder L ist.

von spess53 (Gast)


Lesenswert?

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

von H.Joachim S. (crazyhorse)


Lesenswert?

Das war ja auch meine erste Vermutung, aber ich weiss es nicht genau.
Er sagt ja, er hat ein toggle-Signal an PB1.

von R. Brettschneider (Gast)


Lesenswert?

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.

von R. Brettschneider (Gast)


Lesenswert?

spess53 schrieb:
> 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

Ich hatte mich an diesem Beitrag orientiert:

Beitrag "Einstellbarer Frequenzgenerator für 0.12 Hz - 8 MHz mit Atmega 8 und Bascom"

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.