Дата последнего изменения документа - 7 февраля 2009г.
Да что тут сложного, скажете Вы! Умножить на 1609,344. Я тоже так думал, пока не приобрел в магазине подозрительно дешевую беговую дорожку. В процессе ее сборки дома, отметил, что сама дорожка сделана вполне добротно, чего нельзя было сказать о входящем в ее комплект "бортовом" компьютере. Этот самый компьютер представлял из себя пластмассовую коробочку черного цвета без опознавательных знаков. На индикаторе он отображал время "гонки", текущую скорость, пройденное расстояние. Радостно прыгнув на дорожку я побежал, нет - лучше сказать понесся со всей мочи, но почему-то "бортовому" компьютеру так не казалось, или он сознательно занижал мою скорость? В мою дотошную душу закралось сомнение в объективности компьютера, я сполз с дорожки, замерил рулеткой длину резинового ремня дорожки, и, уже спокойно шагая по дорожке, отсчитал энное количество пройденных мною метров. Так и есть - компьютер был наверняка американский - он считал пройденный путь в милях!
Можно было, конечно, смириться, можно было сделать новый компьютер :), но ведь мы с Вами простых путей не ищем, правда? Вот и я решил, "обрусить", так сказать, американский компьютер. На обдумывание идеи ушло пол-дня, в результате родилась вот эта архи-сложная схема:
Получился своего рода "переходник", который включается между герконовым датчиком дорожки и входом датчика компьютера. Сразу скажу, что контроллер я выбрал "нерачительно" только потому, что такой контроллер был под рукой. Здесь гораздо уместнее использовать контроллер попроще, подешевле и с меньшим количеством выводов. Конденсатор нужен для подавления дребезга контактов, без него компьютер будет считать неправильно. На порт B контроллера включены внутренние подтягивающие резисторы, генератор использован тоже внутренний. Контроллер с буквой L в обозначении может работать при пониженном напряжении, так что вся конструкция питается от двух штатных батареек самого компьютера. Программа была написана на языке C, компилятор HI-TECH lite (свободно распространяемый). А вот, собственно, сама программа:
#include <htc.h> unsigned int Buf; void init(void) { // port directions: 1=input, 0=output TRISB = 0b11111111; TRISA = 0b00000000; OPTION = 0b00000000; //Прерывание по заднему фронту, резисторы на порту В включены !! INTCON = 0b11010000; //Разрешение прерывания от INT PORTA = 0; PORTB = 0; } void main(void) { char counter; init(); for(counter=1; counter<=3; counter++){ //Этот цикл нужен только для отладки RA2=1; //чтобы понять, что мк включился RA3=0; //моргнет светодиодами, если их подключить _delay(190000); //к RA2 и RA3 _delay(190000); RA2=0; RA3=1; _delay(190000); _delay(190000); } RA2=1; while (1){ //Основной цикл программы if (Buf >= 1000) { Buf=Buf-1000; RA2=0; RA3=0; _delay(10000); //задержка нужна для формирования RA2=1; //прямоугольного импульса на выходе RA3=1; _delay(10000); } } } void interrupt isr(void) { Buf=Buf+1609; //В принципе, этой константой можно управлять погрешностью +- INTF=0; // Сбросить флаг прерывания }
Как видите, программа получилась тоже необыкновенно сложной :). Идея такая: по приходу импульса с герконового датчика в подпрограмме прерывания к переменной Buf прибавляем 1609, а в основном цикле программы постоянно проверяем, если Buf больше или равно 1000, то вычитаем 1000 и формируем импульс, который подаем на выход (на компьютер). Таким образом, работа устройства не зависит от количества импульсов на метр (километр) пути, а импульсов на выходе нашего "переходника" всегда будет больше, чем на входе.
Два слова об отладке программы. Мне пришлось подбирать временные задержки в основном цикле программы. Дело в том, что, если они будут слишком большие, то при быстрых скоростях переменная Buf будет переполняться, а если будет слишком маленькая, то "бортовой" компьютер не будет успевать обрабатывать приходящие на него импульсы. В том и в другом случае компьютер будет показывать неверные результаты. Подбирал я эти задержки чисто экспериментальным методом, потому что не знал параметры моего "бортового" компьютера.
Здесь прошивка в HEX-формате.
Буду рад, если Вы пришлете мне свои отзывы и предложения на gsmhorn@narod.ru.
И последнее:
Автор не несет никакой ответственности за возможную порчу Вашего автомобиля или
беговой дорожки, и за любые
другие негативные последствия, возникшие вследствие Вашего необдуманного решения
повторить данную конструкцию.
(C) Ilya Permyakov, 2009