Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Как остановить стартер ????? (http://forums.kuban.ru/f1024/kak_ostanovit-_starter-3715554.html)

klaster_q 16.02.2013 23:36

Как остановить стартер ?????
 
Как остановить стартер по датчику масла и по лампочке зарядки .


#include <avr/io.h>
#include <util/delay.h>
int main(void)
**
DDRA = 0x00;
PORTA = 0xFF;
DDRD = 0xFF;
PORTD = 0x00;
DDRB = 0xFF;
PORTB = 0x00;

while(1)

**

while ((PINA&(1 << PA0))== 1) ** ** //проверить "1" на линии 0 порта А

_delay_ms(200);




if ((PIND&(1 << PD0)) ==0)//проверяет Если PD0 равен 0
**
PORTD |= (1 << PD0);// ВКЛ ЗАЖИГАНИЕ
PORTB |= _BV(PB1); //вкл желтый

_delay_ms(1000); // ждем 1 сек.

PORTB &= ~_BV(PB1);// выкл желтый
PORTB |= _BV(PB0);// зеленый ВКЛ

if ((PIND&(1 << PD3)) ==0)//проверяет Если PD1 равен 0
**

PORTD |= _BV(PD3); //СТАРТ СТАРТЕР
PORTB |= _BV(PB2); //вкл красный
_delay_ms(5000);

PORTD &= ~_BV(PD3);// СТОП СТАРТЕР
PORTB &= ~_BV(PB2);// выкл красный
**


else
**


PORTD &= ~_BV(PD3);// СТОП СТАРТЕР
PORTB &= ~_BV(PB2);// выкл красный

**
**


else


**
PORTD &= ~(1 << PD0);// зажигание выкл
PORTB &= ~_BV(PB0);// зеленый выкл

**





while ((PINA&(1 << PA0))==0) ** ** //Если кнопка нажата будет выполняться пустой цикл
_delay_ms(200);



**

**

klaster_q 16.02.2013 23:39

КАК должно быть правильно, а то я уже замучался

TVV1 17.02.2013 00:07

Эх а бюджет так и не озвучили, за это время можно было такого написать.
Ну а так разбейте задачу на состояния типа:
ожидание пуска
подготовка к запуску
запуск
работа
остановка
сбой
ну или как там у вас по технологии

Далее для каждого состояния определите состояние выходов и условия переходов в другие состояния.

Для вычисления задержек используйте таймер, т.е. настройте прерывание по таймеру с нужной периодичностью, там меняйте некий счетчик. В простых случаях можно и без таймера, но я бы его здесь использовал.

Соответственно из основного цикла убрались бы все delay за исключением микросекундных (но у вас там таких нет)

для всех входных сигналов хорошо бы сделать программный фильтр (ну это если вы его аппаратно не реализовали). Естественно для фильтра я бы использовал бы на вашем месте прерывание и там бы с некой периодичностью анализировал бы состояние входов

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

Далее наверное сюда не плохо прикрутить LCD дисплей для отображения состояния и кодов ошибок.
Может быть еще UART для настройки параметров ну или пару тройку кнопок.

Так же желательно параметрам давать нормальные имена что бы не думать а за что там у меня отвечает порт PA1.

TVV1 17.02.2013 00:11

Ну и напоследок если у вас доступ к переменным будет идти из основного цикла и из прерывания то не забывайте про синхронизацию

klaster_q 17.02.2013 01:34

Спасибо я просто стараюсь сам разобраться во всей этой этой штуке , тестирую все на протеусе , информация очень полезная , ну а насчет корыстног итереса , то по бытылочке коньячка если в наших кроях будете то запросто организуем

fanatnascar 18.02.2013 07:00

стартер надо тормозить по достижению 400 оборотов/минуту, обороты считать в прерывании, обнулять с перерасчетом в таймере.

robot bender 0002 18.02.2013 20:46

А может по току, который потребляет стартер, как только ток уменьшился- двигатель работает самостоятельно.

fanatnascar 18.02.2013 22:39

6-robot bender 0002 >[quote=Фанат NASCAR;29108870]стартер надо тормозить по достижению 400 оборотов/минуту, обороты считать в прерывании, обнулять с перерасчетом в таймере[/quote]
так делают все, и надежнее способа еще не придумали. С дополнительным контролем конечно того, что нет обрыва. То есть полный 0 на входе в полсекунды - тоже остановка.

klaster_q 19.02.2013 22:35

Я все понимаю как это на происходит , но я самоучка и пытаю понять на уровне програмы,так как мне не хватает примера , исходног кода я перелопачиваю кучу литературы и понимаю чтоесть куча способов реализации , если б мне нужно было это сделать на машину я бы отсек стартер через реле или купил бы китайскую приблуду за 1500р . Я хочу понять саму лексику написания , а этот пример выбрал так как там есть , ввод и вывод опрос и действия ,

fanatnascar 20.02.2013 01:56

8-klaster_q >whoim@mail.ru напиши, постараюсь помочь словами

Том 20.02.2013 10:54

тут на протеусе особо не реализуешь, разве только отладишь цифровую часть. тут Фанат NASCAR правильно написал про 400 оборотов.
я бы в таком варианте подал сиглан с датчика оборотов на счетный вход, а другой таймер (например WD)завел бы на 1/8 или 1/16 секунды и прерыванием бы расчитывал обороты простой математикой. как только обороты выросли - клац! и отключил.
интересно что за устройство будет, случайно не генератор с автозапуском? :-)

klaster_q 20.02.2013 17:33

Это может быть и генератор и двс ' это пример просто . Мне блже эта тема так как мне нравяться автомобили, поэтому пример мне сподручней ,


Текущее время: 13:56. Часовой пояс GMT +3.