После публикации статьи Бортовой компьютер (часы, двухканальный термометр, вольтметр на 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-дисплей | WH1602 | 1 | С подсветкой | Поиск в магазине Отрон | |
U1 | МК AVR 8-бит | ATmega8A-AU | 1 | Корпус TQFP-32 | Поиск в магазине Отрон | |
U2 | Датчик температуры | DS18B20 | 1 | Поиск в магазине Отрон | ||
U3 | Линейный регулятор | L7805AB | 1 | L7805AB2T | Поиск в магазине Отрон | |
U4 | Часы реального времени (RTC) | DS1307 | 1 | Корпус SO-8 | Поиск в магазине Отрон | |
U6 | Операционный усилитель | LM2904 | 1 | (LM358, LM258) Корпус SO-8 | Поиск в магазине Отрон | |
Q1, Q2 | Биполярный транзистор | PMBS3904 | 2 | Корпус SOT-23 | Поиск в магазине Отрон | |
D1 | Диод Шоттки | SK24 | 1 | Диод Шоттки | Поиск в магазине Отрон | |
D2 | Стабилитрон | BZV55C5V1 | 1 | Корпус SOD-80 | Поиск в магазине Отрон | |
X1 | Часовой кварц | 32768 Гц | 1 | Поиск в магазине Отрон | ||
R1-R3, R5, R8 | Резистор | 4.7 кОм | 5 | SMD 1206 | Поиск в магазине Отрон | |
R4 | Резистор | 24 кОм | 1 | SMD 1206 | Поиск в магазине Отрон | |
R6, R10, R12, R14 | Резистор | 1 кОм | 4 | SMD 1206 | Поиск в магазине Отрон | |
R7 | Резистор | 2.7 кОм | 1 | SMD 1206 | Поиск в магазине Отрон | |
R9, R11 | Резистор | 10 кОм | 2 | SMD 1206 | Поиск в магазине Отрон | |
R13 | Резистор | 22 Ом | 1 | SMD 1206 | Поиск в магазине Отрон | |
R15 | Резистор | 150 Ом | 1 | SMD 1206 | Поиск в магазине Отрон | |
Резистор | 0 Ом | 3 | SMD 1206 перемычка | Поиск в магазине Отрон | ||
RV1, RV4 | Подстроечный резистор | 10 кОм | 2 | Поиск в магазине Отрон | ||
RV3 | Подстроечный резистор | 1 кОм | 1 | Поиск в магазине Отрон | ||
C1-C5 | Конденсатор | 0.1 мкФ | 5 | 4хSMD 0806 и 1хSMD1206 | Поиск в магазине Отрон | |
C6 | Конденсатор | 470 мкФ х 16В | 1 | Поиск в магазине Отрон | ||
C7 | Конденсатор | 100 мкФ х 10B | 1 | Поиск в магазине Отрон | ||
BAT1 | Батарейка | CR2032 | 1 | Поиск в магазине Отрон | ||
LS1 | Излучатель звуковой | KC-1201 | 1 | Без встроенного генератора | Поиск в магазине Отрон | |
Тактовая кнопка | IT-1102w | 4 | SMD | Поиск в магазине Отрон | ||
Скачать список элементов (PDF)
Прикрепленные файлы:
- MBC_.rar (292 Кб)
- Прошивки для датчиков 0л - 0Ом.rar (17 Кб)
- Исправленные прошивки.rar (34 Кб)
- Прошивки с переключением типов датчиков уровня топлива.rar (118 Кб)
- Прошивки с управлением вентилятора.rar (18 Кб)
- Печатная плата для DIP-компонентов от Sergio.rar (21 Кб)
- Прошивки с упрощенной калибровкой уровня топлива.rar (1127 Кб)
Комментарии (375) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
При переходе через установленные пороги теперь мерцает не значение, а значок.
Яркость теперь имеет 16 уровней.
Для управления вентилятора – вывод МК PB5, на нем появляется лог 1 при превышении установленной температуры, а на месте значка температуры появляется анимация вращающегося вентилятора.
Прошивке теперь безразлична зависимость сопротивления датчика от уровня топлива – прямая или обратная - работает с теми и с теми.
При длительном удержании кнопки происходит ускоренный перебор устанавливаемого параметра.
Можно эти нововведения применить к предыдущей прошивке, без упрощенной калибровки уровня топлива?
[Автор]
[Автор]
1) показание напряжения АКБ иногда прыгает от 10 до 15 вольт
2) двигаясь по ровной дороге, показание уровня топлива стабильно. А на гравийке начинает прыгать. Бывает аж от 3 до 30л. Когда был подключен родной указатель уровня, такого не было. Стрелка колебалась максимум в пределах 3 литров.
Что будет, если между выводами 2 и 3 LM2904 добавить ёмкость побольше, а так-же добавить ёмкость между движком RV1 и GND? Исправят ли эти доработки ошибки в показаниях БК?
[Автор]
[Автор]
[Автор]
А какая из клемм - масса? Относительно массы и нужно измерять. Далее - смотрите на предыдущей странице мой комментарий от 18.05.2015 20:31
[Автор]
В меню при этом входит, меняет параметры, звук включает и выключает...
[Автор]
[Автор]
[Автор]
[Автор]
Кстати, не пробовали включать без батарейки?
[Автор]
[Автор]
Прошивка (m_bc_sw_fls_ENG.hex)
[Автор]
Для увеличения громкости можно поставить транзистор Q2 и динамик помощнее. Прошивку же подкорректирую за небольшую оплату - в этом случае пишите в ЛС.
[Автор]
[Автор]
[Автор]
[Автор]
[Автор]
Два вопроса:
- Все прошивки которые идут после "Исправленной (69)71" уже исправлены?
- Если залить исправленную прошивку без выбора типа датчика это спасёт ситуацию.
[Автор]
[Автор]
[Автор]
[Автор]
Будьте внимательны !!!! В частности не правильно разведены 2 шт - Q1, Q2 - Биполярный транзистор
У него база с боку, т.к по схеме он по центру. Изменяйте плату.
[Автор]
[Автор]
[Автор]