Forum: Mikrocontroller und Digitale Elektronik FastPWM Atmega Probleme


von Karl (Gast)


Lesenswert?

Hi,

ich möchte FastPWM auf allen 4 8bit PWM-Ausgängen meines Atmega324p 
(16Mhz) ausgeben. Ich habe leider kein Oszilloskop und möchte daher mit 
einem Multimeter feststellen, ob es funktioniert (Spannung über 
Tiefpass). Allerdings habe ich immer 5.04V -.-

Ich übersehe den Fehler wahrscheinlich...

Hier die Initialisierung, ich variiere OCRnx zwischen 12 und 40 und die 
Interrupts sind mit sei() aktiviert.
1
void pwmInit()
2
{
3
4
  TCCR0B |= (1<<CS02) | (1<<CS00); //Prescaler 1024
5
  TCCR2B |= (1<<CS22) | (1<<CS20); //Prescaler 1024
6
7
  //FastPWM mit OCRnx als Obergrenze
8
  TCCR0A |= (1<<WGM00) | (1<<WGM01);
9
  TCCR0B |= (1<<WGM02);
10
  
11
  TCCR2A |= (1<<WGM20) | (1<<WGM21);
12
  TCCR2B |= (1<<WGM22);
13
  
14
  //nichtinvertierende PWM
15
  TCCR0A |= (1<<COM0A1) | (1<<COM0B1) ;  
16
  TCCR2A |= (1<<COM2A1) | (1<<COM2B1) ;  
17
  
18
  //Minimale Drehzahl
19
  OCR0A = minVelo;
20
  OCR0B = minVelo;  
21
  OCR2A = minVelo;
22
  OCR2B = minVelo;
23
24
  //Ausgänge festlegen
25
  DDRB |= (1<<PB3) | (1<< PB4);
26
  DDRD |= (1<<PD6) | (1<< PD7);
27
28
}

Vielen Dank

von Ingo (Gast)


Lesenswert?

Sieht drundsätzlich ok aus, rufst du die Funktion auch auf?

von Karl (Gast)


Lesenswert?

Ingo schrieb:
> rufst du die Funktion auch auf?

klar,
mhm, vielleicht muss ich mir doch ein oszi besorgen

Kann es vielleicht auch an den Fuses liegen?

von Karl (Gast)


Lesenswert?

ich glaube ich habe eine falsche Auffassung von FastPWM bzw es für 
meinen Anwenungszweck falsch konfiguriert.

Ich will eine Periodendauer von ungefähr 20ms und die soll fest sein. 
Darin soll am Anfang der Pegel auf high sein (für 1-5ms über OCRnx) und 
dann und bis zum Ende auf low gehen.

Kann mir dazu jemand was sagen?

von Ingo (Gast)


Lesenswert?

Das kann dann musst du das ICR als Top nehmen, damit stellst du deine 
Periode ein. Mit dem OCRxx Registern bestimmst du dann den Tastgrad, 
natürlich bezogen auf die ICR Register (Ich weiß das das Register schon 
in ICR mit enthalten ist)

Das Datenblatt hilft weiter

von Karl (Gast)


Lesenswert?

ICR gibt es bei den 8bit Timern nicht, aber ich hatte ihn falsch 
konfiguriert. Ich benutze nun den TOP-Wert für den Überlauf und alles 
funktioniert wie gewollt.

Vielen Dank für deine Hilfe und den passenden Tipp

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.