"Детектор помех"

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

"Детектор помех"

Сообщение slavokhire5 »

Добрый день, уважаемые коты:)
попросили меня сделать штучку на тини 13, кот. будет по входам следить за помехами. *что в обвязке - не знаю
если на одном из 3-х пинов "1", инкриментируем соответствующий элемент массива А1. Делаем 100 замеров, между замерами пауза 30мс (сон). если один из элементов A1 превысил значение 10, то инкриментируем соответствующий пину элемент массива А2. Если за время работы устройства значение А2 превысит 6, отключаем этот пин.
В протеусе вроде бы бегает все прилично. А после заливки в устройство начинается в нем каша).
на ресет подано 5в, +питания 5в, вроде стабильно. смотрел осциллографом, провалов не видел

схема включения 1: 2 пина на землю, 1 на +питания.
По светодиодам видно, что проходит много прерываний по вачдогу (сколько не могу сказать, осц. столько не пишет), затем прерывание от пинчейнж :shock: !! откуда оно берется, если выходы не висят в воздухе?? кроме того за 100 циклов на + питания значение А1 должно быть == 100, 6 таких проходов (18..20 секунд) - А2 равно 6 и пин отключается (DIDR0.X = 1). но я этого не вижу.

схема включения 2: все 3 пина на землю. отрываю один пин на мгновение в воздух, вижу прерывание по пинчейнж, сажу назад на землю. вижу много прерываний по вачдогу, затем еще одно от пинчейнж и опять много по вачдогу. но ведь все пины уже давно на земле и перед разрешением прерываний от пинчейнж и уходом в спящий я чищу флаг.

в общем совсем замучился.
возможно что не так в коде, или я не так понимаю механику некоторых вещей в микроконтроллере? в протеусе-то работает....
может компилятор меня не так понимает (winavr 2010, -оs)? если кто-то хорошо знает ассемблер, загляните в дизасм :)
Вложения
prog.rar
проект в винавр, схемка в протеусе
(50.25 КБ) 196 скачиваний
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Реклама
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: "Детектор помех"

Сообщение shads »

На словах можно не понять друг друга, гляньте алгоритм, так или нет.....

Изображение
Вложения
alg1.jpg
(36.01 КБ) 820 скачиваний
Реклама
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: "Детектор помех"

Сообщение slavokhire5 »

Нарисовал схему. Примерно так должно работать :)
*1-й раз рисую блок-схему. обычно на бумажке if-else и функции расписываю

Изображение
Вложения
1.JPG
Алгоритм
(82.99 КБ) 274 скачивания
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: "Детектор помех"

Сообщение shads »

А считать надо переходы в 1 (даже между измерениями),
или
именно наличие высокого уровня в момент измерения?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: "Детектор помех"

Сообщение slavokhire5 »

я делаю по наличию "1"
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Реклама
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: "Детектор помех"

Сообщение shads »

А для чего тогда делаешь через прерывая?
Можно же упростить намного, если без пребываний запилить.....
Реклама
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

Re: "Детектор помех"

Сообщение codenamehawk »

"// watchdog работает в режиме ПРЕРЫВАНИЯ, прерывание через 32мс"
а в прерывании ISR(PCINT0_vect) 100 мс задержка и как это должно работать?

Примените <avr/wdt.h>: Watchdog timer handling, избавит от многих неожиданностей.

Про дребезг контактов кнопки слышали?
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: "Детектор помех"

Сообщение slavokhire5 »

codenamehawk, спасибо:) не задумывался про avr/wdt.h. Правда tiny13 эта библиотека не поддерживает, но можно покоптиться и дописать:)
Про дребезг кнопки слышал. И видел даже. Но в данном случае его не должно быть. Как только состояние пина изменяется, прерывания по pinchange запрещаются, контроллер должен входить в цикл на 100 измерений (3сек+). За это время дребезг успокоится. По поводу задержки в обработчике прерывания по pinchange - теоретически могу поставить любую (некрасиво, но мгновенные реакции тут не нужны). прерывания от wdt разрешены только в цикле 100 измерений.
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

Re: "Детектор помех"

Сообщение codenamehawk »

slavokhire5 писал(а): не задумывался про avr/wdt.h. Правда tiny13 эта библиотека не поддерживает.
Я подключил эту библиотеку в ваш проект и компилятор не жаловался. Откуда инфа, что не поддерживает?

Если, в то время когда прерывания запрещены, произойдет дребезг контактов кнопки то установится флаг прерывания(а так оно и будет), обработан он будет один раз, после разрешения прерываний.
Не смотрел может вы сбрасываете флаг перед разрешением прерываний, очень мало комментариев у вас в программе.
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: "Детектор помех"

Сообщение slavokhire5 »

дааааа... а я думал, что чищу флаг :o
• Bit 5 – PCIF: Pin Change Interrupt Flag
When a logic change on any PCINT[5:0] pin triggers an interrupt request, PCIF becomes set
(one).
If the I-bit in SREG and the PCIE bit in GIMSK are set (one), the MCU will jump to the cor-
responding Interrupt Vector. The flag is cleared when the interrupt routine is executed.
Alternatively, the flag can be cleared by writing a logical one to it.

как-то не ожидал. флаг устанавливается единицей, и чистится вручную тоже единицей :o
таки надо в даташите целиком пункты читать, а не до интересующего места )))
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Ответить

Вернуться в «Разные вопросы по МК»