By każda nuta trwała sekundę należy usunąć tą linijkę.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak ktoś ma ochotę może poszerzyć interpretację nut na dwa znaki np: 1c, 2c, 4c, 8c - tu cała nuta, półnuta, ćwierćnuta, ósemka.
Komuś może być mało częstotliwości i wtedy musiałby poszerzyć na trzy znaki np: 1c1.
W funkcji inicjalizacji timera należy dobrać odpowiedni preskaler i wpisać częstotliwość do zmiennej timer_hz, dodałem kod i informację w pierwszym poście.
Tabela częstotliwości zaczerpnięta jest z wikipedii. Ewentualne odchyłki wynikają z zaokrąglenia do liczby całkowitej przy przeliczeniu na licznik w funkcji
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zaokrąglenie dla timera 10kHz.
Przed i po dodaniu 0,5
38,22629969 38,72629969
34,04834866 34,54834866
30,33980583 30,83980583
28,63688431 29,13688431
25,51671345 26,01671345
22,72727273 23,22727273
20,24701357 20,74701357
19,11314985 19,61314985
Wartość przycinana do liczby całkowitej
Zaokrąglenie dla timera 100kHz
382,2629969 382,7629969
340,4834866 340,9834866
303,3980583 303,8980583
286,3688431 286,8688431
255,1671345 255,6671345
227,2727273 227,7727273
202,4701357 202,9701357
191,1314985 191,6314985
Widać więc, że wyższa częstotliwość timera oddaje częstotliwość nuty o rząd wielkości lepiej.
Ograniczenie wpisanej wartości wynika tylko z typu uint16_t dla tablicy i rzutowania w funkcji zmieniającej Hz na licznik.
Dziękuje za słowa uznania od Mistrza i reszty
