Forum: Mikrocontroller und Digitale Elektronik PWM in C


von raoul4 (Gast)


Lesenswert?

hallo,
will pwm in C benützen. hab auch schon mit der such funktion in deisem
forum hier einige beiträge gefunden, aber ich keine fertigen programme
sourcecodes sondern ich will das erklärt bekommen und wie immer auch
verstehen. ;-) (ich will, ich will, ich will)
ich hab mir mal das datenblatt angeschaut und bin schon ganz schön weit
g. also erst muss ich in TCCR1A das bit 0 auf 1 setzen. und dann?

mfg raoul4

von Sven Müller (Gast)


Lesenswert?

Och, schau doch ins Datenblatt..
Auswendig weiß ich das auch nicht..

Timer starten, PWM Mode wählen, Tastverhältnis einstellen, Port als
Ausgang schalten....

nur mal so als Stichpunkt...vielleicht sagst du noch welcher
Controller..

von raoul4 (Gast)


Lesenswert?

ah genau, at90s8535!
-wie starte ich den timer?
-den pwm modus hab ich doch schon mit TCCR1A bit 0 auf 1 bestimmt,
oder? 8-bit auflösung?
-was ist das tastverhältnis?
-wie man den port als ausgang schaltet weiß ich zum glück!

mfg raoul4

von Josef (Gast)


Lesenswert?

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Ph. correct PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x81;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


OCR1AH=0x00;                //Diese Register entscheiden über das
Tastverhältnis
OCR1AL=0x55;


Josef

von Matthias (Gast)


Lesenswert?

Hi

der AVRGCC kann L und H-Register als ein 16-Bit Pseudoregister
ansprechen.

OCR1BH=0x00;
OCR1BL=0x00;

ist also equvivalent zu

OCR1B=0x00;

Matthias

von raoul4 (Gast)


Lesenswert?

hallo,
wenn ich jetzt den code vom Josef (<< danke) in codevision reinkopiere
und dann compile und ihn dann auf den mcu schreibe ist OC1A immer noch
auf 0 volt. wie kann ich denn die frequenz steuern, also wo muss ich
eine zahl reinschreiben/bit setzen, damit ich mehr volt/höhere
frequenzen bekomme?

mfg raoul4

von Josef (Gast)


Lesenswert?

Nimm den Codewizard von Codevision.Der hilft dir.


OCR1AH=0x00;                //Diese Register entscheiden über das
                           //   Tastverhältnis
OCR1AL=0x55;

Immer beide Register beschreiben. Zuerst high, dann low -Wichtig !


Du mußt deinen Pin als Ausgang setzen !!

// Port D initialization PORTD.5 ist PWM Ausgang.
PORTD=0x00;
DDRD=0x20;


SG Josef

von Marco (Gast)


Lesenswert?

Hallo Raoul

Du wolltest PWM doch erklärt bekommen?

Tastverhältnis: egal bei welcher Frequenz...Das Tastverhältnis ist die
Zeit des Zustandes "High" zur Zeit des Zustandes "Low".
Der MC bekommt von Dir durch 8, 9 oder 10Bit Auflösung die Grenze eine
Zähler gesetzt (255, 512 oder 1024). Nun gibst Du über einen Port oder
andersweitig eine Zahl, eine Referenz. Der Zähler startet und
vergleicht nun immer den Zähler mit der Refernz. Je nachdem ob Du einen
invertierenden oder nichtinvertierenden PWM eingestellt hast, geht dein
PWM-Ausgang auf High oder Low wenn der Zähler gleich der Referenz ist.
Der Zähler zählt nun weiter bis zu Grenze und zählt dann einfach wieder
zurück bis 0 uns. . Bei Erreichen der Referenz geht der PWM-Ausgang
wieder in die andere Stellung. Im Tutorial "Atmel mit
C-Programmieren" ist das wunderschön erkärt. Schau mal rein.

MfG Marco

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.