Pulsweitenmodulation

 

Es stehen zwei unabhängige Timer für die Pulsweitenmodulation zur Verfügung. Timer_0 mit 8 Bit und Timer_1 mit 16 Bit. Mit einer Pulsweitenmodulation läßt sich sehr einfach ein Digital-Analog-Wandler realisieren. Auf dem Mega128 kann zusätzlich Timer_3 genutzt werden.

 

Timer0 (8 Bit)

 

Beispiel: Pulsweitenmodulation mit 138,9 µs Periode und 5,42 µs Pulsweite, geändert auf 10,84 µs Pulsweite

 

//  Puls: 10*542,5 ns = 5,42 µs, Periode: 256*542,5 ns = 138,9 µs

Timer_T0PWM(10,PS0_8);

 

Timer_T0PW(20);         //  Puls: 20*542,5 ns = 10,84 µs

 

Timer1 (16 Bit)

 

 

Beispiel: Pulsweitenmodulation mit 6,4 ms Periode und 1,28 ms Pulsweite Kanal A und 640 µs Pulsweite Kanal B

 

Timer_T1PWMX(100,20,10,PS_1024); //  Periode: 100*69,44 µs = 6,94 ms

                                 //  PulsA: 20*69,44 µs = 1,389 ms

                                 //  PulsB: 10*69,44 µs = 694,4 µs

 

 

Bei den Timer PWM Funktionen ist ein Wert von Null für den Pulsweiten Parameter nicht erlaubt, und schaltet den Ausgang des PIN auch nicht aus. Um ein low Signal zu erzeugen, muss der Timer ausgeschaltet werden (Timer_Disable) und der PIN auf Ausgang geschaltet werden. Benutzt man eine PWM Funktion die mehrere PWM Signale erzeugt, dann eine PWM Funktion aufrufen (z.B.Timer_T1PWM), die den PIN, der auf low geschaltet werden soll, nicht umfaßt.

 

Ein Beispiel:

 

 

       while(1)

       {

         Timer_T1PWMX(255,128,128,PS_8);

         Timer_T1PWA(128);

         Timer_T1PWB(128);

 

         AbsDelay(1000);

 

    // OC1B ausschalten

         Timer_Disable(1);

         Timer_T1PWM(255,128,PS_8);

         Port_DataDirBit(14,1);

         Port_WriteBit(14,0);

       }