mikrocontroller.net

Forum: Compiler & IDEs PWM mit Timer2


Autor: Birgit (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
 
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <util/delay.h>



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



int main(void)
{    
  PORTB &= ~(1<<PB2);
  DDRB |= (1<<PB2);
  
  init_Timer1();

    for(;;);
 
}

Autor: Birgit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 b

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Birgit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mein µp läuft einwandfrei.
hab noch keinen download gemacht, sondern nur im avr studio simuliert. 
möglicherweise funzt da die sim nicht ganz.
danke dir trotzdem!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Birgit wrote:
> mein µp läuft einwandfrei.
> hab noch keinen download gemacht, sondern nur im avr studio simuliert.

Sag das doch gleich.
AVR Studio hat mit den Timer Modi so seine liebe Not.

http://www.mikrocontroller.net/articles/AVR-Studio_Bugs


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.