fk0, легенда (28.09.2010 17:59, просмотров: 189) ответил mazur на Первое - Я добиваюсь максимального быстродействия. Задача стоит-частота импульсов, с запасом, 30 кгц. После моих триггеров импульсы только при движении либо вперед либо назад. На вибрацию не реагирует (если вдруг такой момент будет, когда при
Всё реально, только выбор непосредственно atmega88 и ассемблера -- НЕАДЕКВАТ по нынешним временам. На счёт триггеров ниасилил, на кой они. Если верхняя скорость энкодера лимитирована (сам пишешь 30кгц) то 600 тактов на прерывание тебе хватит более чем.
У меня было аналогичное изделие, где атмега32 крутила двигатель и имела вход для энкодера с ним связанного и ещё оптопар. Оптопары опрашивались без прерываний (и Z тоже), а вот энкодер было важно точно сосчитать, без пропусков. Использовались как раз прерывания по изменению состояния (не по-уровню, а именно по изменению состояния) входов -- выходов двух фаз (сдвинутых на 90 град.) энкодера, цифровые естесственно (ну там код грея на 2 бита, иначе можно сказать, везде так). Проблема дребезга она в общем-то решена в коде грея (за счёт сдвига фаз на 90) -- после прерывания по ножке 1 на ней прерывания запрещались и воспринимались только прерывания на ножке 2, и наоборот. Это решало проблему дребезга (когда диск колеблется около одной точки, на угол меньший чем 1 риска энкодера, и не крутится) и ограничивало частоту прерываний частотой вращения диска... Алгоритм там в прерывании не сложный -- понять вперёд провернулись на риску (+1) или назад на две (-2), добавить к счётчику и всё. Тактовая частота 8Мгц (встроенное, без кварца), скорость -- 9600 смен фаз сигнала на оборот, может 10 об/с (частота прерываний ~ до 100КГц). Написано на GCC без применения ассемблера... работало, проблем с пропуском не было.
[ZX]