Здравствуйте. Я собрал вот такое простенькое устройство на attiny2313:
Питается вся схема от usb-зарядки т.е. примерно 5В. Еще на схеме не нарисовано, но между землей и питанием стоит 2 конденсатора на 100мФ и 0,1мФ и стабилитрон на 5,6в. И еще ножка reset МК подключена к питанию через резистор 1кОм. Прошивка в МК простейшая, буквально несколько строк: МК в бесконечном цикле ждет нажатия первой кнопки, после этого на определенное время (зависящее от положения остальных трех кнопок) подает питание на транзистор т.е. замыкает реле, затем ждет отпускания первой кнопки и все сначала.
Проблема вот какая: схема периодически срабатывает самопроизвольно как будто бы была нажата первая кнопка, т.е. реле замыкается на нужное время без нажатия этой самой первой кнопки Рядом с этой схемой стоят другие (электрически никак не связанные с этой), с реле и на переменном токе, и у меня возникло предположение, что, может быть, там какие-нибудь наводки или помехи появляются в проводах, идущих от МК к кнопкам? Но в соседних устройствах токи текут всего несколько ампер, особых наводок или помех вроде быть недолжно, темболее подтяжки у кнопок итак небольшие - 1кОм. Попробовал емкость, параллельную кнопке увеличить на несколько мФ - толку нет. Пробовал БП поменять - тоже не помогло.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 15:26:55
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
BOB51 писал(а):
но... нормальна прожка и в таком случае вытянет ситуацию.
Я не соглашусь с Вами. Клубок проводов или длинная линия, может дать очень сильную наводку, особенно находясь возле силового оборудования или искрящего (пускатели например). Эта наводка уйдет через защитные диоды портов в питание МК, что может привезти к чему угодно.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
в симуляции ложных срабатываний нет, код вот: Спойлерprocedure portinit; begin DDRD:=%01000010; PORTD:=%00111100; end;
procedure ExtIntInit; begin MCUCR:=%00000010; GIMSK:=%01000000; end;
procedure start; iv IVT_ADDR_INT0; //прерывание по нажатию первой кнопки begin if (PIND3_bit=0) or (PIND4_bit=0) or (PIND5_bit=0) then //если какойто тумблер замкнут т.е. если время выставлено begin PORTD1_bit:=1; if (PIND3_bit=0) then Delay_ms(50); if (PIND4_bit=0) then Delay_ms(100); if (PIND5_bit=0) then Delay_ms(150); PORTD1_bit:=0; end; while PIND2_bit=0 do begin end; //ждем отпускания кнопки старта прерывания Delay_ms(80); //пауза для устранения дребезга контактов кнопки EIFR.6:=1; end;
begin { Main program } Delay_ms(20); portinit; ExtIntInit; Delay_ms(65); EIFR.6:=1; SREG_I_bit:=1; while true do begin end; end.
Врятли МК перезагружается - ложные срабатывания происходят как будто бы нажалась первая кнопка, а после перезагрузки этого быть не должно.
Попробую седне поставить резистор последовательно с конденсатором параллельно контактам реле - нашел щас в гугле что комуто от глюков МК это помогло
можете снова закидать меня тапками, но я снова повторю то же самое, что и 100500 раз говорил: практически всегда при работе с кнопками ПРЕРЫВАНИЯ НЕ НУЖНЫ. вангую, что проблема именно в этом: в обработчике прерывания кнопки не предпринято никаких мер по определению длительности "нажатия" главной кнопки - даже если там появится какая-то помеха в виде нолика длительностью 1 мкс, прерывание отработает.
если бы обработка кнопки делалась методом опроса, никаких проблем бы не было - короткие "нажатия" просто игнорировались бы. сделать такой фильтр можно и в обработчике прерываний, но, имхо, это называется "создать себе проблему и героически ее преодолеть".
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
можете снова закидать меня тапками, но я снова повторю то же самое, что и 100500 раз говорил: практически всегда при работе с кнопками ПРЕРЫВАНИЯ НЕ НУЖНЫ. вангую, что проблема именно в этом: в обработчике прерывания кнопки не предпринято никаких мер по определению длительности "нажатия" главной кнопки - даже если там появится какая-то помеха в виде нолика длительностью 1 мкс, прерывание отработает.
если бы обработка кнопки делалась методом опроса, никаких проблем бы не было - короткие "нажатия" просто игнорировались бы. сделать такой фильтр можно и в обработчике прерываний, но, имхо, это называется "создать себе проблему и героически ее преодолеть".
если не ошибаюсь изменить нужно программу примерно так: Спойлер
Код:
procedure portinit; begin DDRD:=%01000010; PORTD:=%00111100; end;
procedure relay; begin if (PIND3_bit=0) or (PIND4_bit=0) or (PIND5_bit=0) then //если какойто тумблер замкнут т.е. если время выставлено begin PORTD1_bit:=1; if (PIND3_bit=0) then Delay_ms(50); if (PIND4_bit=0) then Delay_ms(100); if (PIND5_bit=0) then Delay_ms(150); PORTD1_bit:=0; end; while PIND2_bit=0 do begin end; //ждем отпускания кнопки старта Delay_ms(80); //пауза для устранения дребезга контактов кнопки end;
begin { Main program } Delay_ms(20); portinit; Delay_ms(65);
while true do begin if PIND2_bit=0 then //если кнопка нажата begin delay_ms(сколькото для игнорирования коротких "нажатий"/помех); if PIND2_bit=0 then relay; //если все еще нажата то делать что надо end; end; end.
какое примерно время можно выбрать для этого игнорирования? желательно как можно меньше т.к. реагировать на нажатие нужно быстро
Последний раз редактировалось aen Пт янв 13, 2017 12:37:34, всего редактировалось 1 раз.
говорят, Брюс Ли мог наносить рукой 3 удара в секунду... т.е. скорость его мышечной деятельности была порядка 150 мс... (удар = движение туда-сюда). как бы это фантастический результат. вам надо быстрее реагировать?
поставьте себе четкую задачу.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
говорят, Брюс Ли мог наносить рукой 3 удара в секунду... т.е. скорость его мышечной деятельности была порядка 150 мс... (удар = движение туда-сюда). как бы это фантастический результат. вам надо быстрее реагировать?
поставьте себе четкую задачу.
просто в перспективе там вместо кнопки может быть подключено другое устройство, присылающее сигнал. попробую вначале поставить пару мс
Добавлено after 4 hours 27 minutes 59 seconds: Вобщем проверка зажатости кнопки в 2мс отсеила эти помехи (или что там это было) и все стало как надо, ложных срабатываний больше нет. Всем спасибо!
практически всегда при работе с кнопками ПРЕРЫВАНИЯ НЕ НУЖНЫ. вангую, что проблема именно в этом: в обработчике прерывания кнопки не предпринято никаких мер по определению длительности "нажатия" главной кнопки - даже если там появится какая-то помеха в виде нолика длительностью 1 мкс, прерывание отработает.
Согласен. Единственный случай, когда это неверно - если нужно обеспечить мгновенную реакцию на кнопки при сверхнизком потреблении.
_________________ Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения