Дата последнего изменения документа - 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