Работаю с абсолютным датчиком угла, т.е. выдающим не приращение, а угловые координаты, при запросе. Информация выдается в виде 30 битного кода, 16 бит-угол, 14 бит - количество оборотов. Процедура получения информации и приведение ее к угловой корости - это процедура обработки прерывания от таймера (получение информации с частотой 1кГц). Собственно вот она:
Код
void TimerInterrupt(){
long RAZ;// otsch;//, _w_enk;
unsigned short otsch, ob;
++step;
//fl = 1;
ob = DATIn14();
otsch = DATIn16();
_oborot = ob;
RAZ = otsch - otschet;
otschet = otsch;
if (RAZ < -32768) {RAZ =+ 65536;} // обработка перехода через 0 в положительном направлении
if (RAZ > 32768) {RAZ =- 65536;} // обработка перехода через 0 в отрицательном направлении
w_enk = (RAZ*0.0054931640625)/0.001;...........}
условие
(RAZ < -32768) получается исходя из максимальной скорости вращения (ну пол оборота за 0.001 сек она не может быть никак).
Проблема: в определенные моменты времени при наличии угловой скорости RAZ становится равным -65535. Если угловая скорость постоянна то такая ошибка выдается примерно через равные отрезки времени.
Помогите, где ошибка?
и независимо от результатов

Работаю на LPC2114. Компилятор IAR.
Сообщение отредактировал Alex_rav(зеленинький я есть) - May 25 2007, 08:27