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( 

 )
Предпологаю что где-то необходимо организовать виртуальный регистр выставленных битов, и каждое изменение бита сравнивать с его (регистра) содержанием. 
