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

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.

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.