atmega32 - pwm will nicht

OP #532677
Lesenswert?
• ▲
▼
Hallo, ich versuche gerade mit atmega Handbuch und Tutorial die PWM 
Ansteuerung nachzuvollziehen. Kurzum ich bekomms nicht hin. Hier mein 
Code:
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <stdlib.h>
4
 
5
int init_pwm(void) {
6
    TCCR0 |= (1<<COM00) | (1<<COM01) | (1<<CS02) | (1<<CS00);   //enable OC Output, prescale 1024
7
    OCR0 = 128;
8
    DDRB |= (1<<PB3);  //OC0 Pin
9
    return 0;
10
}
11
 
12
int main (void) {
13
 
14
    DDRC = 0xFF;
15
    init_pwm();
16
 
17
    while(1) {  //<mainloop>
18
 
19
    PORTC = PORTB; //LEDs hängen an PortC, OC0 aber an PortB
20
 
21
    }//</mainloop>
22
 
23
    return 0;       // never reached
24
}
OP #532776
Lesenswert?
• ▲
▼
ok, jetzt hab ich den Wurm. Man kann wohl nicht von OC0 lesen. Jetzt hab 
ich ne Abfrage über die TIFR Flags und es funktioniert. Der 
Vollständigkeit halber noch mein Code:
1
int init_pwm(void) {
2
    TCCR0 |= (1<<CS02) | (1<<CS00);   // prescale 1024
3
    OCR0 = 32;  // match compare at 12.5%
4
    return 0;
5
}
6
 
7
int main (void) {
8
 
9
    DDRC = 0xFF;
10
  
11
  init_pwm();
12
 
13
    while(1) {  //<mainloop>
14
 
15
    if (bit_is_set (TIFR,OCF0)) {  // compare match
16
      TIFR |= (1<<OCF0);
17
      PORTC = 0x0F;
18
    }
19
    
20
    if (bit_is_set(TIFR,TOV0)) {  // overflow
21
      TIFR |= (1<<TOV0);
22
      PORTC = 0x00;
23
    }
24
 
25
  }//</mainloop>
26
 
27
    return 0;       // never reached
28
}

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