Forum: Mikrocontroller und Digitale Elektronik problem mit at90can 2x fast-pwm timer1/3


von Tim R. (herrvorragend)


Lesenswert?

hallo,

ich möchte unabhängig von einander 2x fast-pwm benutzen um 2 
transistoren zu steuern.
dazu habe ich mit timer1 eine fast-pwm auf port b6 initialisiert. 
funktioniert auch soweit gut, ich kann auch die pulslänge mit OCR1B 
steuern.
bisher sieht mein code wie folgt aus:
1
//timer 1
2
  OCR1A  = 0x005F;    //periodendauer
3
  
4
  OCR1B = 0x000F;      //TOP wert/pulsbreite
5
  
6
  //fast-pwm, toggle ocna on compare
7
  TCCR1A = TCCR1A & ((0<<COM1A1)|(1<<COM1A0)|(0<<COM1B1)|(1<<COM1B0)|(0<<COM1C1)|(1<<COM1C0)|(1<<WGM11)|(1<<WGM10));
8
  TCCR1A = TCCR1A | ((1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(1<<COM1C1)|(0<<COM1C0)|(1<<WGM11)|(1<<WGM10));        
9
10
  //clk/64
11
  TCCR1B = (0<<ICNC1)|(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);
12
    
13
  DDRB |= (1 << DDB6);  //port b6

nun möchte ich die zweite pwm initialisieren und dachte mir ich kann 
dafür timer 3 nutzen. dieser baut auf die selben register auf nur vom 
typ 3 eben für timer 3. das ganze hat so aber nicht geklappt. ich bin 
mir nicht sicher, ob ich überhaupt diese beiden timer parallel nutzen 
kann. ich weiss nicht, wie ich eine weitere fast-pwm initialisieren 
kann, wo auch die pulslänge zu steuern ist. das datenblatt war mir nur 
wenig hilfreich bisher. mit timer2 kam ich nicht ans gewünscht ziel. 
vllt hat jemand eine idee oder kann mir gar weiter helfen ? :-)
1
//timer 3
2
  OCR3A = 0x005F;      //periodendauer
3
  
4
  OCR3B = 0x000F;      //TOP wert/pulsbreite
5
  
6
  //fast-pwm, toggle ocna on compare
7
  TCCR3A = TCCR3A & ((0<<COM3A1)|(1<<COM3A0)|(0<<COM3B1)|(1<<COM3B0)|(0<<COM3C1)|(1<<COM3C0)|(1<<WGM31)|(1<<WGM30));
8
  TCCR3A = TCCR3A | ((1<<COM3A1)|(0<<COM3A0)|(1<<COM3B1)|(0<<COM3B0)|(1<<COM3C1)|(0<<COM3C0)|(1<<WGM31)|(1<<WGM30));        
9
10
  //clk/64
11
  TCCR3B = (0<<ICNC3)|(0<<ICES3)|(1<<WGM33)|(1<<WGM32)|(0<<CS32)|(1<<CS31)|(1<<CS30);
12
  
13
  DDRB |= (1 << DDB4);  //port b4

danke im voraus
liebe grüße !!

von Jens (Gast)


Lesenswert?

Ich habe mir deinen Code jetzt nicht angesehen, kann dir also keinen 
Hinweis zu eventuellen Fehlern geben.

Aber du kannst mit Timer 1 bis zu 3 PWM Kanäle mit unterschiedlichen 
Dutycyclen ansteuern. Sie haben nur alle die selbe Periodendauer (PWM 
Frequenz) und die selben PWM Einstellungen (also bei dir fast-PWM).

Es muss aber auch mit Timer3 klappen.

Timer2 ist nur 8 bit.
Timer 1 und 3 sind beide 16bit.

Nur so auf die Schnelle...

von Tim R. (herrvorragend)


Lesenswert?

danke für die schnelle antwort, das hilft mir schonmal

ich habe eben aber beim nochmal durchgehen meinen fehler gefunden.

tipp: man sollte den richtig pin natürlich belegen und sich auch ansehen 
;-)

von Jens (Gast)


Lesenswert?

Keine Ursache.
Manchmal sieht man den Fehler selbst, wenn man ihn versucht anderen zu 
erklären.

Also wenn die Frequenz gleich sein darf, dann mach beides mit Timer 1 
und spar die Timer 3 für andere Aufgaben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.