Этот штангенциркуль я купил себе давным давно на ебее. Ну работал я им как все нормальные люди, а потом случайно наткнулся на 4-х пиновый разъем спрятанный под крышечкой. Ну и разумеется у меня возникло желание узнать для чего всё это надо. Как в последствии оказалось через этот интерфейс штангенциркуль непрерывно посылает результаты своих измерений. Вооружившись паяльником и осциллографом я стал раскуривать протокол по которому наш девайс шлёт данные. И вот что из этого получилось.
Интерфейс у него состоит из 4-х проводников. Питание (1.5в), клок, данные, земля. Разумеется нам надо три последних, ибо полтора вольта питания нам ни к чему. Изобретать свой разъем мне было лениво, и я взял паяльник и просто подпаялся к контактным площадкам. Распиновка разъема моего штангенциркуля такая:
Если у вас немного другой штангенциркуль, то лучше самому проверить осциллографом где какой сигнал. А то мало ли чего там китайцы намудрили, я например встречал в сети другие распиновки. Ну а если нет осциллографа то методом научного тыка. Землю легко найти просто прозвонив по очереди каждый из четырёх контактов и минусовой контакт к которому подключается батарейка. И когда будете паять проводки то лучше вытащить её на всякий случай. Ну вот казалось бы теперь остается только подключить его к контроллеру, и с аппаратной частью на этом всё. Ан нет! Есть проблемка с логическими уровнями. Максимум что может выдать штангенциркуль с его крохотной батареечкой это полтора вольта. До логической единицы явно не дотягивает. Поэтому я решил усилить логическую единицу до пяти вольт при помощи несложной схемки на двух транзисторах:
Конечно данная схема инвертирует сигнал, но нас это мало волнует т.к. прошивку мы пишем сами и учесть в ней инверсию сигнала совсем не сложно. Использовать мегу32 для такого проекта слишком жирно. Хватит и обычной тини2313 с тактированием от кварца. Если затактировать от встроенного RC генератора, то могут возникнуть проблемы с передачей данных через UART. При изменении температуры или напряжения питания, частота этого генератора будет плавать и соответственно данные будут передаваться в компьютер с ошибками. В моей версии я использовал обычный COM порт. При желании можно выкинуть весь преобразователь RS-232 <-> UART на микросхеме max232 и поставить вместо него USB <-> UART. Например, вот такой у меня уже давно работает в отладчике JTAG ICE. Теперь с аппаратной частью покончено и настало время поговорить о протоколе по которому штангенциркуль выдает данные. По началу он взорвал мне мозг, а потом оказалось что всё очень просто. Для начала посмотрим на осциллограмму:
Не трудно догадаться что верхний сигнал это данные, а нижний тактовый сигнал. Паузы через каждые 4 бита ввели меня в заблуждение, я аццки затупил и не догадался что это самый обычный SPI! И в результате сам того не осознавая замутил программную реализацию этого интерфейса :-) Такие посылки данных штангенциркуль выдает 4 раза в секунду. Каждая посылка состоит из 3 байт. Сначала передается младший байт. Внутри байта порядок следования бит тоже начинается с младшего. Первым приходит младший бит а затем страшие. Первые два байта содержат непосредственно данные об измерениях в сотых долях миллиметра. Третий байт содержит бит-признак отрицательного числа. На осциллограмме штангенциркуль передает число 6,75 мм. Как получить это число: Для начала вспомним, что считанные данные нужно инвертировать . В результате из считанного 00111010 10111111 11111111
получаем 11000101 01000000 00000000
. Старший байт сразу можно отбросить, так как его 4-й бит сброшен, а значит результат измерений положительный. Вспоминаем, что порядок байт и бит внутри них обратный. Переворачиваем и получаем 00000010 10100011
. Теперь переводим это в десятичную систему счисления и получаем число 675. Делим его на сто и получаем результат в миллиметрах. По идее можно уже в виде этих трех байт передавать результаты в комп, и заставить его расшифровывать их, но я пошел дальше и сделал вывод в нормальном виде. Результаты измерений можно просматривать в любой терминальной программе хоть в Hyper Terminal. Нужно только поставить правильный номер COM порта и выбрать скорость 9600. Стоит отметить что выдача результатов измерения происходит не постоянно, а только когда результат нового измерения отличается от предыдущего. Для более удобного просмотра результатов измерений был написан небольшой софт. По идее, он готов показать всё что приходит в порт. Сам порт нужно предварительно выбрать в окне настроек которое вызывается щелчком по главному окну программы:
Ну а для тех кому мало картинок и фотографий то вот еще небольшой ролик показывающий как оно работает:
А зачем это вообще нужно? Хм… хороший вопрос ! Я делал это just for fun, ну а на практике такое может пригодится например в самодельных станках с ЧПУ, ну или еще где-нибудь где нужно цифровое измерение чего либо. Варианты применения, вопросы и предложения принимаются в комментариях.
Круть, молодец =)) Долго задавался вопросом, нафига там интерфейс, но даже твои труды не внесли ясности.
Medved Reply:
апреля 26, 2011 at 18:31
Кстати в инете нашел картинку, там в эту дыру подключается табло с большими цифрами =)
Для чего козе баян?
Зачем штангель к компу подключать…
Medved Reply:
апреля 26, 2011 at 18:44
Ради спортивного интереса. Мне лично не особо это нужно. Но тем кто делает самодельные станки с ЧПУ инфа должна быть полезной.
juray Reply:
апреля 27, 2011 at 00:42
А как же логирование при проведении кучи однотипных измерений?
Карандашом в блокнотик заколебёшься строчить.
Ага, загуглил и тоже нашел. И опять таки не понял, нахрена это надо, ведь на дисплее штангеля даже цифры больше)))
Medved Reply:
апреля 26, 2011 at 18:45
Наверное смысл в том что сам штангель устанавливается в труднодоступном месте и читать показания не удобно. И выносное табло в данном случае рулит!
Ну разве что)))
Блин, не могу ответить прямо на твое сообщение.
Medved Reply:
апреля 26, 2011 at 18:56
Пипец блин. Я давно это подозревал… А щас можешь?
MM Reply:
апреля 26, 2011 at 18:58
Тест.
Да, могу. А что подозревал?
Medved Reply:
апреля 26, 2011 at 19:01
Подозревал что пользователи не могут отвечать на комментарии. Ну теперь всё ок значит! :-)
MM Reply:
апреля 26, 2011 at 19:04
У Алексокарата, я видел, так можно было, кстати.
Orcinus Orca Reply:
мая 11, 2011 at 13:30
Тут не Алексократ, а движок сайта позволяет подобное делать. Движки — ВордПресовские. Кстати, Медвед обнови движок, а то задолбал ругаться, что обновления требуются.
Medved Reply:
мая 11, 2011 at 14:17
Как бы сайт не перекосоёбило после обновления :-)
Работает да и ладно. У ДиХальта вообще движок старинный. не обновляет по той же причине!
MM Reply:
мая 11, 2011 at 16:31
Ну так у него движок такой же, я это имел ввиду.
гм. А зачем там вообще нужно цифровое табло?
Скоро в линейку будут встраивать микроконтроллеры….
Medved Reply:
апреля 27, 2011 at 18:29
Цифровой штангенциркуль гораздо удобнее обычного. Особенно если сотые доли миллиметра измеряет.
На каком языке программа для компьютера написана?
Medved Reply:
апреля 27, 2011 at 18:28
На visual basic
ikhbin Reply:
мая 9, 2011 at 11:21
А исходник программы на visual basic глянуть можно?
Medved Reply:
мая 9, 2011 at 12:13
Да конечно можно! Только там быдлокод :-)
http://zalil.ru/31002318
ikhbin Reply:
мая 10, 2011 at 09:20
Что-то не могу проект открыть. И исполняемый файл не запускается.
Medved Reply:
мая 10, 2011 at 09:37
Скомпилировано в Microsoft Visual Basic 6.0
А что за ошибка при запуске исполняемого файла?
ikhbin Reply:
мая 10, 2011 at 14:43
С mscomm32.ocx какие-то неполадки или проблемы.
Medved Reply:
мая 10, 2011 at 14:46
Скачай http://www.avrdevices.ru/Firmware/DigitalCaliper.zip
В папке СОФТ есть решение проблемы. Должно помочь
Интересное исследование. Спасибо. Жаль только осцилла нету у меня)
С цифрового дисплея быстрее и точнее считывать информацию.
С обычными делениями нужно порядка 2-3 сек. и более. А с дисплея 0,2 сек.
Точность ты сразу видешь размер и тебе не надо что-то складывать и вычитать.
Так что цифровой дисплей это хорошо.
Применение:
к примеру: автоматическая линия по контролю качества деталей. Задаётся дипазон в котором деталь годная и если размер в детали не попадает в годную, то и идет сигнал на на сброс детали в брак.
ещё вариант: при контроле размеров необходимо собирать и обрабатывать статистику, чтобы понимать сколько брака, какие отклонения размеров. Это позволит быстро обрабатывать данные и принимать меры если надо.
Также в автомобильной промышленности наверно вы знаете идут комплекты на машину скажем комплект 1, 2, 3, 4 и т.д. в каждом комплекте детали подобраны таким образом, чтобы зазоры были минимальны. Следовательно это новшество позволит быстро сортировать детали по нужным комплектам.
И ещё море других вариантов.
Brain on.
На счет практического применения — то тот кто связан с производством такое применение измерительных средств оценит по достоинству (взяв за основу данную разработку — вполне реально соорудить пост для работника ОТК)
Остальное — свобода фантазии и рукоприкладства.
Хочу штангель с блюе тусом. Обмеряешь, к примеру какую-то железяку, а данные автоматом заносятся в таблицу. Надо только продумать удобный пользовательский интерфеец.
Medved Reply:
августа 16, 2011 at 11:25
Да это не проблема же!
Или ещё — можно сделать плагин для КАДов, который будет хватать данные со штангеля и подставлять куда надо. Или просто фоновое приложение, которое будет эти данные копировать в виндоый буфер. Это же сколько косяков удастся избежать, которые часто бывают из-за обычных опечаток.
Medved Reply:
августа 16, 2011 at 12:17
И это не проблема =)
Многоуважаемый Медвед, выложи, пожайлуста, сюда точную фамилию твоего штангеля. Я давно думал купить подобную щтуковину, но теперь согласен только на такой, как у тебя. Ибо неизвестно, есть ли у других какой-то интерфейс для вывода данных. И, если даже он есть, то он может оказаться непохожим на твой, и тогда придётся самому его расколдовывать.
Medved Reply:
октября 28, 2011 at 20:05
Увы ни каких опознавательных знаков нету. Просто какой то китайский нонэйм штангель
Накопал еще один интерфейс ШЦ-комп на коте http://www.compendiumarcana.com/caliper/ Вожусь с переброской кода в avrgcc под 2313. Немогу понять что в микропасскале делает этот оператор: SREG_I_BIT=1;
Medved Reply:
ноября 30, 2011 at 15:15
Эта строчка устанавливает бит I в регистре SREG (глобально разрешает прерывания)
kan Reply:
декабря 1, 2011 at 20:03
Ага понял это sei(), спасибо.
Частота передачи значения на самом деле ограничена 4 раза по 3 байта (96 бита/с) или все таки максимальная частота передачи измерения может быть выше (если скорость интерфейса 9600 бит/с)?
P.S. Допустим значения длины меняются 400 раз в секунду с минимальным шагом в 10 мкм
Medved Reply:
декабря 7, 2011 at 20:44
Ни каких точных цифр не скажу так как не знаю. Знаю что результат измерения он выплёвывает не далеко мгновенно но довольно быстро (по человеческим меркам).
zurdo Reply:
декабря 7, 2011 at 20:55
Если исходить из скорости 9600 бит/с и трех байт на одно измерение, то около 400 раз в секунду. Задержка даже не так важна, как частота.
Нувот! Разжился таки наконец этим замечательным девайсом. Теперь встала во весь рост задача подключения к кампутеру. Но хочется, чтобы он при этом оставался автономным. Т. е., никаких верёвок, только дистанционно. Теперь проблема — как реализовать. Вот думаю, нужен ли тут Bluetooth, или всё гораздо проще? Ведь штангель должен только передавать, причём довольно медленно и только нули и единицы. Может быть, просто сделать примитивный генератор на 1 транзюке и передавать 1цы на одной частоте, а нули на другой? Ну, или как-то ещё, не заморачиваясь ни на какие протоколы и не покупая никаких Bluetooth-модулей. Ведь передавать-то надо всего ничего — 4 байта за раз и, к тому же — на расстояние не больше 2..3 метра.
Medved Reply:
января 15, 2012 at 23:08
Ну блютус это уж слишком круто. на худой конец пару дешевых радиомодулей или сам можешь попробовать запилить! Гугли «однокомандную аппаратуру радиоуправления».
У одной харьковской фирмы (не буду рекламировать) есть готовое решение по передаче результатов измерений по проводам и различным беспроводным интерфейсам в т.ч. Bluetooth, Wi-fi и на частоте 400МГц. Как-то юзал ШЦЦ, подключался подобно описанию из статьи т.е. через преобразователь (с USB в COM). ПО дает возможность передавать результаты однократного измерения, или через определенный интервал времени. Также прога загоняет результаты в Excel формируя протокол измерений.
А прошить штангенциркуль возможно? где взять прошивку? у меня дисплей моргает!
Сделал все, как написано и нарисовано. Не работает, светодиод мигает(при перемещении штангеля), а в проге одни нули, что сделать? Очень нужен данный девайс.
Извиняюсь все сделал. Бракованный COM порт попался в магазине.