Arduino и RS422 энкодер
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Arduino и RS422 энкодер
Нет необходимости считывать DATA по прерыванию. Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.
Чудес не бывает. Бывают фокусы.
- N1X
- Мастер
- Сообщения: 3653
- Зарегистрирован: 16 фев 2015, 21:19
- Репутация: 1646
- Настоящее имя: Владимир
- Откуда: Беларусь, Гомель
- Контактная информация:
Re: Arduino и RS422 энкодер
Так а чем аппаратный SPI не угодил? Не подходит, или не смотрели?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino и RS422 энкодер
Редкий аппаратный SPI разумеет более 8 или 16 бит...N1X писал(а):Так а чем аппаратный SPI не угодил?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
Спасибо.Сергей Саныч писал(а):Нет необходимости считывать DATA по прерыванию. Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.
Наверное так попробую. Одна Ардуинка будет формировать CLOCK.
А вторая будет искать нужную длину импульсов, например тот самый tm(или tp) и считывать DATA и выводить на жк индикатор через SPI(такой есть в наличии).
Не смотрел и не понимаю пока ничего.N1X писал(а):Так а чем аппаратный SPI не угодил? Не подходит, или не смотрели?
Вообще мне местный кудесник, сказал следующее. Найди стандартные библиотеки RS422 или RS485 конвертируй и работай с ними, а я велик изобретаю
Если я правильно понимаю то DATA же должна считываться параллельно CLOCK в определённое время именно в (1,2) отрезок по картинке UAVpilot , или по моей картинке в момент t2.Сергей Саныч писал(а): Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
И именно поэтому раз программа делая CLOCK , должна отвлекаться на DATA тем самым будет вынужденна удлинять CLOCK, то бишь возникают противоречия.
И нельзя сформировать программке CLOCKа потом программке заниматься DATA, так как сигнал DATA уже прошёл.
Или я не прав
И только поэтому развязать две ардуинки и они будут делать параллельно и не зависимо друг от друга свои задачи.
Да и цены на них не великие, можно ещё одну воткнуть
Что я сейчас и пытаюсь сделать, не купив готовый счётчик SSI сигнала по конской цене(причём каждый раз, в случае повторения конструкции).
Такие мыслишки.
Поправьте меня плииз, где я ошибаюсь
- N1X
- Мастер
- Сообщения: 3653
- Зарегистрирован: 16 фев 2015, 21:19
- Репутация: 1646
- Настоящее имя: Владимир
- Откуда: Беларусь, Гомель
- Контактная информация:
Re: Arduino и RS422 энкодер
А какая разрядность DATA? Сколько бит?
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
24 бит
если быть точне-12бит на оборот+12бит на количество оборотов
если быть точне-12бит на оборот+12бит на количество оборотов
- N1X
- Мастер
- Сообщения: 3653
- Зарегистрирован: 16 фев 2015, 21:19
- Репутация: 1646
- Настоящее имя: Владимир
- Откуда: Беларусь, Гомель
- Контактная информация:
Re: Arduino и RS422 энкодер
Можно попробовать отработать и аппаратным SPI по прерыванию. Но тут нужен логический анализатор, чтобы смотреть, что в шине происходит. Если успевать забирать данные вовремя, то вполне возможно принять 3 байта подряд без пидимых пауз. Но это документацию на МК нужно читать 
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Arduino и RS422 энкодер
Можно. Чтение DATA не займет много времени, если непосредственно опрашивать регистры. И это время можно учесть при формировании CLOCK.Кулибин1437 писал(а):И нельзя сформировать программке CLOCKа потом программке заниматься DATA,
Он не прошел, а пришел. И будет в нужном состоянии, пока не придет следующий CLOCK, либо не истечет тайм-аут (t3).Кулибин1437 писал(а): так как сигнал DATA уже прошёл.
Это, мягко говоря, не так. От RS422 здесь только физический интерфейс, логика же совершенно другая.Кулибин1437 писал(а):Найди стандартные библиотеки RS422 или RS485
Чудес не бывает. Бывают фокусы.
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
спасибо.
Пардон. Написал бред похоже.
это же не паралельная , а последовательная выдача информации
.
По сути, этот самый t3 по всей вероятности можно сколь угодно сделать, достаточное для считывания, допустим 0,3-0,5сек. То есть сигнал DATA висит активный. пока не придёт следующая пачка CLOCK?Сергей Саныч писал(а):Он не прошел, а пришел. И будет в нужном состоянии, пока не придет следующий CLOCK, либо не истечет тайм-аут (t3).
Пардон. Написал бред похоже.
Последний раз редактировалось Кулибин1437 17 янв 2019, 11:14, всего редактировалось 1 раз.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Arduino и RS422 энкодер
Стоп. Тебе же надо каждый бит данных отдельно принять, после каждого импульса CLOCK. И "вручную" сложить из них 24-битное слово. А t3 - это интервал после всего слова данных. Он может быть сколь угодно длинным, а вот остальные интервалы ограничены по времени.Кулибин1437 писал(а):По сути, этот самый t3 по всей вероятности можно сколь угодно сделать, достаточное для считывания, допустим 0,3-0,5сек. То есть сигнал DATA висит активный. пока не придёт следующая пачка CLOCK?
Чудес не бывает. Бывают фокусы.
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
ага, я это и пытался сказать в сообщении выше(корректировал его).
Слушайте а в мобильной версии сайта, я чёто не неайду как входить, всё через ВК,Фейсбуки...а прямого входа не нашёл
Слушайте а в мобильной версии сайта, я чёто не неайду как входить, всё через ВК,Фейсбуки...а прямого входа не нашёл
-
nevkon
- Почётный участник

- Сообщения: 2471
- Зарегистрирован: 17 июл 2015, 10:25
- Репутация: 310
- Настоящее имя: Константин
- Откуда: Балаково (Саратовская обл.)
- Контактная информация:
Re: Arduino и RS422 энкодер
Проще всего сделать так:
1. В loop делаем анализ некоей переменной ready (boolean) - если она тру, то читаем бит данных, взводим clock и запускаем таймер прерывания, делаем ready=false. Добавляем бит в переменную (читать битовые операции).
2. В прерывании отключаем clock, отключаем таймер прерывания, ставим готовность данных (ready=true). В очередном loop данные считаются.
Есть прерывания срабатывающие по таймеру - его настроить на 1-5.5мкс.
зы. Могу дать логику, команды не подскажу - лень изучать.
1. В loop делаем анализ некоей переменной ready (boolean) - если она тру, то читаем бит данных, взводим clock и запускаем таймер прерывания, делаем ready=false. Добавляем бит в переменную (читать битовые операции).
2. В прерывании отключаем clock, отключаем таймер прерывания, ставим готовность данных (ready=true). В очередном loop данные считаются.
Есть прерывания срабатывающие по таймеру - его настроить на 1-5.5мкс.
зы. Могу дать логику, команды не подскажу - лень изучать.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino и RS422 энкодер
Или почти полностью аппаратный вариант:
Первый таймер настраивается на частоту CLOCK, в его прерывании читается состояние ноги DATA и кладётся в переменную на место соотв. порядкового бита, счётчик бит увеличивается. Как только положили в переменную последний бит, обнуляем счетчик бит, содержимое переменной переносим в результирующую, перезапускаем второй таймер.
Второй таймер настраивается на частоту опроса энкодера - по сигналу этого таймера запускается первый таймер.
В итоге в результирующей переменной всегда имеем актуальное значение, которое само обновляется. Программная часть получается минимальная: прочитать порт, записать результат.
Первый таймер настраивается на частоту CLOCK, в его прерывании читается состояние ноги DATA и кладётся в переменную на место соотв. порядкового бита, счётчик бит увеличивается. Как только положили в переменную последний бит, обнуляем счетчик бит, содержимое переменной переносим в результирующую, перезапускаем второй таймер.
Второй таймер настраивается на частоту опроса энкодера - по сигналу этого таймера запускается первый таймер.
В итоге в результирующей переменной всегда имеем актуальное значение, которое само обновляется. Программная часть получается минимальная: прочитать порт, записать результат.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
такое словоN1X писал(а):нужен логический анализатор, чтобы смотреть, что в шине происходит
Жду.
Поиграю им.
Потом с CLOCKом, и отпишусь, может даже похвастаюсь
Пока отодвинул это дело.
До конца недели должен прийти.
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
Привет всем.
И снова я))).
Пришёл ко мне цифровой анализатор через USB. И заодно получил Arduino DUE с 84мГц частотой.
С этими дорогими чудесными поделками китайцев стало совершенно другое дело.
Вчера занимался до 2х ночи, как в былые времена (когда паял всякие схемы)).
Теперь я могу увидеть творение программ.
Arduino DUE-шустрый зверюга, теперь можно программировать без прямого обращения к пинам.
По крайней мере пока нету индикатора, дальше видно будет.
Загрузил готовый скетч, найденный в просторах инета, уже не помню, откуда простите.
Вроде даже что-то менял, ещё до этого, особо не вникал пока.
Теперь тайминг “CLOCK” близкий к требованиям, по крайней мере, думаю достаточен.
И Вы не представляете, энкодер стал выдавать долгожданный “DATA”.
Только “DATA” почему то, в некоторых промежутках между пачками “CLOCK” остаётся в нулевом состоянии до прихода следующей серии “CLOCK”, стабильность не смог проследить.
Не понятненько.
Вот картинки с анализатора.
Сперва куча пачек импульсов растянуто до 0,3сек, как раз видно что “DATA” остался в нуле между 14 и 15 пачкой импульсов. теперь первая пачка импульсов поближе.
Кстати, только в начале этой пачки какие то отличающиеся длительности от других пачек. Сперва коротенький, а потом длинный.
вторая пачка импульсов
третья пачка
14-ая, уходящая в ноль “DATA”
15-я пачка, приходящая с нуля
Забыл, ещё пришлось согласовывать уровни 3,3в и 5в.
Теперь если всё правильно, то придётся по вашим рекомендациям лезть в биты.
Что может где-то не правильно делаю, рад вашей помощи.
Спасибо.
И снова я))).
Пришёл ко мне цифровой анализатор через USB. И заодно получил Arduino DUE с 84мГц частотой.
С этими дорогими чудесными поделками китайцев стало совершенно другое дело.
Вчера занимался до 2х ночи, как в былые времена (когда паял всякие схемы)).
Теперь я могу увидеть творение программ.
Arduino DUE-шустрый зверюга, теперь можно программировать без прямого обращения к пинам.
По крайней мере пока нету индикатора, дальше видно будет.
Загрузил готовый скетч, найденный в просторах инета, уже не помню, откуда простите.
Вроде даже что-то менял, ещё до этого, особо не вникал пока.
Теперь тайминг “CLOCK” близкий к требованиям, по крайней мере, думаю достаточен.
И Вы не представляете, энкодер стал выдавать долгожданный “DATA”.
Только “DATA” почему то, в некоторых промежутках между пачками “CLOCK” остаётся в нулевом состоянии до прихода следующей серии “CLOCK”, стабильность не смог проследить.
Не понятненько.
Вот картинки с анализатора.
Сперва куча пачек импульсов растянуто до 0,3сек, как раз видно что “DATA” остался в нуле между 14 и 15 пачкой импульсов. теперь первая пачка импульсов поближе.
Кстати, только в начале этой пачки какие то отличающиеся длительности от других пачек. Сперва коротенький, а потом длинный.
вторая пачка импульсов
третья пачка
14-ая, уходящая в ноль “DATA”
15-я пачка, приходящая с нуля
Забыл, ещё пришлось согласовывать уровни 3,3в и 5в.
Теперь если всё правильно, то придётся по вашим рекомендациям лезть в биты.
Что может где-то не правильно делаю, рад вашей помощи.
Спасибо.
- N1X
- Мастер
- Сообщения: 3653
- Зарегистрирован: 16 фев 2015, 21:19
- Репутация: 1646
- Настоящее имя: Владимир
- Откуда: Беларусь, Гомель
- Контактная информация:
Re: Arduino и RS422 энкодер
Дата не исключено, что остается в том положении, в котором он был при передаче последнего бита...
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Arduino и RS422 энкодер
Нет, в протоколе явное требование: data=1 в режиме ожидания.N1X писал(а):Дата не исключено, что остается в том положении, в котором он был при передаче последнего бита...
Можно попробовать паузу между пакетами увеличить...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
2 дня мучал, мучал, но пока результата с data=1 пока не особо получается.UAVpilot писал(а): Нет, в протоколе явное требование: data=1 в режиме ожидания.
Можно попробовать паузу между пакетами увеличить...
И увеличивал и уменьшал, результат не стабилен.
То в 1 переходит, то в "0" остаётся
Что-то энкодеру не нравиться по всей вероятности, наверняка CLOCK.
Я правда параллельно пытаюсь считывать эту самую data.
И сейчас мучаю другой скетч, где есть считывание бит, то есть старый скетч пока отложил.
Может быть как вариант, что как то влияют сопли, собрано то всё на макетке Arduino, а не пайкой.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Arduino и RS422 энкодер
PS: Понял, n+1-й CLOCK как раз и завершает обмен. Но на времянке от энкодера - n импульсов.
Чудес не бывает. Бывают фокусы.
-
Кулибин1437
- Новичок
- Сообщения: 35
- Зарегистрирован: 11 янв 2019, 07:51
- Репутация: 0
- Настоящее имя: Эдуард
- Откуда: г.Уфа
- Контактная информация:
Re: Arduino и RS422 энкодер
а вообще я правильно сформировал количество импульсов, вдруг какая нить банальная засада?
Ато у меня уже глаз замыливаеться
Ато у меня уже глаз замыливаеться