GyverLibs
GyverLibs copied to clipboard
джиттер в timerX_setPeriod
При установке нового значения периода, не учитывается текущее значение TCNTx. Таким образом в момент смены периода возможно получить импульс произвольной длительности. Критично например при управлении ШД - при разгоне будет срыв шагов. Фикс предлагается например такой: while(TCNT5 > (_timer5_top / 2)); ICR5 = _timer5_top - 1; возможно есть решение получше UPD: возможно проблема не в этом, а в не атомарном апдейте ICR регистра, надо покурить даташит. UPD2: Accessing 16-bit Registers: для записи 16 битных регистров используется временный регистр, который шарится между всеми таймерами, поэтому настоятельно рекомендуется запрещать прерывания на момент апдйта ICRx