Re,
@Pascal : J'ai posté la meme question mais en anglais et j'ai reçu une e-mail concernant l'interdiction des postes en anglais alors j'ai publié la meme question encore une fois mais en français et j'ai oublié de supprimer la precedente.
Bref, concernant le dephasage de Pi/2 j'ai reussi à resoudre le probléme par le softj'ai crée 2 sorties pwm dont une commence quand l'autre est à T/2 ( T
eriode).. voici le programme:
#include "C:\Users\DELL\Desktop\PWM\int errupt.h"
#define preload 65458
#define red pin_d7
#define green pin_d6
int16 red_duty_1=1;
int16 green_duty_1;
int16 blue_duty_1;
int16 red_duty_2;
int16 green_duty_2;
int16 blue_duty_2;
int16 Intcount;
int16 cycles=256;
//****************************** ****************************** ****************************** ********
//100Hz pwm (interrupt at 25.8kHz)
//****************************** ****************************** ****************************** ********
#INT_TIMER1
void timer_irq()
{
Intcount++;
if (Intcount < cycles)
{
if (Intcount == red_duty_1 || Intcount == red_duty_2 )
{
output_toggle(red);
}
if (Intcount == green_duty_1 || Intcount == green_duty_2)
{
output_toggle(green);
}
}
else if(Intcount == cycles)
{
Intcount = 0;
}
set_timer1(preload);
}
void set_frequency(int16 frequency)
{
cycles=25800/frequency;
red_duty_2=cycles/2;
green_duty_1=cycles/4;
green_duty_2=cycles- cycles/4;
}
void main()
{
int16 x=50;
int16 y=0;
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
set_timer1(preload);
output_high(green);
output_high(red);
red_duty_1 = 1;
set_frequency(50);// freQ par defaut 50Hz
Intcount = 0;
while(1)//
{
x=x+50;// augmenter la freQ pour reduire : x=x-50
set_frequency(x);
}
Mercii tout le monde pour votre coopération![]()
-----