Timer-Interrupt in C

Gast #610704
Lesenswert?

1
#include <avr/io.h>
2
#include <avr/interrupt.h> 
3

4
int main(void) {
5

6
  PORTB = 0xFF;
7
  DDRB = 0b00001000;
8
  TCCR2 = 0b01101011;
9

10
  sei();
11

12
  while(1) {
13
  }
14

15
  return 0;
16
}

Müsste doch laufen, oder?

Kann am entsprechenden Pin aber nichts messen.

Wiedermal ein Flag vergessen?
Gast #610711
Lesenswert?

1
#include <avr/io.h>
2
#include <avr/interrupt.h> 
3

4
int main(void) {
5

6
  PORTB = 0xFF;         //Pull-up
7
  DDRB = 0b00001000;    //Pin3 am PortB als Ausgang (PWM-Pin)
8
  TCCR2 = 0b01101011;   //Fast-PWM-Mode (non-inverted) mit 32er Prescaler
9

10
  sei();                //Allgemeine Interruptfreigabe
11

12
  while(1) {            //Endlosschleife
13
  }
14

15
  return 0;
16
}
Gast #610719
Lesenswert?

Och Mist, bin total durcheinander. Ich habe mich jetzt eine Weile in PWM 
eingelesen (Datenblatt und hier) und ging komischerweise davon aus, dass 
ihr wisst, worum es geht. ;)

Aaaalllso, der uC soll im PWM-Mode arbeiten. Der Quellcode steht ja 
schon oben. Aber am entsprechenden Pin liegt dauernd eine 0 an. Ich 
komme nicht mehr weiter.
#610721
Lesenswert?

Maxim wrote:
> Brauche ich beim PWM-Betrieb eine ISR?!

Nein, brauchst Du nicht.

Du hast aber nach "Interrupt" gefragt, dazu braucht man eine ISR. Du 
hast sogar auf Assembler und Vektor verwiesen, das braucht zwingend eine 
ISR.

> Ist doch Quatsch.

Da hast Du natürlich recht. Du hättest nicht nach Interrupt 
(Unterbrechung, hier speziell Programmunterbrechung) fragen sollen, 
sondern nach PWM.

Tip: Schau Dir an, welche Register Dein Timer noch hat und was diese für 
Aufgabe haben. Achte besonders darauf, wie man Zählumfang und Tastgrad 
einstellt. Sind beide gleich, wird es kein messbares Signal geben.

...
#610726
Lesenswert?

Maxim wrote:
> Och Mist, bin total durcheinander. Ich habe mich jetzt eine Weile in PWM
> eingelesen (Datenblatt und hier) und ging komischerweise davon aus, dass
> ihr wisst, worum es geht. ;)
Klar. Wir sind alle Hellseher hier...

> Aaaalllso, der uC soll im PWM-Mode arbeiten. Der Quellcode steht ja
> schon oben. Aber am entsprechenden Pin liegt dauernd eine 0 an. Ich
> komme nicht mehr weiter.
Klar. Eine PWM braucht ja auch einen Compare-Wert, der das 
Tastverhältnis definiert. Und wenn der Null ist, dann ist das PWM-Signal 
auch Null.
Gast #610734
Lesenswert?

Aha, dankeschön!

Jetzt läuft alles.

Hier der funktionierende Quellcode:
1
#include <avr/io.h>
2
#include <avr/interrupt.h> 
3

4
#define  led_1    PD6
5
#define button_1  PIND2
6

7
int main(void) {
8

9
  PORTB = 0xFF;
10
  DDRB  = 0b00001000;
11
  OCR2  = 128;
12
  TCCR2 = 0b01101011;
13

14
  sei();
15

16
  while(1) {
17
  }
18

19
  return 0;
20
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren