Ложные срабатывания внешнего прерывания
Ложные срабатывания внешнего прерывания
В Мега8 у меня был реализован счетчик авто-одометра на таймере 0. Таймер увеличивал свой счетчик на 1 при ниспадающем фронте сигнала (точную форму сигнала не знаю, но этот же сигнал идет на микросхему штатного одометра, уровень меняется в диапазоне 0-4,9В). Счетчик считал правильно и стабильно.
Сейчас я реализовал счетчик на прерывании. При ниспадающем сигнале срабатывает прерывание и я программно увеличиваю на 1 определенную переменную.
Беда в том, что счетчик на прерывании стал работать не стабильно, иногда он начинает очень быстро считать сам по себе. В железе ничего не менялось, только поменял вход сигнала с Т0 на INT1.
Как такое возможно, понять не могу. Есть ли в железе какое-то отличие во входах Т0 и INT1?
Сейчас я реализовал счетчик на прерывании. При ниспадающем сигнале срабатывает прерывание и я программно увеличиваю на 1 определенную переменную.
Беда в том, что счетчик на прерывании стал работать не стабильно, иногда он начинает очень быстро считать сам по себе. В железе ничего не менялось, только поменял вход сигнала с Т0 на INT1.
Как такое возможно, понять не могу. Есть ли в железе какое-то отличие во входах Т0 и INT1?
Последний раз редактировалось dandan Пн фев 21, 2011 12:02:21, всего редактировалось 3 раза.
- Реклама
Re: Счетчик аппаратный и программный на перерывании
Вывод INT к питанию подтянут?
Re: Счетчик аппаратный и программный на перерывании
Нет, но входящий сигнал имеет 0 и +4.9В, и T0 работал без подтяжки. Я его беру со входа штатной микросхемы, которая считает пробег.Vov123 писал(а):Вывод INT к питанию подтянут?
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Счетчик аппаратный и программный на перерывании
Вы на 100% исключаете программный косяк при переделке с таймера на прерывание?
Re: Счетчик аппаратный и программный на перерывании
Если в электрической части разницы между входами INT1 и T0 нет, то получается программный косяк. Я его ищу уже долго но не нахожу. В Протеусе все нормально работает, в железе на столе - тоже. Ставлю в авто - не работает.Engineer_Keen писал(а):Вы на 100% исключаете программный косяк при переделке с таймера на прерывание?
- Реклама
Re: Счетчик аппаратный и программный на перерывании
Значит подтягивайте к земле.Попробуйте дотронутся пальцем - будут ложные срабатывания,потому как болтается в воздухе.
Re: Счетчик аппаратный и программный на перерывании
Блин, ничего не понимаю. Подтягиваю к земле или к питанию 1кОм резистор, дотрагиваюсь рукой идут ложные срабатывания. Рядом вход на кнопке, подтянутый 10кОм, дотрагиваюсь рукой никаких ложных срабатываний нет. Уже контроллер поменял на другой, та-же хрень. Что делать не пойму.Vov123 писал(а):Значит подтягивайте к земле.Попробуйте дотронутся пальцем - будут ложные срабатывания,потому как болтается в воздухе.
Еще пробовал без подтяжки, проводок от ножки 10см, замыкаю на массу, дотрагиваюсь пинцетом к ножке и идут ложные срабатывания. Такое впечатление, что прерывание срабатывает не от смены лог. уровня, а от любых незначительных колебаний напряжения на ножке. Как это возможно? Что делать? Может есть еще какие-то "хитрые" настройки этих прерываний?
Re: Ложные срабатывания внешнего прерывания
Неужели никто с таким не сталкивался?
Вопрос простой: могут ли наводки менять логический уровень на входе INT1, тем самым вызывая прерывание, если он притянут к +5В резистором 1кОм? И что делать если такое происходит?
Вопрос простой: могут ли наводки менять логический уровень на входе INT1, тем самым вызывая прерывание, если он притянут к +5В резистором 1кОм? И что делать если такое происходит?
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
Во первых, это может быть программный глюк (напримр неправильно настроен вход внешнего прерывания, этим иногда страдает визард CVAVR)
Во вторых это может быть аппаратное срабатывание - ставьте RC цепочку (см простейший НЧ-фильтр).Внутренняя подтяжка иил внешняя (что лучше внутренней) должна быть обязательна ибо во время работы мотора, формируются достаточно сильные уровни помех
Во вторых это может быть аппаратное срабатывание - ставьте RC цепочку (см простейший НЧ-фильтр).Внутренняя подтяжка иил внешняя (что лучше внутренней) должна быть обязательна ибо во время работы мотора, формируются достаточно сильные уровни помех
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: Ложные срабатывания внешнего прерывания
Программа написана в AVR StudioMeteor писал(а):Во первых, это может быть программный глюк (напримр неправильно настроен вход внешнего прерывания, этим иногда страдает визард CVAVR)
Настройка портов:
LDI R16,0b11100010
OUT DDRD,R16
SBI PORTD,3
Настройка прерывания такая:
LDI R16,0b00001000
OUT MCUCR,R16
LDI R16,0b10000000
OUT GICR,R16
Ну не знаю, прерывание срабатывает дома на столе, от прикосновения рукой, подтяжка к "+" 1кОм. Рядом вход от кнопки с подтяжкой 10кОм не реагирует на прикосновение. Хрень какая-то, просто опускаются руки.Meteor писал(а): Во вторых это может быть аппаратное срабатывание - ставьте RC цепочку (см простейший НЧ-фильтр).Внутренняя подтяжка иил внешняя (что лучше внутренней) должна быть обязательна ибо во время работы мотора, формируются достаточно сильные уровни помех
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
А есть чем "померить" состояние входа? Может где непропаяно? И еще, попробуйте вместо SBI PORTD,3 написать
ldi r16, 0x08
out protd,r16
ldi r16, 0x08
out protd,r16
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: Ложные срабатывания внешнего прерывания
Есть только тестер, на нем стабильно 4,99В и когда дотрагиваюсь напряжение не меняется.Meteor писал(а):А есть чем "померить" состояние входа? Может где непропаяно? И еще, попробуйте вместо SBI PORTD,3 написать
ldi r16, 0x08
out protd,r16
Пробовал на INT0 - тоже самое.
А может Reset на это влиять, он у меня не притянут ничем? Я уже не знаю, что придумать.
Пробовал в обработчике прерывания опрашивать порт, в итоге на нем всегда "1".
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
Опрашиать как?
in r16, portd?
или
in r16, pind?
Сброс надо подтягивать обязательно
Попробуйте параллельно входу, поставить конденсатор, емкостью 0,01...0,5 мкф
in r16, portd?
или
in r16, pind?
Сброс надо подтягивать обязательно
Попробуйте параллельно входу, поставить конденсатор, емкостью 0,01...0,5 мкф
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: Ложные срабатывания внешнего прерывания
in r16, pindMeteor писал(а):Опрашиать как?
in r16, portd?
или
in r16, pind?
Сброс вчера пробовал на +5 замыкать, разницы нет.Meteor писал(а): Сброс надо подтягивать обязательно
Попробуйте параллельно входу, поставить конденсатор, емкостью 0,01...0,5 мкф
Конденсатор 10nF помогает, но в автомобиле пока не проверял. Но конденсатор заваливает фронты, а мне нужно измерить длину импульса.
Еще интересный момент. Замкнул входы INT1 и T0, в программе одновременно считаю импульсы счетчиком и в прерывании. В результате при касании рукой счетчик не считает вообще, а в прерывании получается 210 импульсов в секунду на 4Мгц тактовой, причем количество насчитанных импульсов зависит напрямую от тактовой частоты, на 1МГц насчитывает 55 импульсов. Вот такая хрень.
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
Схему и весь код выкладывайте - а то гадание беспредметное получается
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
Была похожая ситуация, в авто постоянно срабатывало прерывание по INT0 (открытие двери), особенно при запуске двигателя.
Решилось установкой на ногу МК керамики 0.1мкф и стабилитрона в качестве защиты, до этого делитель резистивный.
И само собой проводники до делителя и после к МК надо покороче делать и подальше от источников помех или силовой части схемы.
Решилось установкой на ногу МК керамики 0.1мкф и стабилитрона в качестве защиты, до этого делитель резистивный.
И само собой проводники до делителя и после к МК надо покороче делать и подальше от источников помех или силовой части схемы.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
вся проблема в том, что бортовая сеть авто это совсем не просто питание +12В, там есть очень хитрые импульсы, которые генерирует катушка зажигания в момент формирования искры, их амплитуда может достигать -/+250В, при этом на самом входе меги, если цепь чисто резистивная, получаются колебания в такт с искрообразованием от -0,5В до +5,6В (смотрел осцилом), т.е. возникновение условия "прерывания INT0 по спаду".
я такие цепи подключаю через диод в прямом направлении и если позволяют временные характеристики сигнала - то и фильтрующий конденсатор 0.1 мкф.
я такие цепи подключаю через диод в прямом направлении и если позволяют временные характеристики сигнала - то и фильтрующий конденсатор 0.1 мкф.
Re: Ложные срабатывания внешнего прерывания
Да это все понятно, только оно не работает как надо дома на столе, со стабилизированным источником питания.GP1 писал(а):вся проблема в том, что бортовая сеть авто это совсем не просто питание +12В, там есть очень хитрые импульсы, которые генерирует катушка зажигания в момент формирования искры, их амплитуда может достигать -/+250В, при этом на самом входе меги, если цепь чисто резистивная, получаются колебания в такт с искрообразованием от -0,5В до +5,6В (смотрел осцилом), т.е. возникновение условия "прерывания INT0 по спаду".
я такие цепи подключаю через диод в прямом направлении и если позволяют временные характеристики сигнала - то и фильтрующий конденсатор 0.1 мкф.
И самое главное, что пробег нормально считался счетчиком T0, схема подключения не менялась, только входы поменял Т0 на INT1.
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: Ложные срабатывания внешнего прерывания
По питанию у МК что стоит? попробуйте заменить МК на другой, схему плс покажите.dandan писал(а):Да это все понятно, только оно не работает как надо дома на столе, со стабилизированным источником питания.GP1 писал(а):вся проблема в том, что бортовая сеть авто это совсем не просто питание +12В, там есть очень хитрые импульсы, которые генерирует катушка зажигания в момент формирования искры, их амплитуда может достигать -/+250В, при этом на самом входе меги, если цепь чисто резистивная, получаются колебания в такт с искрообразованием от -0,5В до +5,6В (смотрел осцилом), т.е. возникновение условия "прерывания INT0 по спаду".
я такие цепи подключаю через диод в прямом направлении и если позволяют временные характеристики сигнала - то и фильтрующий конденсатор 0.1 мкф.
И самое главное, что пробег нормально считался счетчиком T0, схема подключения не менялась, только входы поменял Т0 на INT1.
Re: Ложные срабатывания внешнего прерывания
Схемы нарисованной, к сожалению, нет. Нарисую - выложу.TechMike писал(а):
По питанию у МК что стоит? попробуйте заменить МК на другой, схему плс покажите.
По питанию сначала последовательно диод, затем параллельно 1000мкФ и 0,1мкФ, потом КР142ЕН5, после него 220мкФ и 0,1мкФ. Дома на столе питание от стаб. источника 12В.
На вход INT1 подтяжка 1кОм (начал с 10кОм, потом уменьшал, чем меньше сопротивление, тем меньше ложных срабатываний) припаян проводок 10см за второй конец беру рукой и прерывание начинает срабатывать или пинцетом касаюсь ножки, та же хрень.
МК менял уже 2 раза. В программе пробовал выкидывать все, кроме обработки прерывания.



