Приобрёл я себе цифровую линейку на 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? ЗЫ. Простите, что много букв. Короче не получилось.
Эх! Я сам допер. Все очень просто. Все большие числа после 0 - это отрицательные числа в дополнительном коде. Правда, есть тонкость. Т.к. код 21-битный, то укладывать его приходится в переменную типа long. А этот тип, как известно, занимает 4 байта, т.е. 32-битный. Поэтому, после чтения данных надо сделать проверку на установленный 21 бит (это означает, что число отрицательное), и в случае положительного ответа установить в 1 все биты старше 21 - го. Если этого не сделать, то число в 32-битном варианте получится не в дополнительном коде, и, соответственно, будет неправильно интерпретировано. После этого мы получаем линейную шкалу, где 2560 ед. шкалы = 1 дюйму (или 25,4 мм). Всё. Дальше дело техники. Можно без труда подключать эти линейки к компу хоть по сотне на один.
Скажите плз - как у вас с распиновкой получилось? В указанной вами статье http://www.shumatech.com/web/21bit_protocol?page=0,0 сказано, что первый контакт разъёма miniUSB линейки - это +, 4-й - минус, 2 и 3 - это тактирование и данные. Сейчас делаю проект для подключения семидюймового монитора к китайской линейке (линейка Shahe с али) - и по факту прозвонки и анализа плат оказалось, что распиновка совершенно другая: контакты 3 и 4 - это питание, а 1 и 2 - тактирование и данные. Кому верить? Чуется мне, что данные в статье по ссылке выше - приведены для оригинальной iGaging, а китайцы, как обычно - себе на уме. Короче: какая распиновка разъёма на вашей линейке?
Кажется, у меня распиновка совпала с описанной. Я открыл блок на линейке, а там прямо на плате расписано, где какой вывод. Поэтому отталкивался уже от этой информации.
Я осциллограф или анализатор юзаю чтоб понять где что, а потом уже с протоколом разбираюсь. Особенно с китайскими изделиями, у них с совпадением с правдой проблемы.
Я так этот проект и не довел до конца. Острая необходимость отпала, так и забросил. А застрял на том, что у моего подключения на шине данных возникали какие-то странные импульсы шириной 47 нс. Возникают совершенно спонтанно. Иногда сразу после синхроимпульса. Иногда где-то посередине. Бывает, что и пачка идет. Из-за этого данные считываются не всегда корректно. Я так и не нашел причину. Причем, у родного устройства их нет. А у меня есть. И кондеры ставил. Все равно лезут импульсы. Кстати, ребята из Шахе уже какое-то время выпускают штангенциркули и др.измерители с устройством для подключения к компьютеру. Я с дуру заказал себе только устройство для подключения к компьютеру (без штангенциркуля). И оказалось, что оно не понимает устройства не Шахе. Видимо, формат данных другой. Но я не разбирался. А вместе комплект тысяч 5 стоит.