Мини-панель приборов на дисплее LCM12864 и ATmega64

Предлагаю всем желающим собрать новую, более модернизированную версию устройства, которая теперь включает в себя следующие функции:

  • индикации текущего времени с применением более точной микросхемы 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