Недавно нашел у себя в архивах программу спидометра на микроконтроллере. Программа написана на 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.
[hidepost] Proteus+C_файл+HEX_файл [/hidepost]