Pišem osnovno knjižnico za koračne motorje (Znane knjižnice ne ustrezajo, ker imam specifične zahteve) in sem naletel na problem.
Imam narejen void, ki nastavi hitrost motorja:
- Koda: Izberi vse
void stepper::setSpeed(uint16_t steps_per_second){
OCR1B = (125000 / steps_per_second) - 1;
}
Problem je, ker se vrednost registra ne posodablja.
Mogoče kdo ve zakaj?
Tukaj je še en primer, ko nastavi CS12:0 bite, da zažene timer:
- Koda: Izberi vse
void stepper::startMoving(){
TCCR1B |= (1 << CS12);
}
Ko kličem to funkcijo se timer ne zažene. Enako je z zaustavitvijo timerja in ostalimi void-i.
Če pa to naredim pri inicializaciji, pa deluje (zakomentirana vrstica):
- Koda: Izberi vse
stepper::stepper(uint16_t step_n){
_step_n = step_n;
DDRB |= (1 << 1);
TCCR1B |= (1 << WGM12);
TCCR1A |= (1 << COM1A0);
OCR1A = 0xFFFF;
TIMSK1 |= (1 << OCIE1A);
//TCCR1B |= (1 << CS12);
sei();
}