Jak zrobić częstotliwość powtórzeń

0

Witam wszystkich. Jestem w trakcie pisania programu który wysyła sygnały o określonej częstotliwości (Hz)
Wysłanie jednego impulsu sygnału wygląda tak

int Impuls()
{
OutPort(0x378, 00000001); // 1 logiczna wysłana na wyjście
OutPort(0x378, 00000000); //  0 logiczne wysłane na wyjście
return 1;
}

Jak zrobić aby wysyłać te sygnały z częstotliwością np. 10Hz (10 powtórzeń tego kodu wyżej w ciągu jednej sekundy)
W każdym razie chciałbym coś takiego: np.

  • przez 2 sekundy sygnał 30Hz
    potem
  • przez 0.5 sekundy sygnał 45Hz

Tylko że nie wiem jak to zrobić. Wydaje mi się że wystarczy jakieś działanie matematyczne jako warunek ilości powtórzeń pętli ale nie wiem jaki :D Pomoże ktoś :)

0

1 sekunda == 1000 ms

Petla: 10 razy;
Wstaw to w pętle i użyj funkcje sleep(<wartość>); //< wrtośc w ms

1

Pecet się ogólnie do tego nie nadaje. Potrzebny byłby jakiś dodatkowy układ, na przykład mikrokontroler, do którego wysyłasz tylko częstotliwość (10) i który generuje sygnał z większą dokładnością.

0
Madaoo napisał(a):

1 sekunda == 1000 ms

Petla: 10 razy;
Wstaw to w pętle i użyj funkcje sleep(<wartość>); //< wrtośc w ms

Za bardzo nie rozumiem , to ma być coś takiego

int Impuls(int hz, int czas)
{
for (int i=0; i<hz; i++)
{
OutPort(0x378, 00000001); // 1 logiczna wysłana na wyjście
OutPort(0x378, 00000000); //  0 logiczne wysłane na wyjście
sleep(czas);
}
return 1;
}
1

Chyba raczej tak :)

int Impuls(int hz)
{
int czas = 1000/hz;
for (int i=0; i<hz; i++)
{
OutPort(0x378, 00000001); // 1 logiczna wysłana na wyjście
OutPort(0x378, 00000000); //  0 logiczne wysłane na wyjście
sleep(czas);
}
return 1;
}
1

Raczej tak:

void Impuls(unsigned hz,unsigned mstime)
  {
   int tmp=250,logic=0;
   while(mstime--)
     {
      if((tmp+=hz)>=500)
        {
         OutPort(0x378,logic^=1); // 1/0 logiczna wysłana na wyjście
         tmp-=500;
        }
      sleep(1);
     }
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1