Понедельник, 21.09.2020, 19:21
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Легкая примочка к скутеру
Долгого вступительного слова не будет в общем есть скутер, хотелось приложить к нему руку. Тем более ещё где то года полтора назад я его полностью разобрал выкинул всю проводку положил свою, внёс некоторые изменения заменой всех ламп не светодиоды, вместо галогеновой фары - ксенон. После этого мелькнула мысль что это неплохой потенциал для дальнейшей модернизации.
Суть устройства это исполнение основных и дополнительных функций. Так как я в программировании новичок поэтому текст программы не идеал далеко.
Для упрошенный установки и избавления возни с проводкой все входные и выходные сигналы от датчиком тормозов, повороты, переключения света фары (дальний - ближний), стопы и кнопки запуска двигателя идут на контроллер а он там сам разруливает всю работу.
Что на этот момент делает программа:
- при включении проходит так сказать проверка всей осветительной аппаратуры что есть на борту.
- При переключении клавиши поворотов соответственно мигают повороты сопровождая звуковым сигналом. Родное реле выкинул так как с установленными светодиодами оно не работает.
- При нажатии на любой из тормозов и кнопки запуска срабатывает реле стартера. (для зашиты от случайного включения стартера при работающем двигателе)
- При включении ближнего света и нажатии на кнопку запуска отключается питания электронного коммутатора по средствам реле. Это сделано с той целью что если просто повернуть ключ для включения осветительных приборов (габаритов или аварийки), коммутатор жрёт чуть больше ампера, с такой нагрузкой аккумулятор долго не протянет. Включение и выключение так же сопровождается звуковым сигналом.
- Ну и на последок добавил несколько световых эффектов для красоты. Выбор осуществляется включением любого поворота и нажатием на кнопку запуска.

Основные минусу с которыми я пока не могу побороть:
- временные задержки при выполнении любых действий, то-есть например если включить поворот и нажать на тормоз то стоп загорится лишь когда закончится обработка хотя бы одного мерцания, у меня в худшем случае это 0,25 секунды, а на дороге этого может быть достаточно для неприятностей.
- при выключении и включении коммутатора, если держать кнопку он будет включатся и выключатся что неприемлемо. Надо одно нажатие и происходит смена состояния на обратное не зависимо от времени нажатия, в общем думаю понятно.
Писал в CodeVisionAVR, камень Mega8 частота 8 мегагерц(просто он есть в наличии) Проверяю в Proteuse версии 7.7.

[hide]
#include <mega8.h>
#include <delay.h>
int time = 100;
int razi = 2;
int time_2 = 250;
char i=0;
char a;
void main(void)
{
DDRB.1=0; //вход
DDRB.2=0;
DDRB.3=0;
DDRB.4=0;
DDRC.0=0;
DDRC.1=0;

DDRB.0=1; // выход
DDRB.7=1;
DDRB.6=1;
DDRD.7=1;
DDRD.6=1;
DDRD.5=1;
DDRD.4=1;
DDRD.3=1;
DDRD.2=1;
DDRD.0=1;
PORTB.0=0;
PORTB.1=0;
PORTB.2=0;
PORTB.3=0;
PORTB.4=0;
PORTC.0=0;
PORTC.1=0;
PORTD.2=0;
PORTD.0=0;
while (1)

{
while (razi==2)
{
PORTD.0=1;
PORTB.7=1; // программа тестирования световых приборов
delay_ms (time);
PORTD.7=1;
delay_ms (time);
PORTD.5=1;
delay_ms (time);
PORTB.6=1;
delay_ms (time);
PORTD.3=1;
delay_ms (time);
PORTD.4=1;
delay_ms (time);
PORTB.7=0;
delay_ms (time);
PORTD.7=0;
delay_ms (time);
PORTD.5=0;
delay_ms (time);
PORTB.6=0;
delay_ms (time);
PORTD.3=0;
delay_ms (time);
PORTD.4=0;
PORTD.0=0;
razi=razi-1;
}
// цыкл запуска двигателя
PORTB.0=(PINB.1|PINB.2)&PINC.1;
//Стоп
PORTD.3=PINB.1|PINB.2;
//повороты
if (PINB.3==1 & i==0) //левый
{
delay_ms (time_2);
PORTB.7=1;
PORTD.4=1;
PORTD.0=1;
delay_ms (time_2);
PORTB.7=0;
PORTD.4=0;
PORTD.0=0;
}
if (PINB.4==1 & i==0) //правый
{
delay_ms (time_2);
PORTD.5=1;
PORTB.6=1;
PORTD.0=1;
delay_ms (time_2);
PORTB.6=0;
PORTD.5=0;
PORTD.0=0;
}
// Включение габаритов
PORTD.7=PINC.0;
//Выключение и включение комутатора
if(PINC.1 & PINC.0)
{
PORTD.2=!PORTD.2;
PORTD.0=1;
delay_ms(200);
PORTD.0=0;
delay_ms(200);
}

//Эфекты
if((PINB.3|PINB.4)&PINC.1)
{
i++;
if(i>7)
{
i=0;
}
}

if (i==1)
{
PORTD.5=1;
PORTB.6=1;
PORTB.7=1;
PORTD.4=1;
delay_ms(time_2);
PORTD.5=0;
PORTB.6=0;
PORTB.7=0;
PORTD.4=0;
delay_ms(time_2);
}
if (i==2)
{
for (a = 0; a<4 ; a++) // Цикл мигание первого светодиода, 4 раза
{
PORTB.7=1;
PORTD.4=1; //Включаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
PORTB.7=0;
PORTD.4=0; //Выключаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
}
delay_ms(200); // Задержка между мерцаниями, 200 мс
for (a = 0; a<4 ; a++) // Мигание второго светодиода, 4 раза
{
PORTD.5=1;
PORTB.6=1; //Включаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
PORTD.5=0;
PORTB.6=0; //Выключаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
}
delay_ms(200); // Задержка между мерцаниями, 200 мс
}

if (i==3)
{
for (a = 0; a<4 ; a++) // Цикл мигание первого светодиода, 4 раза
{
PORTB.7=1;
PORTD.4=1; //Включаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
PORTB.7=0;
PORTD.4=0; //Выключаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
PORTD.7=1;
PORTD.3=1;
}
delay_ms(200); // Задержка между мерцаниями, 200 мс
for (a = 0; a<4 ; a++) // Мигание второго светодиода, 4 раза
{
PORTD.5=1;
PORTB.6=1; //Включаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
PORTD.5=0;
PORTB.6=0; //Выключаем светодиод
delay_ms(50); //Делаем задержку на 50 миллисекунд
}
PORTD.7=0;
PORTD.3=0;
delay_ms(200); // Задержка между мерцаниями, 200 мс
}
if(i==4)
{
PORTB.7=1;
PORTD.4=1; //Включаем светодиод
delay_ms(time_2); //Делаем задержку на time_2
PORTB.7=0;
PORTD.4=0; //Выключаем светодиод
PORTD.5=1;
PORTB.6=1;
delay_ms(time_2); //Делаем задержку на time_2
PORTD.5=0;
PORTB.6=0;
}
if(i==5)
{
PORTB.7=1; // По кругу как при старте
delay_ms (time);
PORTD.7=1;
delay_ms (time);
PORTD.5=1;
delay_ms (time);
PORTB.6=1;
delay_ms (time);
PORTD.3=1;
delay_ms (time);
PORTD.4=1;
delay_ms (time);
PORTB.7=0;
delay_ms (time);
PORTD.7=0;
delay_ms (time);
PORTD.5=0;
delay_ms (time);
PORTB.6=0;
delay_ms (time);
PORTD.3=0;
delay_ms (time);
PORTD.4=0;
}
if(i==6)
{
PORTB.7=1; // По кругу как при старте но 1 светодиодом
delay_ms (time);
PORTB.7=0;
delay_ms (time);
PORTD.7=1;
delay_ms (time);
PORTD.7=0;
delay_ms (time);
PORTD.5=1;
delay_ms (time);
PORTD.5=0;
delay_ms (time);
PORTB.6=1;
delay_ms (time);
PORTB.6=0;
delay_ms (time);
PORTD.3=1;
delay_ms (time);
PORTD.3=0;
delay_ms (time);
PORTD.4=1;
delay_ms (time);
PORTD.4=0;
}
if(i==7)
{
PORTB.7=1; // По кругу как при старте но 1 светодиодом ,без задержки
delay_ms (time);
PORTB.7=0;
PORTD.7=1;
delay_ms (time);
PORTD.7=0;
PORTD.5=1;
delay_ms (time);
PORTD.5=0;
PORTB.6=1;
delay_ms (time);
PORTB.6=0;
PORTD.3=1;
delay_ms (time);
PORTD.3=0;
PORTD.4=1;
delay_ms (time);
PORTD.4=0;
}
}
}

[/hide] 

Категория: Учимся работать с AVR | Добавил: Gans (28.01.2011) | Автор: Геннадий
Просмотров: 8123 | Комментарии: 4 | Рейтинг: 5.0/4 |
Всего комментариев: 4
0
4 Lex   [Материал]
Тема очень интересна!!!! Это всё спокойно перерастёт в бортовой компьютер для скутера/мотоцикла!!!! Прошло пол года есть ли у кого какиенибудь наработки?

0
3 Gans   [Материал]
Я вот какраз хочу сделать таковые изменения. Делать собираюсь на 16 битном таймере с максимальным коофицеэнтом деления. Как доделаю отпишусь.

0
2 Magistr_devil   [Материал]
а если задержку мерцания и между мерцаниями релиазовать не через delay а на таймерах?

0
1 my-avr   [Материал]

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2020
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Как вам материалы на сайте
Всего ответов: 860
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz