Предлагаю всем желающим собрать новую, более модернизированную версию устройства, которая теперь включает в себя следующие функции:
- индикации текущего времени с применением более точной микросхемы RTC DS3231 (на Ali)
- измерения температуры двигателя с помощью датчика PT-100 (на Ali)
- измерения температуры окружающего воздуха с помощью DS18B20 или с помощью датчика температуры, встроенного в микросхему реального времени
- измерения напряжения бортовой сети (со шкалой) 7 — 16В
- измерения частоты вращения коленчатого вала двигателя (со шкалой) 300 — 9900 об/мин
- измерения скорости движения 0 — 255 км/ч
- одометры: суточный с возможностью сброса, и общий; запись в энергонезависимую память микроконтроллера
Шрифты, отображающие температуру и обороты двигателя увеличены, а часов — уменьшены.

Так же устройство имеет дополнительные функции, такие как
- автоматическая смена яркости подсветки дисплея в зависимости от внешнего освещения (более плавная по сравнению с предыдущей версией устройства)
звуковые и визуальные:
- индикация включенных указателей поворота
- предупреждение о слишком низком или недопустимо высоком напряжениях бортовой сети
- предупреждение о перегреве двигателя
- есть возможность отключить звук
настройки:
- программная калибровка вольтметра
- установка верхнего и нижнего порогов предупреждений для контроля напряжения бортовой сети
- установка порога предупреждения о перегреве двигателя
- настройка параметров «длина окружности колеса» и «кол-во магнитов» для датчика скорости мотоцикла; для автомобильного датчика «длина окружности колеса» устанавливается 100 см, а «кол-во магнитов» — количество импульсов на 1 метр
- установка значения «импульс/оборот» для тахометра, и возможность указать максимальные обороты, при которых шкала будет полностью заполнена
- установка уровня яркости подсветки для дневного и ночного времени
Для настроек и управления добавлена 3-я кнопка «—», уменьшающая параметр. Добавлен быстрый перебор устанавливаемого параметра при длительном удержании кнопки. Печатная плата разведена под размер дисплея и его контакты, а питание устройства и входные сигналы выведены на одну сторону платы.

Схема уже довольно большая, но на самом деле ничего сложного в ней нет.

Основа — микроконтроллер ATmega64, вывод информации — графический дисплей 128х64 точек с контроллером KS0108 и звуковой излучатель типа 1212FXP обязательно со встроенным генератором. Питание цифровых элементов — на стабилизаторе 7805, микроконтроллер питается отдельно (линия U1_VCC) через диод Шоттки D2, и в момент отключения питания от бортовой сети, срабатывает детектор выключения на R1 и R2 — программа обработки прерывания INT5 записывает значения одометров в энергонезависимую память. В это время микроконтроллер питается энергией, накопленной конденсатором C4. Все остальное — обработка входящих сигналов транспортного средства, кратко о них в статье предыдущей версии. JP1 — джампер переключения в режим программирования — во время прошивания МК вывод PEN нужно подтянуть к GND. Разъём J1 ISP — для внутрисхемного программирования. Фьюзы выставляются следующим образом:

По фьюзам хочу дать совет тем, кто мало знаком или впервые работает с AVR микроконтроллерами. Чтобы не «запороть» камень, в любой программе (PonyProg, Khazama AVR Programmer и т.п.), делается так: сначала считываем фьюзы, смотрим, отмечен ли SPIEN галочкой; если да, то фьюзы ставим как на картинке в статье, если нет — выставляем инверсно. Правильно собранная схема с прошитым микроконтроллером в настройке не нуждается и запускается сразу. Разве что нужно покрутить RV1 для установки контрастности дисплея и RV2 для калибровки датчика температуры двигателя. Для этой цели был выбран датчик PT-100, — стоит он недорого, позволяет измерять, в отличие от DS18B20, температуры более +125°С и выглядит примерно так:

Измерение температуры окружающего воздуха (или если кому надо — внутри салона) может осуществляться двумя способами: с помощью встроенного в микросхему часов датчика или внешнего DS18B20. Чтобы измерять датчиком из DS3231, на разъем ISP нужно поставить перемычку (джампер) как на фотографии, подтянув линию TEMP_SENS к GND. Для измерения цифровым внешним датчиком, его нужно подключить к тому же разъему программирования (ISP) согласно полярности (VCC, GND), а линию TEMP_SENS (на ISP она совпадает с MOSI) к выводу DQ датчика.

Печатная плата изготавливается из двухстороннего фольгированного текстолита.



Кнопки располагаются на отдельной плате со шлейфом и разъемом для подключения:

Управление осуществляется следующим образом. В основном режиме:
— кнопка M/SEL/HR при длительном удержании вводит устройство в режим установки времени — часы устанавливаются этой же кнопкой, минуты — ENT/+/MIN.
— кнопка ENT/+/MIN при коротком нажатии сбрасывает суточный одометр, но не сразу. На месте счетчика появляется вопрос «Сброс?», подтверждаем кнопкой M/SEL/HR. Если не подтвердить, то через 3-4 секунды устройство вернется в нормальный режим. Общий одометр сбросить кнопками нельзя. Если нужно обнулить или выставить начальное значение пробега, надо считать программатором EEPROM из микроконтроллера, общий пробег содержится в 4-х байтах, начиная с 16-й ячейки (выделено красным):

При этом они расположены от младшего к старшему. То есть если брать пример с картинки выше, в красном прямоугольнике записано число 01 6A (00 00 01 6A) в шестнадцатеричном формате, что соответствует десятичным 362 км пробега. Редактируем считанный файл EEPROM, выставляя нужный пробег. Прошиваем.
— кнопка «—» при коротком нажатии включает-выключает звук на устройстве. При выключенном звуке справа от часов появляется значок перечеркнутого динамика.
Чтобы попасть в меню настроек, нужно произвести включение устройства с зажатой кнопкой M/SEL/HR:

выбор пункта осуществляется той же кнопкой M/SEL/HR
вход в выбранный пункт — с помощью ENT/+/MIN
установка параметра с помощью ENT/+/MIN и «—«
При первом входе в меню некоторые значения могут быть 255 или 65535 — это следствие того, что ячейки энергонезависимой памяти еще пусты. Нужно установить адекватные параметры настроек и выйти из меню выбрав пункт «Сохранить и выйти».
К статье прикреплены 2 архива. Первый содержит прошивки для версий устройства со спидометром-одометром и без них, проект Proteus, файл печатной платы в формате LAY. Второй содержит прошивку, печатную плату и проект для этого же устройства, только с дисплеем разрешением 192×64 точек. Места на нем предостаточно, поэтому шкала и цифры тахометра и скорости, заметно больше:



В ближайшее время планирую добавить функцию измерения уровня топлива с калибровкой — для этого на платах устройств уже зарезервированы входы на незадействованные половины операционных усилителей. Прошивки обязательно добавлю в эту статью.
Список радиоэлементов
| Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
|---|---|---|---|---|---|---|
| U1 | МК AVR 8-бит | ATmega64A | 1 | |||
| U2 | Часы реального времени (RTC) | DS3231 | 1 | Корпус SOIC-16 | ||
| U3 | Операционный усилитель | LM358 | 1 | |||
| U4 | Линейный регулятор | L7805AB | 1 | L7805C2T, L7805AB2T | ||
| U5 | Датчик температуры | DS18B20 | 1 | |||
| U6 | Вентиль | CD4093B | 1 | Корпус DIP-14 | ||
| LCD1 | LCD-дисплей | LCM12864 | 1 | С контроллером KS0108 | ||
| Q1, Q2 | Биполярный транзистор | PMBS3904 | 2 | |||
| D1 | Стабилитрон | BZV55C5V1 | 1 | |||
| D2 | Диод Шоттки | 1N5819 | 1 | |||
| D3 | Диод Шоттки | SK24 | 1 | |||
| D4, D6, D7 | Стабилитрон | BZV55C4V7 | 3 | |||
| D5 | Выпрямительный диод | 1N4148 | 1 | |||
| X1 | Кварцевый резонатор | 12MHz | 1 | |||
| LS1 | Звуковой излучатель | 1212FXP | 1 | 12V со встроен. генератором | ||
| BAT1 | Батарейка | CR2032 | 1 | |||
| Держатель для батареек | CR2032 | 1 | ||||
| Кнопка тактовая | IT-1102w | 3 | ||||
| R1 | Резистор | 7,5 кОм | 1 | Все резисторы SMD 1206 или 0805 | ||
| R2 | Резистор | 2.7 кОм | 1 | |||
| R3, R7, R9, R10 | Резистор | 4.7 кОм | 4 | |||
| R4 | Резистор | 22 кОм | 1 | |||
| R5 | Резистор | 3.3 кОм | 1 | |||
| R6, R12, R19, R28 | Резистор | 1 кОм | 4 | |||
| R8, R11, R15, R18, R24, R25 | Резистор | 10 кОм | 6 | |||
| R13, R21 | Резистор | 200 Ом | 2 | |||
| R14 | Резистор | 15 кОм | 1 | |||
| R16 | Резистор | 22 Ом | 1 | |||
| R17 | Резистор | 30 кОм | 1 | |||
| R20 | Резистор | 47 кОм | 1 | |||
| R22 | Резистор | 500 кОм | 1 | GL5516 фоторезистор | ||
| R23 | Резистор | 470 кОм | 1 | |||
| R26, R27 | Резистор | 100 кОм | 2 | |||
| RV1 | Подстроечный резистор | 10 кОм | 1 | |||
| RV2 | Подстроечный резистор | 2 кОм | 1 | |||
| С1-С3, С6, С7, С9, С10, С15, С16 | Конденсатор | 0.1 мкФ | 9 | SMD конденсаторы 1206 или 0805 | ||
| С4 | Конденсатор | 1000 мкФ x 6.3 В | 1 | |||
| С5 | Конденсатор | 220 мкФ x 16 В | 1 | |||
| С8 | Конденсатор | 100 мкФ x 6.3 В | 1 | |||
| С11, С12 | Конденсатор | 22 пФ | 2 | |||
| C13, C14 | Конденсатор | 0.33 мкФ | 2 | |||