Насчет мыши я просто не знал что она не может быстро, просто подумал что готовый контроллер с драйверами, но увы облажался.
Насчет счетчиков и лпт, не могу сообразить алгоритм опроса
Считываем порт в потоке типа byte сравниваем с предыдущим значением если изменилось значит было вращение
Из текущего вычитаем предыдущее значение получаем смещение
Но вот вопрос как быть например с момента когда 255 перейдет в ноль?
Купил микросхему к155ие7 на выходы 2 и 3 поставил светодиоды, на 5 ногу единицу подавал и нифига, микр. было видно выпаена от куда то , похоже не исправна
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
K L M
L = 1 = 001
K = 3 = 011
L - K = 110 = -2
M = 7 = 111
L = 1 = 001
M - L = 110 = -2
110 это "минус два" в двоичной системе с дополнительным кодом (а именно в ней работают «чуть менее, чем все» современные компьютеры) для 3-разрядного числа, которое в знаковом виде даёт числа от -4 до +3. +3 меньше половины полного оборота в 8 импульсов, потому и надо опрашивать чаще.
Так что для 8-битного счётчика нужно делать вычитание и получившийся результат рассматривать как 8-битное знаковое число, уже из 8-битного знакового расширять до 32-битного знакового или какой там нужен результат. Что-то в духе:
#include <stdint.h>
int32_t current_position;
// инициализировать при запуске программы текущим значением через read_encoder_counter()
int8_t prev_encoder_value;
void update_position()
{
int8_t n, p;
p = prev_encoder_value;
n = read_encoder_counter();
prev_encoder_value = n;
// тут обязательно приведение к int8_t, а к int32_t оно приведёт само.
current_position += (int8_t)(n - p);
}
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Спасибо за ОГРОМНОЕ! Очень нужный ресурс, на других только слушаешь понты какие они молодцы все знают и умееют, без какой либо реальной помощи, на выходных все обязательно попробую, сейчас бонально нет времени. Еще раз громадное вам спасибо!
Есть одна особенность при каскадировании микросхем ИЕ7. Например первый счетчик досчитал до 1111, далее он обнуляется и посылает импульс переноса. Второй счетчик его подхватывает и увеличивает свое значение. Но сработает он не мгновенно, а через сколько то десятков наносекунд. Если именно в этот момент произвести чтение результата, то мы получим неверные данные. Хотя вероятность такого события невысока. Т.о. синхронным является только счетчик из одной микросхемы. Счетчик на 8 и более бит будет асинхронным.
Ой, об этом я и забыл.
Более того, надо внимательно смотреть, будет ли каскадированный счётчик нормально работать с энкодером напрямую, как я писал выше. Хитрая логика с перекрёстными запретами, кажется. не распространяется на выходы переноса.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Посмотрел структуру ИЕ6/ИЕ7 — таки там перекрёстный запрет входов +1/-1 есть только для счёта данной микросхемы, а на выходы переноса такой запрет не распространяется. Так что по простому работать каскадированный счетчи к энкодером не будет.
Я вспомнил, что искать, нашёл на полке, потом в интернете, чтобы самому не сканировать. ВРЛ выпуск 67, «Счётчик расхода магнитной ленты».
Схема на странице 61.
Там из нужных перепадов сделали короткие импульсы и перекрёстный запрет сделали ло входов первой микросхемы, так что он влияет на всё.
Если у энкодера выходы уже нормальные, то микросхема D1 с триггерами Шмитта на входах не нужна (если убрать инверсию, то начнет считать в противоположном направлении).
Но и не помешает, если провода издали приходят. Только тогда имеет смысл поставить что-то поновее, в духе 74HC14. Заодно и их же вместо формирующих инвреторов DD2.1 DD2.2 после RC-цепочек для улучшения формы.
Что касается асинхронности переноса между микросхемами, то это можно подлечить прямым распространением счёта, перед входами следующих микросхем поставить элементы 555ЛЛ1 (74LS32, 74HC32), один из входов элемента на выход переноса предыдущего счётчика, второй -- на самый вход импульсов, параллельно соответствующему входу первой микросхемы.
Но если так возиться, то лучше уж взять 561ИЕ14 с цепочкой переноса и на входе преобразовать +1/-1 к направлению и счёту. Схема есть в том же Шило, на выдержку из которого по 155ИЕ6 давался линк выше. Она тоже неустойчива к покачиванию и дребезгу, но вроде сказано, что это не страшно.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Проще скачать описание на оригинал, чем найти ссылку на Шило без кучи капч, ожиданий и «файл не найден» в конце.
В описании CD4029 на 4-той странице фига 11 с нужной схемой на 561ЛА7/555ЛА3.
Она «в два раза хуже» упомянутой уже схемы в том смысле, что та с половинкой триггера 561ТМ2 чувствительна к дребезгу/покачиванию только по одному входу энкодера, а эта из документации на микросхему — по обем
Зато там два корпуса, хоть и по половинке, а в описании CD4029 одна ЛА-шка.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Надо просто вспомнить особенность входа TTL-микросхем, у них переключение происходит ВЫТЕКАЮЩИМ током, а когда вывод висит в воздухе - на него бесполезно подавать лог.1, она и так там обеспечивается конструкцией логического элемента.
Правильней подавать лог.0 на вход ТТЛ нежели лог.1
Раньше дипломное задание было (Ж/Д училище,СЦБ) с этой системой.
Схема структурная и упрощённая(часть схемы) . На макете в релейном виде работала.
Смысл: по управлению подаются короткие импульсы, открывают ключ на драйвер и подаёт питание двигателя.
Двигатель приходит в вращение, до тех пор пока реперный диск не перекроет оптопару.
Питание на двигатель не поступает. он остановился. До следующего управляющего импульса.
Требования: малая инерционность двигателя и большой крутящий момент на старте (это уже менее важно)
Смысл: при точной подгонке репера и частоты и ширины импульса появляется эффект ШИМ-регулирования.