Подключение цифрового штангенциркуля
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 24/07/2013 - 00:01
Здравствуйте!
Несколько дней назад в руки попался цифровой штангенциркуль с разъемом для вывода измерений. Решил подключить его к компьютеру через аналог платы Arduino (полностью совместимую). Штангенциркуль посылает данные в виде 2-х 24-битов, с паузой между ними в 110 микросекунд. График сигнала выглядит следующим:
Подключил штангенциркуль таким образом:
В скетч залил следующий код:
#define F_CPU 16000000UL #define CLOCK 2 #define DATA 4 #define TIMEOUT 200 volatile int bit_number = 0; volatile unsigned long abs_value = 0; volatile unsigned long rel_value = 0; volatile unsigned long last_interrupt = 0; volatile unsigned long present_interrupt = 0; void setup() { Serial.begin(115200); pinMode(CLOCK, INPUT); pinMode(DATA, INPUT); attachInterrupt(0, int0_interrupter, RISING); Serial.println("Connected."); } void int0_interrupter() { last_interrupt = present_interrupt; present_interrupt = micros(); if(bit_number <= 23) { if((~PIND) & (1 << DATA)) { abs_value |= (1 << bit_number); } } else { if((~PIND) & (1 << DATA)) { rel_value |= (1 << bit_number); } } bit_number++; } void loop() { if(bit_number == 48) { Serial.print(abs_value); Serial.print(" - "); Serial.println(rel_value); abs_value = 0; rel_value = 0; bit_number = 0; } else { if((present_interrupt - last_interrupt) >= TIMEOUT) { abs_value = 0; rel_value = 0; bit_number = 0; } } }
В итоге, Arduino ловит совершенно невменяемые данные. Подозреваю, что не выходит попасть на стартовый бит.
Уважаемые, знатоки, укажите пожалуйста на ошибки, либо посоветуйте в какую сторону "копать".
Подключил штангенциркуль таким образом:
Образы тут не к чему, а вот схема подключения была бы кстати.
Может плюсовой вывод на разъеме не просто так присутствует, который у вас подключен в никуда, а нужен что бы питать сей интерфейс.
http://habrahabr.ru/post/133088/
на сколько знаю ко всяиким цифровым ШЦ есть родная прога для считывания показаний
Программа возможно и есть, но не бесплатная. Да и дело даже не в ней. Напрямую штангенциркуль к компьютеру не подключается, т.к. несогласованы логические уровни. Следовательно присутствует блок, который и согласовывает и возможно уже обрабатывает данные.
В своей же схеме, для согласования логических уровней использовал триггер Шмитта - CD74ACT14E. Он на выходе дает четкие импульсы в 4,8 Вольта. Контакт "Питание +" не использовал, т.к. штангенциркуль питается от своей батареи SR44. Мои подозрения - Arduino не успевает считывать данные. Такое возможно?
В своей же схеме, для согласования логических уровней использовал триггер Шмитта - CD74ACT14E.
С чего бы вдруг триггер Шмитта вам должен согласовывать уровни??? Для согласования можно поствить пару ОУ, но никак не триггер Шмитта.
Мои подозрения - Arduino не успевает считывать данные. Такое возможно?
Нет не может.
Контакт "Питание +" не использовал, т.к. штангенциркуль питается от своей батареи SR44.
Перечитайте еще раз сообщение #1 и не поленитесь перейти по ссылке, прочитать статью и перейти по ссылке на которую ссылается автор и почитайте как проще всего правильно согласовать уровни дуины со штангенциркулем http://www.instructables.com/id/Reading-Digital-Callipers-with-an-Arduino-USB/?ALLSTEPS.
Однако ж поднимает логическую "1" до оптимальной для Arduino. Единственное, иногда появляется "хвост" у тактового сигнала (CLK), длинной около 100 микросекунд и амплитудой до 2 Вольт. Но подобный глюк нахожу и на контакте самого штангенциркуля (разумеется с соответствующей амплитудой - около 0,5 Вольта).