Проект "бакомер" На Avr

Обсуждаем контроллеры компании Atmel.
Ответить
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Сообщение SabitofF »

Для чего мне это нужно:
Имею авто Ситроен Джампи 2005 г.в. дизель. В последнее время стрелка бака начинает жить своей жизнью, точных данных не показывает при этом датчик в баке работает хорошо. Уже несколько раз заканчивалась соляра, ремонт ТНВД обошёлся в 650 грн. По этому хочу сделать доп. показометр и следить за уровнем топлива и при необходимости задействовать звуковое извещение.

Функции бакомера:
- показывать количество топлива в баке;
- мигание семи сегментным индикатором при 35 л.;
- извещать миганием семи сегментным индикатором и дотошным пищанием пьезоэлемента при 25 л.;
- бакомер не подстраиваемый, 0-85 литров.

Решил делать девайс на Atmega8, не много погуглил и с нескольких схем сделал одну. Прошу помощи в проверке правильности схемы и не могу понять как подключить датчик к микроконтроллеру. Схему прилагаю в протеусе.
Вложения
Бакомер.rar
(16.3 КБ) 391 скачивание
Бакомер.png
(184.11 КБ) 1039 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

1) Если хотите чтобы индикатор горел поярче, лучше общие (катоды/аноды) подключать через транзисторы иначе нужно подобрать резисторы чтобы суммарным током через 7 сегментов не пожечь общий вывод (40мА MAX)
2) Пищалку лучше подключить на один из выводов OCR, тогда пищать можно аппаратно
3) Датчик выдает напряжение пропорционально количеству топлива? Тогда через делитель на вход АЦП (у вас остался ADC5)
4) RESET подтянуть к +5В через 10к, AREF подключить к +5В (можно через дроссель 10мкГн, конденсатор 100н на землю, но для такой штуки это не сильно важно).
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 351
Зарегистрирован: Пн сен 12, 2011 12:13:46

Сообщение Garin »

При разводке на реальной плате, будет куча перемычек чтобы подсоеденить сегменты.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2209
Зарегистрирован: Вт июл 27, 2010 11:31:59
Откуда: Кххх

Сообщение minakan »

За основу схему можно взять отсюда: http://radiokot.ru/forum/viewtopic.php?f=25&t=93444
Исходники с мигающей прошивкой тут: http://radiokot.ru/forum/download/file.php?id=163593
Выход для пищалки PC0 (23 нога).
Надо знать напряжение на резисторе - датчике при интересующих вас уровнях топлива, тогда можно делитель подправить, и уровни срабатывания настроить.
Под этот вольтметр Серега печатку делал, с пищалкой, можно его спросить.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Вовсе не обязательно. Если не использовать отдельные семисегментники, то контактов всего 7+4 (+1 если точка нужна). Их можно развести не делая много перемычек, а если для индикатора задействовать отдельную платку (или подпаяться шлейфом прямо к ногам), то это вообще не проблема :idea:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Сообщение SabitofF »

Engineer_Keen писал(а): Пищалку лучше подключить на один из выводов OCR, тогда пищать можно аппаратно
Сам буззер у меня 12-ти вольтовый, смогу ли я им управлять на прямую от микроконтроллера?
minakan писал(а): Исходники с мигающей прошивкой тут: http://radiokot.ru/forum/download/file.php?id=163593
Ссылка не действительна
Engineer_Keen писал(а): 1) Если не использовать отдельные семисегментники, то контактов всего 7+4 (+1 если точка нужна).
2) а если для индикатора задействовать отдельную платку (или подпаяться шлейфом прямо к ногам), то это вообще не проблема :idea:
Совершенно верно.
1) Сам семисегментник цельный 4-х рядный;
2) И Под него будет сделана отдельная плата, которая будет подтягнута к МК шлейфом.
________________________________

Всем спасибо кто помогает!

И так, при Вашей помощи были внесены некоторые изменения в схеме и прошу вновь перепроверить её:
- добавлены транзисторы BC807 и резисторы по 1 кОм на семисегментник;
- и изменено подключение к датчику, сделано через делитель. Взял из этой схемы
Вложения
Бакомер.rar
(17.61 КБ) 228 скачиваний
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2209
Зарегистрирован: Вт июл 27, 2010 11:31:59
Откуда: Кххх

Сообщение minakan »

SabitofF писал(а):Ссылка не действительна
Возможно. Перезалил. :tea:
Вложения
4post2.zip
Проект вольтметра с миганием.
(18.71 КБ) 245 скачиваний
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Сообщение SabitofF »

Помогите с алгоритмом:

Алгоритм программы такой:

Основная программа
Инициализация портов
Инициализация АЦП
Разрешение прерываний
Бесконечный цикл
{
Если в баке менее 35 литров, мигание точками на индикаторе
Если в баке менее 30 литров, мигание точками на индикаторе + издавать звуковые сигналы
}

Обработчик прерывания АЦП
Считать напряжение на входе АЦП
Определить в какой диапазон оно попадает
Записать в буфер
Показать на дисплее




Верно ли сложен алгоритм?
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Между "Считать напряжение на входе АЦП" и "Определить в какой диапазон оно попадает" нужно сделать оооочень длинное усреднение, чтобы цифры на неровной дороге не скакали. А так нормальный алгоритм.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Сообщение SabitofF »

Engineer_Keen писал(а):нужно сделать оооочень длинное усреднение, чтобы цифры на неровной дороге не скакали
Что-то в этом роде, но под каждую литру свое деление?

Код: Выделить всё

 voltage= R_division*2.56*u*1.024; //Расчет напряжения
 
i=voltage/10000;	//Выведение напряжения на ЖКИ
voltage=voltage-i*10000;
if (i!=0) lcd_dat(0x30+i);
 
i=voltage/1000;
voltage=voltage-i*1000;
lcd_dat(0x30+i);
 
lcd_dat(',');
 
i=voltage/100;
voltage=voltage-i*100;
lcd_dat(0x30+i);
 
i=voltage/10;
voltage=voltage-i*10;
lcd_dat(0x30+i);
 
lcd_dat('v');
}
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Не, я имею ввиду массив, в который по прерыванию АЦП будет по кругу заносится значение АЦП, все значения будут суммироваться, делиться на количество, а потом уже надо делать перевод в литры и вывод на экран.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

Сообщение SabitofF »

что-то в этом роде?

Код: Выделить всё

void fuel_lcd(void){
    unsigned char x=0;
    unsigned char m_current=0; // Текущее значения ячейки массива
    unsigned char m_rom=0;     // Сохраненное значение ячейки массива
    unsigned short int r_current=0; // Текущее значение разницы
    unsigned short int r_rom=999;     // Сохраненное значение разницы

    result_fuel=0;  //  Обнуляем значение остатка топлива
    for (x=1;x<=inertnost;x++)  //  Получаем сумму значений остатка топлива согласно инертности
        {
            result_fuel=result_fuel+read_adc(0);delay_ms(30);
        };
    result_fuel=result_fuel/inertnost;  // Получаем среднее значение остатка топлива согласно инертности
    
    for (x=0;x<=size_bak;x++)
        {
            m_current=x;     //  Получаем текущее значение ячейки
            r_current=fuel[x]-result_fuel;   //  Получаем текущее значение разницы
            if (r_current<r_rom)        //  Если текущее значение разницы меньше сохраненного
                {
                    m_rom=m_current;   //  Сохраняем ячейку в память
                    r_rom=r_current;   //  Сохраняем значение в память
                }
        }

    decbin_ds(m_rom);
    char_24_32(buffer[2],37,1);  
    char_24_32(buffer[3],64, 1); 
} 
Ответить

Вернуться в «AVR»