проблема с функцией tone

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Здраствуйте, проблема следующая - нет необходимой точности частоты сигнала, точнее при задании частоты например 20000 Гц, все хорошо, если задать 20001, 20002 и так далее до 20010 всегда генерируется 20000 Гц, а потом скачком переходит на 20010 Гц. С чем это связано? И есть ли пути обхода?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

semaawp, частота рассчитывается путём деления тактовой частоты МК на целочисленный делитель и ещё раз на два. Что б не делить на два возьмём частоту 8МГц.  К примеру если мы делим 8000000 на 400 то получим ровно 20000 Герц. Следущий делитель 399.   8МГц/399 =20050 Т.е. чем выше частота тем крупнее будет шаг. Путь обхода один -использовать DDS синтез. Но он займёт все ресурсы МК, т.е. ничего другого МК делать не сможет.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Спасибо за доходчивый ответ)) значит на более низких частотах и погрешность меньше будет?
То есть выходит что в районе от 31 гц, до 1 с чемто кгц погрешность должна исчезнуть?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

semaawp, на частотах до 3кГц погрешность будет менее 1Герца.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Благодарю, такая погрешность меня вполне удовлетворяет))
И еще у меня вопрос про дефайны, разумно ли заменить глобальные константы на дефайны? Или есть свои ньюансы?