PWN erzeugen mit Atmega 644

Gast #2097005
Lesenswert?

Hallo,

mein Ziel ist es auf 2 Pins ein PWN Signal zu erzeugen (OC0A und OC2A). 
Die Anforderungen sind folgende:

Die Low Dauer soll fest sein z.B. 1uS. Die Dauer des Highpegels und 
somit die Frequenz soll variierbar sein. Der Controller ist mit 20MHz 
getaktet.

Könnte mir jemand an diesem Beispiel erklären, wie ich die Timer 
konfigurieren muss? Mit Timern habe ich leider noch nicht gearbeitet, 
und deshalb sehe ich in dem Datenblatt noch nicht so recht durch.

Danke, und viele Grüße
Gast #2097068
Lesenswert?

Also jetzt habe ich ein Wenig das Datenblatt verstanden. Also ich würde 
sagen, das ich folgendes benötige:

Ich geh jetzt mal von einem etwas längeren Low Pegel aus so um die 50us.

Also wahrscheinlich brauche ich dieses non inverting fast PWM.

COM0A1=1, COM0A0=0

Wenn ich es jetzt richtig verstanden habe kann ich hiermit den Topwert 
einstellen, wobei ich den Topwert in 0CRA speichern muss:

WGM2=1, WGM1=1, WGM0=1

Als Prescaler würde ich 1024 nehmen:

CS02=1, CS01=0, CS00=1

Bei der nicht invertierenden PWM wird ja der Pin beim erreichen des 
Comparewertes auf 0 gesetzt, und beim Bottom auf 1.

Wo kann ich jetzt den Comparewert einstellen? Ich habe mir das jetzt so 
vorgestellt, dass ich den Topwert regle und damit die Frequenz und den 
Comparewert immer auf Top-1 setze, was dann ca. den 50us entsprechen 
sollte.
Gast #2097082
Lesenswert?

Hi

>Wo kann ich jetzt den Comparewert einstellen? Ich habe mir das jetzt so
>vorgestellt, dass ich den Topwert regle und damit die Frequenz und den
>Comparewert immer auf Top-1 setze, was dann ca. den 50us entsprechen
>sollte.

Mit OCR0B. Ausgang ist dann OC0B.

MfG Spess
Gast #2097098
Lesenswert?

Hi

>Also ich möchte schon den OC0A Pin nutzen. Da wird doch aber der Topwert
>in OCR0A gespeichert und nciht der Comparewert, oder?

Richtig. Bei Mode7 hast du nur einen PWM-Kanal. Und das ist OC0B.

MfG Spess
Gast #2097143
Lesenswert?

Hi

>Also ist PWM doch das falsche, da benötige ich wohl CTC. Nur wie
>konfiguriere ich das?

Lass dich doch nicht durcheinander bringen. CTC nützt dir nichts.

>Die Dauer des Highpegels hat nichts mit der Frequenz zu tun. Die
>Frequenz ist bei einem PWM-Signal fest.

Aber wenn er die Dauer der Low-Phase ändert, ändert er auch das 
Tastverhältnis. Also doch PWM.

MfG Spess
Gast #2097189
Lesenswert?

Hi
>Wenn er die aber Fest haben möchte dann hat er einen High-Pegel der
>abhäning ist von der Frequenz.
>Also kann er nicht beides variierbar machen.

Das hatte ich übersehen. Aber mit invertierter PWM machbar. Dann 
bestimmt OCR0B die Low-Phase und High-Phase und Frequenz ist über OCR0A 
einstellbar.

MfG Spess
Gast #2097235
Lesenswert?

Ich habe jetzt erst einmal versucht ein einfaches Rechteck zu bekommen. 
Leider ohne Erfolg:
1
TCCR0A |= (1<<COM0A0) | (1<<WGM01);
2
TCCR0A &= ~( (1<<COM0A1) | (1<<WGM00) );
3
TCCR0B |= (1<<CS00) | (1<<CS02);
4
TCCR0B &= ~( (1<<CS01) | (1<<WGM02) );
5
OCR0A=0x00;
Gast #2097258
Lesenswert?

Wenn ich es richtig sehe benutzt du den CTC-Mode.
OCR0A auf Null zu setzten bringt dir kein Rechtecke, der Wert muss schon 
größer sein.

Das löschen der Bits muss man nicht machen, wenn man da nicht aufpasst 
überschreibt man sich die eigentliche Einstellung. Wenn du sicher gehen 
willst dass nur die Bits gesetzt sind dann schreib 0x00; vor dem Setzten 
der Bits ins Register.
Gast #2097297
Lesenswert?

Hi

Schnell mal getestet. Mit der Initialisierung (Timer2)
1
                      ;************ TIMER_COUNTER_2 ***************
2

3
                      ldi r16,1<<COM2B1|1<<COM2B0|1<<WGM21|1<<WGM20  
4
                      sts TCCR2A,r16
5

6
                      ldi r16,1<<WGM22|1<<CS20   
7
                      sts TCCR2B,r16
8

9
                      ldi r16,$20
10
                      sts OCR2A,r16
11

12
                      ldi r16,$01
13
                      sts OCR2B,r16
14

15
                      sbi DDRD,PD6    ; OC2B Ausgang

lässt sich deine gewünschte Kurvenform (Anhang) erzeugen.

MfG Spess
Angehängte Dateien:

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