Hej od miesiąca próbuję napisać taką funkcję która działałaby na zasadzie regulatora czasu.
Do funkcji jako argument miałaby być wysyłana zmienna uint16_t (w zakresie tylko do 1023), natomiast funkcja miałaby zwracać liczbę int8_t (do 255)
Niby proste, z tym, że ja chciałbym aby funkcja korzystała z Timera1 procesora Atmega8 i zwracała kolejne liczby (od 0-255) ze zwłoką w czasie zależną od argumentu czyli:
Jeśli funkcja będzie wywoływana cyklicznie z argumentem 1 to zmiana kolejnych zwróconych liczb będzie następować tak
0 - (1ms przerwy) 1 - 1ms przerwy) 2- (1ms przerwy) 3 - (1ms przerwy)...................... itd
Jeśli jako argument zostanie przesłana liczba 1023, kolejna zmienna zwracana byłaby co około 1 sek. czyli
0 - (1 sek przerwy) 1 - (1sek przerwy) 2- (1sek przerwy) 3 - (1sek przerwy)...................... itd
Próbowałem eksperymentalnie dobrać preskaler i inne zmienne pomocnicze, jednak wszystko daje w łeb. Nie potrafię uzyskać tak szerokiego jak na moje potrzeby
wachlarza czasów. Dla lepszego zrozumienia, próba mojego rozwiązania Powiedzcie proszę czy dobrze myślę.
Atmega pracuje taktowana rezonatorem 16MHz
prescaler 8 tryb pracy NORMAL wówczas aby uzyskać przerwanie co 1ms zgodnie z poniższym wyliczeniem

muszę załadować do licznika wartość 63537? Nie - skoro licznik timera 1 u mnie liczy tylko do 20831.
Więc jak? Może użyć trybu CTC wóczas na początku (a raczej na końcu każdego z przerwań) zładuję do licznika 1999 i rozumiem że przerwanie
będzie się zgłaszać co 1 ms tak?
no to teraz jak to pogodzić z regulacją.
Na intuicję wydaje się że zliczać te przerwania zwyczajnie czyli :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a w ciele funkcji dać warunek
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Bardzo proszę - Sprawdźcie czy to co napisałem trzyma się kupy.