Master писал(а):Ни и что с разгоном и торможением не ясно? Таблиц универсальных кажется нету нуна смотреть характеристики определенного ШД.
Что не ясно... ну, по порядку:
1. При занесении новых значений в регистры TCNTх необходимо ли запрещать прерывания???
2. TIM1 имеет два 8bit регистра TCNT1H TCNT1L, стартовое число в TIM1 16bit-ное. Изменять скорость скачком я думаю не корректно, движок будет дергаться да и драйвер будет от этого не в восторге. Возникла идея менять скорость нарастанием, по шагам. С каждым шагом частота прерываний увеличивается/уменьшается до необходимой.
Код этой функции еще не полностью готов - вымучиваю
Я с С только только начал знакомится.
Выкладываю черновик:
- Код: Выделить всё • Развернуть
void speed_change (void){
int REG; //REGistr startovogo 4isla
#asm("cli")
if(TCNT1H!=0x6F && TCNT1L!=0xFE){//esli skorost menee 100Hz
REG = (int)TCNT1H<<8; //zapolnenie 8-16 bitov REG
REG |= (int)TCNT1L; //zapolnenie 0-7 bitov REG
REG = REG + 0x6C0; //uveli4enie skorosti "Y" 10-100Hz za ~12 shagov
TCNT1L = REG; //vybor dannyh 0-7 bita iz REG dlja TCNT1L
REG=REG>>8; //zdvig bitov v REG s 8-12 na 0-7
TCNT1H=REG; //vybor bitov 0-7 dlja TCNT1H
//ustanovit 4astotu srabatyvanija TIM1 (skorost' dvizhenija po Y)
#asm("sei")
}
Сомнение вызывают строки с 3 по 12
3. Как по грамотному должно выглядеть условие переключения по переднему/заднему фронту взведенного/сброшенного бита?
if(
) while(
)
Предпологаю что где-то необходимо организовать виртуальный регистр выставленных битов, и каждое изменение бита сравнивать с его (регистра) содержанием.