Страница 1 из 1
Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 12:01:31
iavn325
Здравствуйте. Я собрал вот такое простенькое устройство на attiny2313:

Питается вся схема от usb-зарядки т.е. примерно 5В. Еще на схеме не нарисовано, но между землей и питанием стоит 2 конденсатора на 100мФ и 0,1мФ и стабилитрон на 5,6в. И еще ножка reset МК подключена к питанию через резистор 1кОм.
Прошивка в МК простейшая, буквально несколько строк: МК в бесконечном цикле ждет нажатия первой кнопки, после этого на определенное время (зависящее от положения остальных трех кнопок) подает питание на транзистор т.е. замыкает реле, затем ждет отпускания первой кнопки и все сначала.
Проблема вот какая: схема периодически срабатывает самопроизвольно как будто бы была нажата первая кнопка, т.е. реле замыкается на нужное время без нажатия этой самой первой кнопки
Рядом с этой схемой стоят другие (электрически никак не связанные с этой), с реле и на переменном токе, и у меня возникло предположение, что, может быть, там какие-нибудь наводки или помехи появляются в проводах, идущих от МК к кнопкам? Но в соседних устройствах токи текут всего несколько ампер, особых наводок или помех вроде быть недолжно, темболее подтяжки у кнопок итак небольшие - 1кОм. Попробовал емкость, параллельную кнопке увеличить на несколько мФ - толку нет. Пробовал БП поменять - тоже не помогло.
В чем может быть дело?
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 13:04:27
Zhuk72
iavn325 писал(а):В чем может быть дело?
Например в коде.
Еще можете попробовать базу к земле притянуть.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 13:50:14
Z_h_e
Zhuk72 писал(а):Еще можете попробовать базу к земле притянуть.
Не даст это ничего.
В симуляции есть ложные срабатывания? Тогда сразу бы выявилась проблема в коде.
На какой-нибудь порт повесьте светодиод. Который будет включаться при старте мк на некоторое время. Начнет мигать, значит МК перезапускается.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 14:12:37
pyzhman
Код сюда.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 14:16:32
BOB51
ИСКЛЮЧИТЕЛЬНО ВЫБРАННЫЙ АЛГОРИТМ ПРОГРАММЫ.
Как оччень слабая варианта - монтаж "клубком паутины" - но... нормальна прожка и в таком случае вытянет ситуацию.

Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 15:26:55
Z_h_e
BOB51 писал(а):но... нормальна прожка и в таком случае вытянет ситуацию.
Я не соглашусь с Вами. Клубок проводов или длинная линия, может дать очень сильную наводку, особенно находясь возле силового оборудования или искрящего (пускатели например). Эта наводка уйдет через защитные диоды портов в питание МК, что может привезти к чему угодно.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 15:30:53
Zhuk72
Сейчас появится автор, скажет "извините, я все напутал, все работает нормально"

Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Чт янв 12, 2017 15:38:52
Z_h_e
Или не появится совсем.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Пт янв 13, 2017 06:33:27
iavn325
в симуляции ложных срабатываний нет,
код вот:
Спойлер
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.
Врятли МК перезагружается - ложные срабатывания происходят как будто бы нажалась первая кнопка, а после перезагрузки этого быть не должно.
Попробую седне поставить резистор последовательно с конденсатором параллельно контактам реле - нашел щас в гугле что комуто от глюков МК это помогло
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Пт янв 13, 2017 07:00:04
ARV
можете снова закидать меня тапками, но я снова повторю то же самое, что и 100500 раз говорил: практически всегда при работе с кнопками ПРЕРЫВАНИЯ НЕ НУЖНЫ. вангую, что проблема именно в этом: в обработчике прерывания кнопки не предпринято никаких мер по определению длительности "нажатия" главной кнопки - даже если там появится какая-то помеха в виде нолика длительностью 1 мкс, прерывание отработает.
если бы обработка кнопки делалась методом опроса, никаких проблем бы не было - короткие "нажатия" просто игнорировались бы. сделать такой фильтр можно и в обработчике прерываний, но, имхо, это называется "создать себе проблему и героически ее преодолеть".
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Пт янв 13, 2017 07:24:12
iavn325
ARV писал(а):можете снова закидать меня тапками, но я снова повторю то же самое, что и 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.
какое примерно время можно выбрать для этого игнорирования? желательно как можно меньше т.к. реагировать на нажатие нужно быстро
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Пт янв 13, 2017 07:31:07
ARV
iavn325 писал(а):реагировать на нажатие нужно быстро
говорят, Брюс Ли мог наносить рукой 3 удара в секунду... т.е. скорость его мышечной деятельности была порядка 150 мс... (удар = движение туда-сюда). как бы это фантастический результат. вам надо быстрее реагировать?
поставьте себе четкую задачу.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Пт янв 13, 2017 07:34:05
pyzhman
Прошивайте и пробуйте.
Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Пт янв 13, 2017 12:07:59
iavn325
ARV писал(а):iavn325 писал(а):реагировать на нажатие нужно быстро
говорят, Брюс Ли мог наносить рукой 3 удара в секунду... т.е. скорость его мышечной деятельности была порядка 150 мс... (удар = движение туда-сюда). как бы это фантастический результат. вам надо быстрее реагировать?
поставьте себе четкую задачу.
просто в перспективе там вместо кнопки может быть подключено другое устройство, присылающее сигнал. попробую вначале поставить пару мс
Добавлено after 4 hours 27 minutes 59 seconds:
Вобщем проверка зажатости кнопки в 2мс отсеила эти помехи (или что там это было) и все стало как надо, ложных срабатываний больше нет. Всем спасибо!

Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Вс янв 15, 2017 12:20:07
Jack_A
iavn325 писал(а):помехи появляются в проводах, идущих от МК к кнопкам? Но в соседних устройствах токи текут всего несколько ампер
Конечно - пустяк. Вот если бы килоАмперы !

Re: Самопроизвольное срабатывание схемы на МК
Добавлено: Вс фев 26, 2017 15:07:11
watchmaker
практически всегда при работе с кнопками ПРЕРЫВАНИЯ НЕ НУЖНЫ. вангую, что проблема именно в этом: в обработчике прерывания кнопки не предпринято никаких мер по определению длительности "нажатия" главной кнопки - даже если там появится какая-то помеха в виде нолика длительностью 1 мкс, прерывание отработает.
Согласен. Единственный случай, когда это неверно - если нужно обеспечить мгновенную реакцию на кнопки при сверхнизком потреблении.