Страница 3 из 5

Re: Arduino и RS422 энкодер

Добавлено: 16 янв 2019, 16:42
Сергей Саныч
Нет необходимости считывать DATA по прерыванию. Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.

Re: Arduino и RS422 энкодер

Добавлено: 16 янв 2019, 17:57
N1X
Так а чем аппаратный SPI не угодил? Не подходит, или не смотрели?

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 00:35
Serg
N1X писал(а):Так а чем аппаратный SPI не угодил?
Редкий аппаратный SPI разумеет более 8 или 16 бит...

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 07:29
Кулибин1437
Сергей Саныч писал(а):Нет необходимости считывать DATA по прерыванию. Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.
Спасибо.
Наверное так попробую. Одна Ардуинка будет формировать CLOCK.
А вторая будет искать нужную длину импульсов, например тот самый tm(или tp) и считывать DATA и выводить на жк индикатор через SPI(такой есть в наличии).
N1X писал(а):Так а чем аппаратный SPI не угодил? Не подходит, или не смотрели?
Не смотрел и не понимаю пока ничего.
Вообще мне местный кудесник, сказал следующее. Найди стандартные библиотеки RS422 или RS485 конвертируй и работай с ними, а я велик изобретаю :wik:
Сергей Саныч писал(а): Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если я правильно понимаю то DATA же должна считываться параллельно CLOCK в определённое время именно в (1,2) отрезок по картинке UAVpilot , или по моей картинке в момент t2.
И именно поэтому раз программа делая CLOCK , должна отвлекаться на DATA тем самым будет вынужденна удлинять CLOCK, то бишь возникают противоречия.
И нельзя сформировать программке CLOCKа потом программке заниматься DATA, так как сигнал DATA уже прошёл.
Или я не прав :wik: :thinking:
И только поэтому развязать две ардуинки и они будут делать параллельно и не зависимо друг от друга свои задачи.
Да и цены на них не великие, можно ещё одну воткнуть :lol: , хотя понятно что лучше сэкономить.
Что я сейчас и пытаюсь сделать, не купив готовый счётчик SSI сигнала по конской цене(причём каждый раз, в случае повторения конструкции).
Такие мыслишки.
Поправьте меня плииз, где я ошибаюсь :roll:

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 08:36
N1X
А какая разрядность DATA? Сколько бит?

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 08:50
Кулибин1437
24 бит
если быть точне-12бит на оборот+12бит на количество оборотов

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 09:38
N1X
Можно попробовать отработать и аппаратным SPI по прерыванию. Но тут нужен логический анализатор, чтобы смотреть, что в шине происходит. Если успевать забирать данные вовремя, то вполне возможно принять 3 байта подряд без пидимых пауз. Но это документацию на МК нужно читать :)

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 09:44
Сергей Саныч
Кулибин1437 писал(а):И нельзя сформировать программке CLOCKа потом программке заниматься DATA,
Можно. Чтение DATA не займет много времени, если непосредственно опрашивать регистры. И это время можно учесть при формировании CLOCK.
Кулибин1437 писал(а): так как сигнал DATA уже прошёл.
Он не прошел, а пришел. И будет в нужном состоянии, пока не придет следующий CLOCK, либо не истечет тайм-аут (t3).
Кулибин1437 писал(а):Найди стандартные библиотеки RS422 или RS485
Это, мягко говоря, не так. От RS422 здесь только физический интерфейс, логика же совершенно другая.

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 10:39
Кулибин1437
спасибо.
Сергей Саныч писал(а):Он не прошел, а пришел. И будет в нужном состоянии, пока не придет следующий CLOCK, либо не истечет тайм-аут (t3).
По сути, этот самый t3 по всей вероятности можно сколь угодно сделать, достаточное для считывания, допустим 0,3-0,5сек. То есть сигнал DATA висит активный. пока не придёт следующая пачка CLOCK?

Пардон. Написал бред похоже. :lol: это же не паралельная , а последовательная выдача информации :) .

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 11:02
Сергей Саныч
Кулибин1437 писал(а):По сути, этот самый t3 по всей вероятности можно сколь угодно сделать, достаточное для считывания, допустим 0,3-0,5сек. То есть сигнал DATA висит активный. пока не придёт следующая пачка CLOCK?
Стоп. Тебе же надо каждый бит данных отдельно принять, после каждого импульса CLOCK. И "вручную" сложить из них 24-битное слово. А t3 - это интервал после всего слова данных. Он может быть сколь угодно длинным, а вот остальные интервалы ограничены по времени.

Re: Arduino и RS422 энкодер

Добавлено: 17 янв 2019, 11:16
Кулибин1437
ага, я это и пытался сказать в сообщении выше(корректировал его).
Слушайте а в мобильной версии сайта, я чёто не неайду как входить, всё через ВК,Фейсбуки...а прямого входа не нашёл

Re: Arduino и RS422 энкодер

Добавлено: 18 янв 2019, 14:31
nevkon
Проще всего сделать так:
1. В loop делаем анализ некоей переменной ready (boolean) - если она тру, то читаем бит данных, взводим clock и запускаем таймер прерывания, делаем ready=false. Добавляем бит в переменную (читать битовые операции).
2. В прерывании отключаем clock, отключаем таймер прерывания, ставим готовность данных (ready=true). В очередном loop данные считаются.
Есть прерывания срабатывающие по таймеру - его настроить на 1-5.5мкс.
зы. Могу дать логику, команды не подскажу - лень изучать.

Re: Arduino и RS422 энкодер

Добавлено: 18 янв 2019, 23:11
Serg
Или почти полностью аппаратный вариант:
Первый таймер настраивается на частоту CLOCK, в его прерывании читается состояние ноги DATA и кладётся в переменную на место соотв. порядкового бита, счётчик бит увеличивается. Как только положили в переменную последний бит, обнуляем счетчик бит, содержимое переменной переносим в результирующую, перезапускаем второй таймер.
Второй таймер настраивается на частоту опроса энкодера - по сигналу этого таймера запускается первый таймер.
В итоге в результирующей переменной всегда имеем актуальное значение, которое само обновляется. Программная часть получается минимальная: прочитать порт, записать результат.

Re: Arduino и RS422 энкодер

Добавлено: 22 янв 2019, 13:24
Кулибин1437
N1X писал(а):нужен логический анализатор, чтобы смотреть, что в шине происходит
такое слово :wtf: заказал :roll: .
Жду.
Поиграю им.
Потом с CLOCKом, и отпишусь, может даже похвастаюсь :hehehe: .
Пока отодвинул это дело.
До конца недели должен прийти. :cheesy:

Re: Arduino и RS422 энкодер

Добавлено: 27 янв 2019, 10:32
Кулибин1437
Привет всем.
И снова я))).
Пришёл ко мне цифровой анализатор через USB. И заодно получил Arduino DUE с 84мГц частотой.
С этими дорогими чудесными поделками китайцев стало совершенно другое дело.
Вчера занимался до 2х ночи, как в былые времена (когда паял всякие схемы)).
Теперь я могу увидеть творение программ.
Arduino DUE-шустрый зверюга, теперь можно программировать без прямого обращения к пинам.
По крайней мере пока нету индикатора, дальше видно будет.
Загрузил готовый скетч, найденный в просторах инета, уже не помню, откуда простите.
Вроде даже что-то менял, ещё до этого, особо не вникал пока.
Теперь тайминг “CLOCK” близкий к требованиям, по крайней мере, думаю достаточен.
И Вы не представляете, энкодер стал выдавать долгожданный “DATA”.
Только “DATA” почему то, в некоторых промежутках между пачками “CLOCK” остаётся в нулевом состоянии до прихода следующей серии “CLOCK”, стабильность не смог проследить.
Не понятненько.
Вот картинки с анализатора.
Сперва куча пачек импульсов растянуто до 0,3сек, как раз видно что “DATA” остался в нуле между 14 и 15 пачкой импульсов.
0,3сек.png (2015 просмотров) <a class='original' href='./download/file.php?id=155523&mode=view' target=_blank>Загрузить оригинал (107.46 КБ)</a>
теперь первая пачка импульсов поближе.
Кстати, только в начале этой пачки какие то отличающиеся длительности от других пачек. Сперва коротенький, а потом длинный.
1 пачка.png (2015 просмотров) <a class='original' href='./download/file.php?id=155524&mode=view' target=_blank>Загрузить оригинал (111.3 КБ)</a>

вторая пачка импульсов
2.png (2015 просмотров) <a class='original' href='./download/file.php?id=155526&mode=view' target=_blank>Загрузить оригинал (107.29 КБ)</a>

третья пачка
3.png (2015 просмотров) <a class='original' href='./download/file.php?id=155528&mode=view' target=_blank>Загрузить оригинал (112.13 КБ)</a>

14-ая, уходящая в ноль “DATA”
14 пачка.png (2015 просмотров) <a class='original' href='./download/file.php?id=155530&mode=view' target=_blank>Загрузить оригинал (109 КБ)</a>

15-я пачка, приходящая с нуля
15 пачки из нуля.png (2015 просмотров) <a class='original' href='./download/file.php?id=155531&mode=view' target=_blank>Загрузить оригинал (111.06 КБ)</a>


Забыл, ещё пришлось согласовывать уровни 3,3в и 5в.
Теперь если всё правильно, то придётся по вашим рекомендациям лезть в биты.
Что может где-то не правильно делаю, рад вашей помощи.
Спасибо.

Re: Arduino и RS422 энкодер

Добавлено: 27 янв 2019, 22:39
N1X
Дата не исключено, что остается в том положении, в котором он был при передаче последнего бита...

Re: Arduino и RS422 энкодер

Добавлено: 27 янв 2019, 23:28
Serg
N1X писал(а):Дата не исключено, что остается в том положении, в котором он был при передаче последнего бита...
Нет, в протоколе явное требование: data=1 в режиме ожидания.
Можно попробовать паузу между пакетами увеличить...

Re: Arduino и RS422 энкодер

Добавлено: 29 янв 2019, 09:04
Кулибин1437
UAVpilot писал(а): Нет, в протоколе явное требование: data=1 в режиме ожидания.
Можно попробовать паузу между пакетами увеличить...
2 дня мучал, мучал, но пока результата с data=1 пока не особо получается.
И увеличивал и уменьшал, результат не стабилен.
То в 1 переходит, то в "0" остаётся
Что-то энкодеру не нравиться по всей вероятности, наверняка CLOCK.
Я правда параллельно пытаюсь считывать эту самую data.
И сейчас мучаю другой скетч, где есть считывание бит, то есть старый скетч пока отложил.
Может быть как вариант, что как то влияют сопли, собрано то всё на макетке Arduino, а не пайкой.

Re: Arduino и RS422 энкодер

Добавлено: 29 янв 2019, 09:51
Сергей Саныч
А почему в пачках по 25 импульсов CLOCK (считая по положительному фронту), а не по 24?
PS: Понял, n+1-й CLOCK как раз и завершает обмен.
Ssisingletransmission.jpg (1951 просмотр) <a class='original' href='./download/file.php?id=155691&mode=view' target=_blank>Загрузить оригинал (64.19 КБ)</a>
Но на времянке от энкодера - n импульсов.
Энкодер САХ60 тайминг.jpg (1951 просмотр) <a class='original' href='./download/file.php?id=155692&mode=view' target=_blank>Загрузить оригинал (40.91 КБ)</a>

Re: Arduino и RS422 энкодер

Добавлено: 29 янв 2019, 19:09
Кулибин1437
а вообще я правильно сформировал количество импульсов, вдруг какая нить банальная засада?
Ато у меня уже глаз замыливаеться :wik: