Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > Hallo Zusammen, > > > > > > ich versuche momentan ein Programm zu erstellen, das mit Timer 1 (Frequenzerzeugung) und Timer 3 (PWM) > > > realisiert wird. Das Programm habe ich zuerst mit Beispielprogramm zusammen aufgebaut und die erzeugten > > > Signale werden mit HIlfe von Oszi dargestellt. Es funktioniert bei Frequenzerzeugung aber nicht bei PWM. > > > > > > <b> Das Programm von Frequenzerzeugung : </b> > > > > > > // FRQ1: Frequenzerzeugung (16 Bit) > > > // Über den Ausgang wird eine Signal mit einer entsprechend eingestellter > > > // Frequenz ausgegeben. > > > // Über den Timer Prescaler wird das Teilungsverhältnis (Oszillatorfrequenz/ps/2) > > > // festgelegt.(14,7456MHz/ps/2) > > > /* > > > Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks) > > > PS_1 (1) 136 ns > > > PS_8 (2) 1,085 µs > > > PS_64 (3) 8,681 µs > > > PS_256 (4) 34,72 µs > > > PS_1024 (5) 138,9 µs > > > */ > > > void Frequenzerzeugung(void) > > > { > > > Timer_T1FRQ(10,PS_1024); // Der Timer erzeugt ein Signal mit > > > // Periode=34,72 µs*1=34,7 µs, Frequenz= 28,8kHz > > > while (1); > > > } > > > > > > <b> Das Programm von PWM: </b> > > > > > > // PWM3: Pulsweitenmodulation > > > // Berechnung der Pulsweitenmodulation > > > // Timer_T3PWM(Par1,Par2,PS); > > > // Periode=Par1*PS/FOSC (100*64/14,7456MHz=434 µs) > > > // Pulsweite=Par2*PS/FOSC (25*64/14,7456MHz=108 µs) > > > // Über den Timer Prescaler wird das Teilungsverhältnis (Oszillatorfrequenz/ps) > > > // festgelegt. (14,7456MHz/ps) > > > /* > > > Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks) > > > PS_1 (1) 67,8 ns > > > PS_8 (2) 542,5 ns > > > PS_64 (3) 4,34 µs > > > PS_256 (4) 17,36 µs > > > PS_1024 (5) 69,4 µs > > > */ > > > > > > // Dieses Demo Programm ist nur für Mega128 > > > #ifdef MEGA32 > > > #pragma Error "Timer3 nur für Mega128" > > > #endif > > > > > > void PWM(void) > > > { > > > Timer_T3PWM(100,20,PS_256); // Berechnung siehe oben > > > while (1); > > > } > > > > > > <b> und das Hauptprogramm: </b> > > > > > > void main(void) > > > { > > > Frequenzerzeugung (); > > > PWM (); > > > } > > > > > > oder sollte ich mit Multithreading realsieren? > > > > Ähh, Du bist Dir schon im Klaren, das "while(1);" eine Endlosschleife ist, und deshalb > > Frequenzerzeugung() niemals verlassen wird? Einfach das "while(1);" rausnehmen. > > > > Gruss Peter > > > > > > > > vielen Dank im Voraus. > > Hallo Peter, > > vielen Dank. Es funktioniert.