Witam. Poniżej przedstawiam kod, który jest synchronizowany z siecią elektroenergetyczną, a następnie na drabince r2r generuję 3 przebiegi prostokątne, przesunięte względem siebie o 120 stopni. Dodatkowo chcę regulować przesunięciem fazowym wszystkich przebiegów jednocześnie względem sygnału synchronizującego. Wszystko działa, ale jak zacznę zwiększać opóźnienie to za każdym razem przycisk trzeba trzymać dłużej, aby przesunięcie fazowe się zwiększyło i odwrotnie. Czy można zrobić w ten sposób, aby reakcja była prawie natychmiastowa?
ISR(INT0_vect)//wlaczenie przerwania zewnetrznego, wchodzi sygnal z detektora 0
{
//generowanie sygnalu sterujacego w fazie z detektorem zera
int_in++;//licznik przerwan pochodzacych od detektora zera
if (int_in==1) _delay_ms(time_del);
if (int_in<okres)// zmiana liczby okresow
{
PORTA=napiecie_znam;//wlacza napiecie znamionowe
}
else{
if (int_in==okres) //opoznienie chwili czasowej
{
_delay_ms(time_del);
}
if (int_in<okres*2)
{
PORTA=licznik; //zaladuj wartosc ustawionego licznika
}
}
//generowanie sygnalu przesunietego o 120 stopni wzgledem detektora zera
if (int_in1==1) _delay_ms(time_del); _delay_us(700); _delay_ms(6);
if (int_in<okres)// jesli nastapi przerwanie wlacz napiecie znamionowe
{
PORTB=napiecie_znam;//wlacza napiecie znamionowe
}
else{
if (int_in==okres) _delay_ms(time_del); _delay_us(700); _delay_ms(6);
if (int_in<okres*2)
{
PORTB=licznik; //zaladuj wartosc ustawionego licznika
}
}
//=240 stopni==
if (int_in==1) _delay_ms(time_del); _delay_ms(6); _delay_us(700);
if (int_in<okres)// jesli nastapi przerwanie wlacz napiecie znamionowe
{
PORTC=napiecie_znam;//wlacza napiecie znamionowe
}
else{
if (int_in==okres) _delay_ms(time_del); _delay_us(700); _delay_ms(6);
if (int_in<okres*2)
{
PORTC=licznik; //zaladuj wartosc ustawionego licznika
}
if(int_in>=okres*2-1) int_in=0; //zeruj licznik przerwan
}
}