PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Atmega16?



lzaman
09.05.2008, 20:40
Hallo,

ich bin schon den ganzen tag am probieren und tüfteln. Ich möchte gerne an Pin18 (PD4 (OC1B)) und Pin19 (PD5(OC1A)) einen festen PWM Wert einstellen. Also Hardware PWM verwenden.

Wieso klappt das mit diesem code nicht?

Bin noch Anfänger und habe sämtliches schon gelesen an Tutorials und Foren.

Ich komme aber einfach nicht dahinter.

#include <avr/io.h>

int main (void) {

DDRB = (1<<PB2);
TCCR1A = (1<<COM1B1)|(1<<WGM10)|(1<<WGM12);
TCCR1B = (1<<CS10);
OCR1B = 128;
OCR1A = 15;


while(1)
{
/* "leere" Schleife*/;

}

/* wird nie erreicht */
return 0;
}

McJenso
09.05.2008, 22:16
Hallo,

ohne den Code wirklich genau angeschaut zu haben, PD4 und PD5 müssen als Ausgänge definiert werden. Wenn's das nicht, war nochmal melden.

Gruß

Jens

franzl
10.05.2008, 10:02
hi,
wie der Vorredner schon sagte musst du die Ports als Ausgänge definieren, steht auch so im Datenblatt. Ansonsten sieht dein Code eigentlich richtig aus wo weit ich das sehe.
mfg franz

lzaman
10.05.2008, 19:56
Juhu, ich habs geschafft, naja fast.

Ich kann meine PWM setzen und auf einen festen Wert einstellen

im Beispel 128 also ca. 2,5V

Aber wieso nur am Ausgang OCR1A, ich möchte PWM an OCR1B ebenfalls
realisieren.

Hat jemand eine Lösung?

Hier mein Code:

#include <avr/io.h>
#define F_CPU 8000000

int main (void)
{

DDRD=0b1111111;

// PWM Konfig.

TCCR1B |= (1<<CS10); //
TCCR1A |= (1<<WGM10)|(1<<COM1A1); //PWM 8 Bit

OCR1A=128;

OCR1B=128;

return 0;
}

Herkulase
10.05.2008, 20:57
hm,

TCCR1A |= (1<<WGM10)|(1<<COM1A1); //PWM 8 Bit

solltest du nicht COM1B1 auch setzen?
Ich denke, durch einen Blick ins Datenblatt würdes du schnelle voran kommen, als wenn Du hier jedesmal auf eine Antwort warten müsstest.

>>DDRD=0b1111111;

Das würde ich übrigens so nichtl schreiben, denn es fällt einem nicht gleich auf, dass da eine 1 fehlt. 0xFF wäre an der Stelle übersichtlicher.

Grüßke

GEald

EDIT: müsste es nicht DDR--B-- heissen stat DDR--d-- ?

lzaman
10.05.2008, 22:27
Danke es klappt und DDRD ist schon richtig. Am PortD sind die Hardware PWM Ausgänge des Atmega16.

Danke nochmal für die Hilfe.

Herkulase
10.05.2008, 23:32
Ah, ja ok.

Ich dacht ich hab gelesen, du würdest nene Mega8 benutzen, aber es steht ja sogar im topic. Na sowas.... Man wird halt net jünger...

hehe