Witam,
robię prosty generator ale utknąłem w dość błahym punkcie jakim jest regulacja częstotliwości. Chce uzyskać sygnał od 1 - 1kHz, i najlepiej żeby można było uzyskać częstotliwość z całego zakresu. Korzystam z 16 bitowego PWM w atmega8, wypełnienie reguluję wartościami rejestrów OCR1A i OCR1B. Wzór z jakiego wyliczam częstotliwość wyjściową to:
f = fclk/2*N*ICR1
Atmega taktowana 4MHz, preskaler ustawiony na wartość 1024, tak więc:
fmax = 4Mhz/(2048*2) =976Hz
fmin = 4Mhz/(2048*2048) = 0,95Hz
Wartość ICR1 regulowana na przez przetwornik. Sęk w tym, że nie da się płynnie poruszać w tym zakresie częstotliwości, bo po 976Hz można uzyskać 488Hz i potem znów połowę mniej.
Nie bardzo wiem jak to to ruszyć dalej, zastanawiałem się nad zmienianiem wartości preskalera w zależności od tego w którym przedziale częstotliwości jestem ale nie wiem czy to nie zbyt karkołomne rozwiązanie. Ma ktoś jakiś pomysł? Pomóżcie Panowie. Program powstaje w C.
robię prosty generator ale utknąłem w dość błahym punkcie jakim jest regulacja częstotliwości. Chce uzyskać sygnał od 1 - 1kHz, i najlepiej żeby można było uzyskać częstotliwość z całego zakresu. Korzystam z 16 bitowego PWM w atmega8, wypełnienie reguluję wartościami rejestrów OCR1A i OCR1B. Wzór z jakiego wyliczam częstotliwość wyjściową to:
f = fclk/2*N*ICR1
Atmega taktowana 4MHz, preskaler ustawiony na wartość 1024, tak więc:
fmax = 4Mhz/(2048*2) =976Hz
fmin = 4Mhz/(2048*2048) = 0,95Hz
Wartość ICR1 regulowana na przez przetwornik. Sęk w tym, że nie da się płynnie poruszać w tym zakresie częstotliwości, bo po 976Hz można uzyskać 488Hz i potem znów połowę mniej.
Nie bardzo wiem jak to to ruszyć dalej, zastanawiałem się nad zmienianiem wartości preskalera w zależności od tego w którym przedziale częstotliwości jestem ale nie wiem czy to nie zbyt karkołomne rozwiązanie. Ma ktoś jakiś pomysł? Pomóżcie Panowie. Program powstaje w C.
