Подключение цифровой линейки к ардуино

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Spell, 9 мар 2018.

  1. Spell

    Spell Нерд

    Приобрёл я себе цифровую линейку на 200 мм https://www.banggood.com/0-200mm-0_...External-Display-p-1013030.html?rmmds=myorder и хотел подключить к компьютеру.
    Повелся я на рекламу, что там USB-порт. Оказалось, что он только геометрически USB. А на самом деле там тактируемый последовательный порт, который передает в формате 21-битного протокола. Т.е. просто воткнуть и прочитать данные не получится.
    Вообще линейка состоит из двух частей : датчика на линейке и цифрового индикатора.
    Датчик считывает положение с линейки и передает эти данные на индикатор через 21-битный протокол обмена. Индикатор пересчитывает эти данные в человеческую форму в мм или дюймы. Он же устанавливает 0.
    Фактически я пытаюсь сделать индикатор.
    Благодаря вот этой статье http://www.shumatech.com/web/21bit_protocol?page=0,0 мне удалось создать для ардуино процедуру, которая считывает эти данные. Если коротко, то полученный код надо разделить на 2560 и получится абсолютное значение в дюймах. Дальше, чтобы получить миллиметры, надо значение в дюймах умножить на 25,4.
    И вроде все работает. Но тут натолкнулся на ....
    В некоторой точке линейки (даже не по середине) передаваемое по интерфейсу значение доходит до 0. А следующая позиция становится 2097151. Это 2 в степени 21.
    При этом линейка нормально отображает данные на индикаторе. Т.е., видимо, так и задумано.
    А я туплю. Как это обсчитать?
    По считанным данным получается следующее:
    Точка 0 - 15227
    точка 151,08 мм - 0
    точка 151,09 - 2097151
    точка 200 мм - 2092220
    До точки 151.08 и после нее расчет значений подчиняется одному закону.

    Подкиньте идейку как правильно учесть этот переход через 0?

    ЗЫ. Простите, что много букв. Короче не получилось.
     
  2. Spell

    Spell Нерд

    Эх! Я сам допер.
    Все очень просто.
    Все большие числа после 0 - это отрицательные числа в дополнительном коде.
    Правда, есть тонкость. Т.к. код 21-битный, то укладывать его приходится в переменную типа long. А этот тип, как известно, занимает 4 байта, т.е. 32-битный.
    Поэтому, после чтения данных надо сделать проверку на установленный 21 бит (это означает, что число отрицательное), и в случае положительного ответа установить в 1 все биты старше 21 - го.
    Если этого не сделать, то число в 32-битном варианте получится не в дополнительном коде, и, соответственно, будет неправильно интерпретировано.
    После этого мы получаем линейную шкалу, где 2560 ед. шкалы = 1 дюйму (или 25,4 мм).
    Всё. Дальше дело техники. Можно без труда подключать эти линейки к компу хоть по сотне на один.
     
    b707 и mcureenab нравится это.
  3. DIYMan

    DIYMan Guest

    Скажите плз - как у вас с распиновкой получилось? В указанной вами статье http://www.shumatech.com/web/21bit_protocol?page=0,0 сказано, что первый контакт разъёма miniUSB линейки - это +, 4-й - минус, 2 и 3 - это тактирование и данные.

    Сейчас делаю проект для подключения семидюймового монитора к китайской линейке (линейка Shahe с али) - и по факту прозвонки и анализа плат оказалось, что распиновка совершенно другая: контакты 3 и 4 - это питание, а 1 и 2 - тактирование и данные.

    Кому верить? Чуется мне, что данные в статье по ссылке выше - приведены для оригинальной iGaging, а китайцы, как обычно - себе на уме.

    Короче: какая распиновка разъёма на вашей линейке?
     
  4. Spell

    Spell Нерд

    Кажется, у меня распиновка совпала с описанной. Я открыл блок на линейке, а там прямо на плате расписано, где какой вывод. Поэтому отталкивался уже от этой информации.
     
  5. sslobodyan

    sslobodyan Гик

    Проблема в том, что вы используете знаковую 4-байтную переменную, а нужно беззнаковую.
     
  6. ostrov

    ostrov Гуру

    Я осциллограф или анализатор юзаю чтоб понять где что, а потом уже с протоколом разбираюсь. Особенно с китайскими изделиями, у них с совпадением с правдой проблемы.
     
  7. DIYMan

    DIYMan Guest

    Аналогично. Юзал и осцилл, и анализатор. Без них - хрен бы разобрался, что к чему.
     
  8. Spell

    Spell Нерд

    Я так этот проект и не довел до конца. Острая необходимость отпала, так и забросил.
    А застрял на том, что у моего подключения на шине данных возникали какие-то странные импульсы шириной 47 нс. Возникают совершенно спонтанно. Иногда сразу после синхроимпульса. Иногда где-то посередине. Бывает, что и пачка идет. Из-за этого данные считываются не всегда корректно.
    Я так и не нашел причину. Причем, у родного устройства их нет. А у меня есть. И кондеры ставил. Все равно лезут импульсы.

    Кстати, ребята из Шахе уже какое-то время выпускают штангенциркули и др.измерители с устройством для подключения к компьютеру. Я с дуру заказал себе только устройство для подключения к компьютеру (без штангенциркуля). И оказалось, что оно не понимает устройства не Шахе. Видимо, формат данных другой. Но я не разбирался.
    А вместе комплект тысяч 5 стоит.