Как остановить стартер ????? Как остановить стартер по датчику масла и по лампочке зарядки . #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); ** ** |
КАК должно быть правильно, а то я уже замучался |
Эх а бюджет так и не озвучили, за это время можно было такого написать. Ну а так разбейте задачу на состояния типа: ожидание пуска подготовка к запуску запуск работа остановка сбой ну или как там у вас по технологии Далее для каждого состояния определите состояние выходов и условия переходов в другие состояния. Для вычисления задержек используйте таймер, т.е. настройте прерывание по таймеру с нужной периодичностью, там меняйте некий счетчик. В простых случаях можно и без таймера, но я бы его здесь использовал. Соответственно из основного цикла убрались бы все delay за исключением микросекундных (но у вас там таких нет) для всех входных сигналов хорошо бы сделать программный фильтр (ну это если вы его аппаратно не реализовали). Естественно для фильтра я бы использовал бы на вашем месте прерывание и там бы с некой периодичностью анализировал бы состояние входов затем бы основной цикл был бы переписан с учетом выделенных состояний, ну а так же того что значения входов берутся не на прямую со входов а после фильтра. Далее наверное сюда не плохо прикрутить LCD дисплей для отображения состояния и кодов ошибок. Может быть еще UART для настройки параметров ну или пару тройку кнопок. Так же желательно параметрам давать нормальные имена что бы не думать а за что там у меня отвечает порт PA1. |
Ну и напоследок если у вас доступ к переменным будет идти из основного цикла и из прерывания то не забывайте про синхронизацию |
Спасибо я просто стараюсь сам разобраться во всей этой этой штуке , тестирую все на протеусе , информация очень полезная , ну а насчет корыстног итереса , то по бытылочке коньячка если в наших кроях будете то запросто организуем |
стартер надо тормозить по достижению 400 оборотов/минуту, обороты считать в прерывании, обнулять с перерасчетом в таймере. |
А может по току, который потребляет стартер, как только ток уменьшился- двигатель работает самостоятельно. |
6-robot bender 0002 >[quote=Фанат NASCAR;29108870]стартер надо тормозить по достижению 400 оборотов/минуту, обороты считать в прерывании, обнулять с перерасчетом в таймере[/quote] так делают все, и надежнее способа еще не придумали. С дополнительным контролем конечно того, что нет обрыва. То есть полный 0 на входе в полсекунды - тоже остановка. |
Я все понимаю как это на происходит , но я самоучка и пытаю понять на уровне програмы,так как мне не хватает примера , исходног кода я перелопачиваю кучу литературы и понимаю чтоесть куча способов реализации , если б мне нужно было это сделать на машину я бы отсек стартер через реле или купил бы китайскую приблуду за 1500р . Я хочу понять саму лексику написания , а этот пример выбрал так как там есть , ввод и вывод опрос и действия , |
8-klaster_q >whoim@mail.ru напиши, постараюсь помочь словами |
тут на протеусе особо не реализуешь, разве только отладишь цифровую часть. тут Фанат NASCAR правильно написал про 400 оборотов. я бы в таком варианте подал сиглан с датчика оборотов на счетный вход, а другой таймер (например WD)завел бы на 1/8 или 1/16 секунды и прерыванием бы расчитывал обороты простой математикой. как только обороты выросли - клац! и отключил. интересно что за устройство будет, случайно не генератор с автозапуском? :-) |
Это может быть и генератор и двс ' это пример просто . Мне блже эта тема так как мне нравяться автомобили, поэтому пример мне сподручней , |
Текущее время: 13:56. Часовой пояс GMT +3. |