Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > 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: