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

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.