опрос lpt, подключение энкодера

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Сб окт 20, 2012 10:04:08

Сообщение seregka74 »

Насчет мыши я просто не знал что она не может быстро, просто подумал что готовый контроллер с драйверами, но увы облажался.
Насчет счетчиков и лпт, не могу сообразить алгоритм опроса
Считываем порт в потоке типа byte сравниваем с предыдущим значением если изменилось значит было вращение
Из текущего вычитаем предыдущее значение получаем смещение
Но вот вопрос как быть например с момента когда 255 перейдет в ноль?
Реклама
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Сб окт 20, 2012 10:04:08

Сообщение seregka74 »

Купил микросхему к155ие7 на выходы 2 и 3 поставил светодиоды, на 5 ногу единицу подавал и нифига, микр. было видно выпаена от куда то , похоже не исправна :(
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

На вход загрузки подать выс. уровень, на вход сброса - низкий. Ну и про питание не забыть.
Описание см. здесь http://www.microshemca.ru/IE6/
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

seregka74 писал(а):Но вот вопрос как быть например с момента когда 255 перейдет в ноль?
Главное -- опрашивать гарантированно чаще половины полного оборота счётчика.
Возьмём для простоты 3-битовый счётчик, он проходит состояния 0-7

Код: Выделить всё

0 1 3 4 5 6 7 0 1 2 3 4 5 6 7 0
        A   B   C
Пусть начальное положение A, вращение вперёд, следующие чтения B и C, каждое через два импульса.

Код: Выделить всё

B = 7 = 111
A = 5 = 101
B - A = 010 = 2

C = 1 = 001
B = 7 = 111
C - B = 010 = 2 -- да, тут был заём из старшего разряда, ни и ладно. Мы его прощаем.
Теперь крутим назад

Код: Выделить всё

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);
} 
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Сб окт 20, 2012 10:04:08

Сообщение seregka74 »

Спасибо за ОГРОМНОЕ! Очень нужный ресурс, на других только слушаешь понты какие они молодцы все знают и умееют, без какой либо реальной помощи, на выходных все обязательно попробую, сейчас бонально нет времени. Еще раз громадное вам спасибо!
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Есть одна особенность при каскадировании микросхем ИЕ7. Например первый счетчик досчитал до 1111, далее он обнуляется и посылает импульс переноса. Второй счетчик его подхватывает и увеличивает свое значение. Но сработает он не мгновенно, а через сколько то десятков наносекунд. Если именно в этот момент произвести чтение результата, то мы получим неверные данные. Хотя вероятность такого события невысока. Т.о. синхронным является только счетчик из одной микросхемы. Счетчик на 8 и более бит будет асинхронным.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

Ой, об этом я и забыл.
Более того, надо внимательно смотреть, будет ли каскадированный счётчик нормально работать с энкодером напрямую, как я писал выше. Хитрая логика с перекрёстными запретами, кажется. не распространяется на выходы переноса.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

Посмотрел структуру ИЕ6/ИЕ7 — таки там перекрёстный запрет входов +1/-1 есть только для счёта данной микросхемы, а на выходы переноса такой запрет не распространяется. Так что по простому работать каскадированный счетчи к энкодером не будет.
Я вспомнил, что искать, нашёл на полке, потом в интернете, чтобы самому не сканировать.
ВРЛ выпуск 67, «Счётчик расхода магнитной ленты».
Схема на странице 61.
Там из нужных перепадов сделали короткие импульсы и перекрёстный запрет сделали ло входов первой микросхемы, так что он влияет на всё.
Если у энкодера выходы уже нормальные, то микросхема D1 с триггерами Шмитта на входах не нужна (если убрать инверсию, то начнет считать в противоположном направлении).
Но и не помешает, если провода издали приходят. Только тогда имеет смысл поставить что-то поновее, в духе 74HC14. Заодно и их же вместо формирующих инвреторов DD2.1 DD2.2 после RC-цепочек для улучшения формы.

Что касается асинхронности переноса между микросхемами, то это можно подлечить прямым распространением счёта, перед входами следующих микросхем поставить элементы 555ЛЛ1 (74LS32, 74HC32), один из входов элемента на выход переноса предыдущего счётчика, второй -- на самый вход импульсов, параллельно соответствующему входу первой микросхемы.
Но если так возиться, то лучше уж взять 561ИЕ14 с цепочкой переноса и на входе преобразовать +1/-1 к направлению и счёту. Схема есть в том же Шило, на выдержку из которого по 155ИЕ6 давался линк выше. Она тоже неустойчива к покачиванию и дребезгу, но вроде сказано, что это не страшно.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

Проще скачать описание на оригинал, чем найти ссылку на Шило без кучи капч, ожиданий и «файл не найден» в конце.
В описании CD4029 на 4-той странице фига 11 с нужной схемой на 561ЛА7/555ЛА3.

Она «в два раза хуже» упомянутой уже схемы в том смысле, что та с половинкой триггера 561ТМ2 чувствительна к дребезгу/покачиванию только по одному входу энкодера, а эта из документации на микросхему — по обем :)))
Зато там два корпуса, хоть и по половинке, а в описании CD4029 одна ЛА-шка.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

на 5 ногу единицу подавал и нифига
Надо просто вспомнить особенность входа TTL-микросхем, у них переключение происходит ВЫТЕКАЮЩИМ током, а когда вывод висит в воздухе - на него бесполезно подавать лог.1, она и так там обеспечивается конструкцией логического элемента.
Правильней подавать лог.0 на вход ТТЛ нежели лог.1
Контактная информация:
Открыл глаза
Сообщения: 42
Зарегистрирован: Пт ноя 02, 2012 02:14:37

Сообщение Невский »

Раньше дипломное задание было (Ж/Д училище,СЦБ) с этой системой.
Изображение
Схема структурная и упрощённая(часть схемы) . На макете в релейном виде работала.
Смысл: по управлению подаются короткие импульсы, открывают ключ на драйвер и подаёт питание двигателя.
Двигатель приходит в вращение, до тех пор пока реперный диск не перекроет оптопару.
Питание на двигатель не поступает. он остановился. До следующего управляющего импульса.
Требования: малая инерционность двигателя и большой крутящий момент на старте (это уже менее важно)
Смысл: при точной подгонке репера и частоты и ширины импульса появляется эффект ШИМ-регулирования.
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Сб окт 20, 2012 10:04:08

Сообщение seregka74 »

Решил все очень просто с помощью arduino uno и аппаратного прерывания.
Ответить

Вернуться в «Интеграция с ПК»