Модернизация бортового компьютера на ATmega8

После публикации статьи Бортовой компьютер (часы, 2-хканальный термометр, вольтметр на ATmega8 и LCD 16х2) прошел уже почти год, и за это время я получил много писем с просьбами изменить прошивку под нужды пользователей. В основном нужно было добавить в устройство такие функции как предупреждения о низком уровне заряда аккумуляторной батареи, перегреве охлаждающей жидкости двигателя, измерение остатка топлива в баке. Но для одних напряжение на аккумуляторе, например, 11.9 В считается предельно низким, другие могут позволить разрядиться батарее до 10.7 В. Кто-то считает двигатель перегретым уже при 95°С, а кто-то при 105. Потому я решил добавить в схему устройства кнопки, организовать меню с настройками, чтобы каждый мог настроить БК под себя и теперь имеет следующие функции:

  • индикация текущего времени
  • измерение температуры двигателя
  • измерение напряжения бортовой сети
  • измерение остатка топлива в баке

Из дополнительных функций устройство имеет:

  • установку порога предупреждения о перегреве (90 — 125°С)
  • установку порога предупреждения о низком уровне заряда аккумуляторной батареи (10.0 — 12.0В)
  • калибровку штатного датчика уровня топлива (0 — 70Л)
  • установку инерционности индикации уровня топлива (2 — 10)
  • установку порога предупреждения о низком уровне оставшегося топлива (1 — 20Л)
  • настройку яркости подсветки дисплея
  • возможность отключения звуковых предупреждений

Схема состоит из распространенных и недорогих радиоэлементов:

Как видно, предусмотрена защита от переполюсовки — диод SK24, вместо него можно поставить любой другой Шоттки или вообще его не ставить, если уверены, что при сборке однажды случайно неверно подадите питание, перепутав полярность. RV1 — подстройка измеряемого напряжения. RV2 — штатный датчик уровня топлива типа БМ150 сопротивлением 330 Ом при пустом баке. Про RV3 скажу чуть позже. RV4 устанавливает контраст дисплея. 

Печатная плата:

На ней предусмотрен 6-пиновый разъём IDC-06 для внутрисхемного программатора USBASP, а так же штыревые разъёмы для подключения датчиков температуры и уровня топлива, разъём для подключения кнопок. В прикрепленном архиве есть файл в формате Sprint Layout, в котором подписаны все элементы.

Почти готовая плата:

При пайке элементов, для удобства, сначала нужно запаять все проводные перемычки, далее SMD компоненты, и лишь после этого — подстроечные резисторы, разъемы, отсек для батарейки, звуковой излучатель и дисплей. Прошиваем микроконтроллер внутрисхемным программатором. Фьюзы выставляются на тактирование от внутреннего RC генератора на 8МГц:

Будьте очень осторожны при прошивке фьюзов, потому что в некоторых программах-прошивалках их нужно выставлять инверсно. Чтобы избежать неверной расстановки чекбоксов, сначала считайте с МК фьюзы и посмотрите: если RSTDISBL не отмечен галочкой, то нужно расставлять как на картинке. Если отмечен, то фьюзы выставляются инверсно. По окончании прошивки, при правильно собранной схеме, устройство запускается от питания программатора, и раздаётся звуковой сигнал. Теперь нужно установить напряжение на выходе ОУ при пустом баке. Подаём питание 12 вольт. К плате подключается датчик уровня топлива (можно временно заменить на переменный резистор сопротивлением 330 Ом), устанавливается на максимальное сопротивление (бак пуст). С помощью RV3 на ноге ADC1 (PC1) микроконтроллера устанавливается напряжение ровно 5 вольт. Устройство готово:

Плата с кнопками:

 

Напишу как ими управлять. При основном экране (когда на дисплее отображаются все параметры) при нажатии кнопки MUTE/ESC включается/выключается звук предупреждений и звук нажатия кнопок. При этом на дисплей выводится соответствующая информация:  — звук включен и  — звук выключен. При нажатии кнопки HR/+ устанавливаются часы, при нажатии MIN/- — минуты. При нажатии MENU/OK на дисплее появляется основное меню. С помощью кнопок + и — выбираем нужный пункт меню:


При нажатии OK заходим в выбранный пункт.

1. Перегрев двигателя. Здесь кнопками + и — устанавливается порог температуры от +90 до +125°С , при которой устройство будет предупреждать о перегреве двигателя. После установки жмём OK, на месте значения темпратуры порога на секунду появляется надпись «Сохранено». Выходим, нажав ESC.
2. Разряд аккумулятора. В этом пункте устанавливается порог разряда аккумулятора от 10.0 до 12.0В так же как и в п.1.
3. Калибровка уровня топлива начинает производиться при пустом топливном баке автомобиля. На экране отображается следующая информация: количество залитого топлива, под ним значение АЦП для данного уровня, значение АЦП с датчика уровня топлива в настоящий момент.

Итак, бак пустой. Кнопками + и — устанавливаем «литры  0». Неспеша заливаем топливо до тех пор, пока не начнёт изменяться значение ADC. Жмём OK. Это будет нулевой уровень. Далее заливаем в бак 1 литр топлива, при этом значение ADC должно увеличиться, кнопкой + устанавливаем «литры  1». Жмём OK — в EEPROM МК записалось значение АЦП, соответствующее уровню 1 литр. Заливаем ещё литр топлива, кнопкой + устанавливаем «литры  2», нажимаем OK, и так до полного бака. После калибровки нужно перезагрузить устройство.

4. Инерция уровня топлива. Устанавливается количество измерений уровня топлива для вывода на дисплей усредненного значения. Устройство измеряет уровень топлива 1 раз в секунду. Если, например, инерция имеет значение 5, то в программе в массив со сдвигом будут записываться данные 5-ти последних измерений, соответственно за 5 секунд (одно измерение — одна секунда), из этих измерений вычисляется среднее значение остатка топлива и выводится на дисплей. Управление кнопками аналогично п.1.
5. Низкий уровень топлива. Здесь устанавливаем порог предупреждения о низком уровне топлива от 1 до 20 литров. Как управлять кнопками, уже ясно.
6. Яркость дисплея. Я думаю, тут всё понятно.

Все установки записываются в энергонезависимую память микроконтроллера (EEPROM), за исключением звука — при запуске устройства звук всегда включен.
При переходе измеряемых параметров через установленные значения порогов, на дисплее начинает мерцать значение соответствующего параметра, и каждые 30 секунд раздаётся тройной звуковой сигнал.

В архиве «MBC_.rar» находятся проект Proteus, печатная плата в формате Sprint Layout, схема и 2 прошивки: одна для русифицированных дисплеев, вторая — для нерусифицированных (меню на английском языке). У меня дисплей оказался нерусифицированным, поэтому на видео меню на английском.

Исходники прошивок написаны в компиляторе Bascom AVR. Их можно приобрести на торговой площадке exDIY : архив с исходниками (содержит 6 исходников — основной, с переключением типов датчиков уровня и с выводом для подключения вентилятора — все русской и английской версии) и исходный код новой прошивки с упрощенной калибровкой ДУТ

Дополнение 29.11.2013 — добавил архив «Прошивки для датчиков 0л — 0Ом.rar» с прошивками для датчиков уровня топлива, у которых при пустом баке сопротивление 0 Ом.

Дополнение 17.12.2013 — добавлен архив «Исправленные прошивки.rar». Причина исправления — глюк индикации остатка уровня топлива при полном баке — на дисплей выводилось число 69 или 71. Если бак уже откалиброван, то перед тем как прошивать МК, не забудьте сначала отдельно прошить конфигурацию фьюзов, отметив EESAVE, иначе при заливке hex все данные о калибровке бака будут стерты.

27.12.2013 — обновил архив  «Исправленные прошивки.rar». Исправлен недочет звуковых предупреждений о переходе через установленные пороги.

Дополнение 11.02.2014 — добавлен архив «Прошивки с переключением типов датчиков уровня топлива.rar». Описание внутри архива.

Дополнение 12.05.2014 — добавлен архив «Прошивки с управлением вентилятора.rar». Описание внутри.

Дополнение  9.03.2016 — добавлен архив с файлом печатной платы для DIP-компонентов от пользователя Sergio.

6.07.2016 — в статью добавлен архив с новыми прошивками «Прошивки с упрощенной калибровкой уровня топлива.rar». Описание внутри архива.


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

LCD1
LCD-дисплейWH16021
С подсветкойU1
МК AVR 8-битATmega8A-AU1
Корпус TQFP-32U2
Датчик температурыDS18B201
U3
Линейный регуляторL7805AB1
L7805AB2TU4
Часы реального времени (RTC)DS13071
Корпус SO-8U6
Операционный усилительLM29041
(LM358, LM258) Корпус SO-8Q1, Q2
Биполярный транзисторPMBS39042
Корпус SOT-23D1
Диод ШотткиSK241
Диод ШотткиD2
СтабилитронBZV55C5V11
Корпус SOD-80X1
Часовой кварц32768 Гц1
R1-R3, R5, R8
Резистор4.7 кОм5
SMD 1206R4
Резистор24 кОм1
SMD 1206R6, R10, R12, R14
Резистор1 кОм4
SMD 1206R7
Резистор2.7 кОм1
SMD 1206R9, R11
Резистор10 кОм2
SMD 1206R13
Резистор22 Ом1
SMD 1206R15
Резистор150 Ом1
SMD 1206
Резистор0 Ом3
SMD 1206 перемычкаRV1, RV4
Подстроечный резистор10 кОм2
RV3
Подстроечный резистор1 кОм1
C1-C5
Конденсатор0.1 мкФ5
4хSMD 0806 и 1хSMD1206C6
Конденсатор470 мкФ х 16В1
C7
Конденсатор100 мкФ х 10B1
BAT1
БатарейкаCR20321
LS1
Излучатель звуковойKC-12011
Без встроенного генератора
Тактовая кнопкаIT-1102w4
SMDДобавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.