PWM mit Timer2

Gast #535612
Lesenswert?

Hallo ihr!

Möchte mit dem Timer1 (µP --> ATmega8) eine PWM generieren, die mir 
einen Motor ansteuert. Leider ist Timer1 anderer
Meinung und zeigt sich nicht kooperativ mir gegenüber ;-) .

Mit dem Setzen der beiden COM1B0/1 Bits müsste doch sichergestellt sein, 
dass OC2B beim Comparematch von OCR1B (TCNT = 0x45)
auf high geht. Da ich vorher OCR1A als TOP definiert habe (TCCR1B, 
TCCR1A), müsste dann beim Erreichen von TCNT = 0x97 doch
ein low am Ausgang erscheinen, oder?
Kann mir jemand sagen, wo ich da einen Denkfehler habe?

Ursprünglich wollte ich für die PWM Timer2 verwenden, doch dann hat sich 
herausgestellt, dass sich der TOP-Wert vom Timer2
nicht ändern lässt (oder doch??). Den TOP-Wert möchte ich deswegen 
ändern, weil meine PWM eine Frequenz von ca. 20kHz haben
soll und mein µP eine interne Oszillator-f von 1MHz hat. 1MHz/255=3.9kHz 
--> Lösung: Auflösung auf 5Bit herunterdrehen.
Schaff ich das auch irgendwie mit dem Timer2?

Danke für eure Hilfe,
LG Birgit
1
 
2
#include <inttypes.h>
3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <avr/signal.h>
6
#include <util/delay.h>
7

8

9

10
void init_Timer1()
11
{
12
  TCCR1A|= (1<<COM1B0) | (1<<COM1B1) | (1<<WGM10) | (1<<WGM11); //COM1B0:1 ... set OC1B on Compare Match, clear at TOP
13
    TCCR1B |= (1<<WGM12) | (1<<WGM13) | (1<<CS10); //Prescaler:1, Fast PWM (top = OC1A)
14
  TCNT2=0;
15
  OCR1A=0x97;
16
  OCR1B=0x45; 
17
  
18
  sei();
19
}
20

21

22

23
int main(void)
24
{    
25
  PORTB &= ~(1<<PB2);
26
  DDRB |= (1<<PB2);
27
  
28
  init_Timer1();
29

30
    for(;;);
31
 
32
}
#535629
Lesenswert?

Ich weiss nicht was du hast.
Wenn ich dein Pgm in meinen Mega16 brenne, PB2 auf PD4 anpasse
weil OCR1B beim Mega 16 am PortD Pin 4 liegt, dann funktioniert
die PWM wie sie soll. (Getestet mit einer LED)
Ich sehe auch keinen Grund warum das auf einem Mega8 nicht
gehen sollte. Es sein denn natürlich, der Mega8 läuft
überhaupt nicht. Aber davon gehe ich mal nicht aus.

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