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?
Welcher Prozessor? Normalerweise ist Mode15 fast PWM mit Top=OCR1A. Wie willst du dann an PB1 ne PWM bekommen?
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) { } }
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.
Welchen Interrupt willst du denn auslösen? Overflow? Output Compare? MfG, Arno
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.
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
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.
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
Das war ja auch meine erste Vermutung, aber ich weiss es nicht genau. Er sagt ja, er hat ein toggle-Signal an PB1.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.