rxstart1 писал(а):Попробовал проверить Ваше предположение по поводу провисания остальных кнопок и просто оставил пустые пины никакого эффекта((
В Протеусе вы этого и не увидите. А вот в железе - вполне. Лично такое наблюдал. Контроллер срабатывал когда хотел.
ничто по моему не будет мешать сигналу с программатора? Или я не прав?
У Вас с программатора идет последовательность 0-й и 1-ц. Может открыться. А как Вы будете управлять транзистором? Он у Вас NPN, а Вы на эмиттер + подали.
Кстати, Вы можете включить внутренние подтягивающие резисторы у контроллера, чтобы не городить внешних и кнопкой коротить на землю. Тогда все будет стабильно работать и без лишних деталей.
И второе, номинал резисторов, которые Вы поставили, я так понимаю, условный? Потому что он должен быть больше. Хотя бы 10 кОм и 20 кОм
Если Вы ставите конденсатор - у Вас получится колебательный контур. Чтобы уменьшить его "эффект" нужно будет ставить еще резистор последовательно с конденсатором, а это даст небольшую задержку включения/выключения. И уж на залипание он никак не повлияет. На залипание контактов влияет ток, который проходит через контакты и их искрение. При большом токе они нагреваются и "прикипают" друг к дружке. А вот чтобы уменьшить искрение - можете поставить конденсатор параллельно включающим контактам (а не обмотке)
если я сделаю джамперы при программировании не важно что другие порты будут увязаны в схеме
Абсолютно пофигу. Вам только необходимо будет подать питание на вывод AVCC питания аналоговой части, даже если Вы ее не используете. Иначе не прошьете.
INT0 Вы разрешаете. А где обработчик этого прерывания? При нажатии кнопки HEAT у Вас контроллер попадет на заглушку и сбросится.
Вот здесь у Вас ошибка:
Код: Выделить всё
if (!START_BUTTON) // нажата кнопка
{
if (!trig)
{
!!!!!!! tim2=0; // взводим триггер
trig=1; // сбрасываем счетчик Т1
key++; // положение ключа +1
}
if (key>2) key=0;
change_key_pos(key); // включаем соответствующие реле
//______________________
// РУЧНОЙ ЗАПУСК (Крутить стартер пока нажата кнопка)
//______________________
!!!!!! if (tim2>SEC_2) // если кнопка удерживается более 2 сек.
{
if (!CLUTCH) // выжато сцепление
{
ACC=0; // выключить реле АСС
IGN=!err; // в зависимости от исправности
IGN_FAULT=err; // включить реле IGN
while (CHANGE_HEAT); // подождать пока не погаснет лампа свечей накала
STARTER=1; // крутить стартер пока нажата кнопка
key=2; // положение ключа зажигания IGN
}
}
}
Вы сбрасываете переменную в ноль, а потом сразу же проверяете, больше ли она какого-то значения. Естественно, она меньше, поскольку таймер не успевает ее увеличить до нужного значения. И в этот кусок у Вас просто не входит. К тому же, Вы не делаете антидребезга по нажатию кнопки. И у Вас может случится, что после обработки условия нажатия сразу перекинет на обработку условия отпускания кнопки.