Re: Gleichzeitige Erzeugung von Frequenz und PWM Kategorie: CC-Pro Unit & Appl.Board (von Johannes Fan - 11.03.2009 13:34) | ||
Als Antwort auf Re: Gleichzeitige Erzeugung von Frequenz und PWM von PeterS - 11.03.2009 12:36 | ||
| ||
> > 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. > > > > Das Programm von Frequenzerzeugung : > > > > // 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); > > } > > > > Das Programm von PWM: > > > > // 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); > > } > > > > und das Hauptprogramm: > > > > 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. | ||
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum