Деление чисел
- Войдите на сайт для отправки комментариев
В ходе работ выяснилось, что операции деления ОЧЕНЬ гадят в адекватность работы устройства.
Проблема с следующем...
Ногой одного Наны (9) Таймером1 генерируем частоту = 1000 Гц.
Сигнал с оной пущен на пару ног второго Наны (7 и 8). На этих ногах висит обработчик прерывания, связанного с ними, который кидает флаги, что событие для данной ноги (digitalRead) произошло, а далее в цикле (loop) происходит обработка флагов - идет расчет интервалов входящих сигналов (в данном случае они одинаковы, т.к. у них один источник).
Далее, рассчитывается средняя частота для обрабатываемых сигналов (ActiveAxleInterval):
ActiveAxleInterval = (2*ActiveLeft_Pin_In_Interval*ActiveRight_Pin_In_Interval)/(ActiveLeft_Pin_In_Interval+ActiveRight_Pin_In_Interval);
где ActiveLeft_Pin_In_Interval и ActiveRight_Pin_In_Interval - соответственно интервалы входящей пары сигналов.
Как результат - генерируем Таймером1 на 10 ногу второго Наны сигнал с частотой = средней от частоты входящей пары.
НО! Если ее генерировать используя период = ActiveLeft_Pin_In_Interval или ActiveRight_Pin_In_Interval, то разброс частот - на уровне погрешности. Если же в качестве периода использовать ActiveAxleInterval, то разброс вырастает в разы.
Количество исполняемых операций при этом одинаково - разница лишь в выборе параметра, задающего период.
Помогите, пожалуйста, найти ошибку. :(
А типы переменных ActiveLeft_Pin_In_Interval и ActiveRight_Pin_In_Interval какие?
Все = unsigned long, но переполнения по значению нету.
Попробуте так
Попробуте так
Или так
Пардон, ошибку нашел - был закомментирован расчет средней. А уже было желание разбить нану апстену. :)