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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von R. Brettschneider (Gast)


Bewertung
0 lesenswert
nicht 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)


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

von R. Brettschneider (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Welchen Interrupt willst du denn auslösen? Overflow? Output Compare?

MfG, Arno

von R. Brettschneider (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.