Есть часть кода от примера с таймером. Подскажите, как буде называться процедура обработчика для него? Код (C++): // настроить таймер void initTimer() { TCCR1A = 0; // CTC по OCR1A, делитель /64 TCCR1B = bit(WGM12) | 0b011; } // установить период void setPeriod(uint32_t prd) { // один тик таймера - 4 мкс (при 16 МГц клоке) OCR1A = (uint32_t)prd >> 2; } // запустить и сбросить таймер void startTimer() { TIMSK1 = bit(OCIE1A); TCNT1 = 0; } // остановить таймер void stopTimer() { TIMSK1 = 0; TCNT1 = 0; } ISR() ?
вектор входа прерывания? Так их несколько. Рокки выше привел таблицу с их списком. Счётчик таймера останавливается и запускается установкой значения предделителя, а не регистром TIMSK. Последний заведует прерываниями.
Однако, есть у меня непонимание работы с шаговым. есть двигатель типа нема 17. Есть драйвер к нему ТБ6600. Есть понимание (из художественной литературы) о том, что чем чаще я даю команду на вращение tick(), тем лучше. Но ведь есть, наверно, какой то разумный предел этой частоте. у меня сейчас по прерыванию это делается с частотой 15000 герц. Не дофига ли? на двигатель я даю скорость 18000 шагов. как, вообще, математически можно рассчитать все эти моменты? на драйвере стоит делитель 8. если я переключаю на другие делители, бывает, двигатель встает, или сильно греется.
Потому что его раскручивать надо постепенно, а не сразу 15 килогерц пхать ему в глотку, от этого он давится и плачет.
а так же есть мысль о том, что при каждом изменении скорости, он начинает стартовать заново, с нуля. Как это победить?
а ещё есть калькулятор расчёта максимально возможной скорости шаговика. не факт, что он даже с разгоном ваши 15000 скушает....