0
- 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); ** ** | |
1
- 16.02.2013 - 23:39
| КАК должно быть правильно, а то я уже замучался | |
2
- 17.02.2013 - 00:07
|
Эх а бюджет так и не озвучили, за это время можно было такого написать. Ну а так разбейте задачу на состояния типа: ожидание пуска подготовка к запуску запуск работа остановка сбой ну или как там у вас по технологии Далее для каждого состояния определите состояние выходов и условия переходов в другие состояния. Для вычисления задержек используйте таймер, т.е. настройте прерывание по таймеру с нужной периодичностью, там меняйте некий счетчик. В простых случаях можно и без таймера, но я бы его здесь использовал. Соответственно из основного цикла убрались бы все delay за исключением микросекундных (но у вас там таких нет) для всех входных сигналов хорошо бы сделать программный фильтр (ну это если вы его аппаратно не реализовали). Естественно для фильтра я бы использовал бы на вашем месте прерывание и там бы с некой периодичностью анализировал бы состояние входов затем бы основной цикл был бы переписан с учетом выделенных состояний, ну а так же того что значения входов берутся не на прямую со входов а после фильтра. Далее наверное сюда не плохо прикрутить LCD дисплей для отображения состояния и кодов ошибок. Может быть еще UART для настройки параметров ну или пару тройку кнопок. Так же желательно параметрам давать нормальные имена что бы не думать а за что там у меня отвечает порт PA1. | |
3
- 17.02.2013 - 00:11
| Ну и напоследок если у вас доступ к переменным будет идти из основного цикла и из прерывания то не забывайте про синхронизацию | |
4
- 17.02.2013 - 01:34
| Спасибо я просто стараюсь сам разобраться во всей этой этой штуке , тестирую все на протеусе , информация очень полезная , ну а насчет корыстног итереса , то по бытылочке коньячка если в наших кроях будете то запросто организуем | |
5
- 18.02.2013 - 07:00
| стартер надо тормозить по достижению 400 оборотов/минуту, обороты считать в прерывании, обнулять с перерасчетом в таймере. | |
6
- 18.02.2013 - 20:46
| А может по току, который потребляет стартер, как только ток уменьшился- двигатель работает самостоятельно. | |
7
- 18.02.2013 - 22:39
| 6-robot bender 0002 >так делают все, и надежнее способа еще не придумали. С дополнительным контролем конечно того, что нет обрыва. То есть полный 0 на входе в полсекунды - тоже остановка. | |
8
- 19.02.2013 - 22:35
| Я все понимаю как это на происходит , но я самоучка и пытаю понять на уровне програмы,так как мне не хватает примера , исходног кода я перелопачиваю кучу литературы и понимаю чтоесть куча способов реализации , если б мне нужно было это сделать на машину я бы отсек стартер через реле или купил бы китайскую приблуду за 1500р . Я хочу понять саму лексику написания , а этот пример выбрал так как там есть , ввод и вывод опрос и действия , | |
9
- 20.02.2013 - 01:56
| 8-klaster_q >whoim@mail.ru напиши, постараюсь помочь словами | |
10
- 20.02.2013 - 10:54
|
тут на протеусе особо не реализуешь, разве только отладишь цифровую часть. тут Фанат NASCAR правильно написал про 400 оборотов. я бы в таком варианте подал сиглан с датчика оборотов на счетный вход, а другой таймер (например WD)завел бы на 1/8 или 1/16 секунды и прерыванием бы расчитывал обороты простой математикой. как только обороты выросли - клац! и отключил. интересно что за устройство будет, случайно не генератор с автозапуском? :-) | |
11
- 20.02.2013 - 17:33
| Это может быть и генератор и двс ' это пример просто . Мне блже эта тема так как мне нравяться автомобили, поэтому пример мне сподручней , | |
![]() | Интернет-форум Краснодарского края и Краснодара |