Недавно нашел у себя в архивах программу спидометра на микроконтроллере. Года два назад ваял ее. И вот решил без особого разбора подробностей выставить ее. Если кто захочет думаю разберется без труда (тем более есть комментарии, а меню описал раньше), а если нет — отвечу на вопросы. Программа написана на CodeVisionAVR. Пересматривая ее недавно, обнаружил некоторые вещи, которые хочу изменить, поэтому буду ее переделывать и писать теперь уже в WinAVR. Да, еще, в железе данное устройство пока не испытывалось, поэтому в случае чего могут обнаружиться какие-то глюки (см. обновление внизу). Если кто, испробует это устройство в железе, просьба написать о результатах. Экран спидометра у меня выглядит вот так
При желании внешний вид можно немного изменять. Схема довольно простая
Обвязка по питанию не показана.
Для отладки модели в качестве датчика сигналов использовал генератор, с которого и подавал импульсы на входы МК INT1 и ICP1. С частотой генератора можно поэкспериментировать, у меня было примерно 1-10Гц. Частота МК от внутреннего RC — 2МГц.
Как же все это работает:
- Датчиком может служить геркон или любое другое устройство, которое выдает импульс при наступлении нужного события. Например, магнит на колесе проходит рядом с датчиком.
- Спидометр нужно откалибровать. Для этого заходим в меню и выбираем дистанцию на которой мы хотим провести калибровку — 1000 или 100м (сразу говорю — ручной не работает). В данном случае будет работать вход INT1. Подсчитав количество импульсов на 100м или 1000м мы определим длину колеса (калибровочный коэффициент), который и будем дальше использовать для подсчета скорости и расстояния. Этот коэффициент сохраняется в EEPROM, поэтому при следующем включении калибровать заново не придется.
- Чтобы измерить скорость сигнал подается на вход микроконтроллера ICP1, с помощью которого мы измеряем время между двумя импульсами, т.е. время за которое мы проедим наш калибровочный коэффициент
. Теперь мы можем посчитать скорость и вывести ее на экран.
- Настройки. В этом спидометре есть различные настройки по отображению информации:
- Скорость может отображаться в м/с или в км/ч. Точность в м/с — 0.1м/с. Точность в км/ч — 0.1км/ч. Минимальная скорость не знаю какая. Единственное, что могу сказать, если колесо делает один оборот больше двух секунд, тогда прибор покажет нулевую скорость.
- Дистанция есть общая, есть от точки. Отображается в км. Можем отображать на экране только одну из этих дистанций или и ту, и другую вместе. Точность — 10м.
- Общая дистанция сохраняется в EEPROM. Сбрасывается, если наездите 40000км.
- Сброс общей дистанции и от заданной точки. При сбросе общей дистанции прибор требует подтверждения, чтобы не удалить по ошибке.
- Секундомер. В приборе есть секундомер, который также мы можем отображать или нет. Запускается секундомер кнопкой Right, останавливается кнопкой Left, продолжение счета — Right, сброс — повторное нажатие Left.
- Все настройки сохраняются и после выключения.
Вот наверное и все, что нужно чтобы испытать устройство. В конце статьи приведена схема в Proteus’e, файл с программой и hex файл. Посмотрите, поклацайте менюшку, установите нужные настройки. В примере прибор откалиброван чисто условно.
Хочу еще сделать часы, а для этого подключу какие-нибудь часы реального времени. В дальнейшем буду периодически к этой программе возвращаться, подробно ее разбирать и писать программу теперь уже на WinAVR.
Обновлено 18.03.2011 Заметка о велосипедном спидометре
Здравствуйте уважаемый Dmitry Вот на днях собрал этот спидометр, спаял схему, прошил МК. все сразу заработало. Пощелкал по менюшке, установил нужные настройки. И вот что заметил что секундомер работает не по секундам, а медленнее, как это можно исправить? А еще конечно хотелось бы чтобы были еще часы. Сам большого опыта с програмированием не имею. Буду ждать обновления прошивки. Еще хотелось бы знать как подключить датчик холла к нему и какой?
А фьюзы надо ставить?
здесь делал для отработки спидометра и использовал внутренний генератор, но для более точного отсчета времени лучше установить внешний кварц, тогда и фьюзы нужно будет установить. Засек время. Действительно идет не точно секундомер. Сейчас лето и времени совсем нет, а вот где то осенью думаю переделаю и добавлю в схему часы реального времени для более точного времени. Датчик холла не подключал, поэтому пока посоветовать ничего не могу((
Подскажите новичку,как доработать под измерение оборотов в минуту?
Берете количество оборотов, которые посчитал счетчик, например, за одну минуту и делите на 60 сек. В результате получите обороты в секунду))) В этой программе нужно сделать таймер на какое нибудь заданное время и в обработчике брать значение счетчика и этого времени и подсчитывать)
Блин,что то ничего не выходит((((Помогите пожалуйста.
Как я понял там все дело в коэфициенте 16000.Если нет ,то поправьте.Было бы замечательно отдельную статью про измеритель оборотов.Что скажешь,автор???)))
что именно не получается?
я бы с удовольствием отдельную статью, но сейчас со временем большие проблемы((
Для калибровке нужно задать в меню переменную на диаметр колеса или один импульс, при 26 дюймах оборот колеса равен расстоянию ≈ 207.47 см. о тогда не важно на каком радиусе стоит магнит и датчик. Также поскольку очень много свободных портов то можно было бы сделать включение габаритов при наступлении сумерек, управление яркостью передней фары.
Подскажите пож. Если в Proteus ставить ваш HEX то моделирование идет нормально! А вот если компилировать заново из исходника в Codevision 2.04.4, получается лабуда (
А зачем делать очистку экрана в цикле?
Какой то здесь косяк — ножка (PD3/INT1) подсаживает входящие импульсы в «0». То ли её надо совсем отключить, то ли подключить через резистор 1-10к. Но как есть совсем не годится, только контролер от импульсов греется и питание поедается !!!
как подать импульс на вход (PD3/INT1), схема