Страница 1 из 1
Удивительные чудеса с прерываниями Мега8515
Добавлено: Чт окт 11, 2012 23:14:40
mill
Ди помоги мне пожалуйста!
Исходные данные
Мега 8515 работает от 3.3В принимает через int0-pd2 сигнал
от цифрового устройства работающего от АА батарейки (1,55В)
Сигнал примерно 40кгц частотой - мега по дефолту 1Мгц
Выставляю MCUCR например на 0b00000010 - прерывание по спаду!
Значит после срабатывания прерывания некоторое время на pd2
уровень должен быть 0! Теперь в обработчике прерывания
первой же инструкцией сохраняю в небольшой буфер друг за дружкой
значения Порта Д и потом их неспешно изучаю на компе!
Так какого же мое удивление когда кроме 0 на pd2
обнаруживаю иногда 1!!!! Это как так - произошел спад с 1 до 0
ноль должен держаться некоторое время а сканирование порта инструкцией PIND
показывает там 1???
Порт меги включен DDR на вход и PortD = 0 вольт и никто в него из программы не пишет 1 - я проверил!
Полтора вольта достаточно чтоб мега считала его 1 (даташит стр 223-233 -
типикал атмега характеристикс и гистерезис)
На проводах ниче не падает - токи микроскопические - сопротивление провода
полома! Помех близких нет! Кондер по питанию 104ый и 220mkf!
Контроллер не ребутиться просто так! Без кварца!
Цифрового осцила нет в хозяйстве!
Поставил транзистор ВС337 для усиления сигнала- 10Ком коллектором на плюс и 15Ком на базу! Еммитер на землю! Не помогло!
Пробовал подтягивать выход устройства 500Ком или 1Мом резистором к плюсу (устройство микромощное - токи микроамперные) - без толку!
Думал помеха пробегает какая - пробовал кондер на землю ставить на 1000пФ - без толку!
Просканировал контроллером поток на предмет самого короткого импульса - более 100 тактов контроллера!
То есть не может сигнал измениться с 0 до 1 за несколько тактов - на это уходят сотни тактов МК
Весь мозг сломал!
Если не разобраться с Этим получается что ингода при подсчете длин импульсов и длин пауз между ними
в буфере иногда обнаруживается два импульса низкого уровня без стоящего между ними высокого импульса! Бред какойто!
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 07:27:02
BOB51
Для начала схемку и полный код на посмотреть надобно

Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 07:35:33
akl
Здравствуйте. Я, конечно, не
Ди, но может попробовать подсчитать "некоторое время". У меня получается, что при тактировании "меги по дефолту 1Мгц" и входном сигнале с периодом 25мкс (40кГц) ни о каких "сотнях тактов" говорить нельзя. Может попробовать провести лог состояния PIND2 без обработчика прерывания INT0, вход в который занимает 4мкс.
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 07:55:36
ploop
mill, даже если учесть, что вы нигде не ошиблись в коде (хотя в этом нельзя быть уверенным никогда), вы уверены, что на линии нет звона?
Посмотрите, как выглядит прямоугольный импульс при длине дорожки 3 сантиметра. Если провод длиннее, всплески будут больше, и вполне способны дотянуть до единицы.
Попробуйте завести сигнал через резистор в несколько килоом.
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 10:06:25
mill
BOB51 писал(а):Для начала схемку и полный код на посмотреть надобно

Да схема проста как овощь!
Мега8515 питается от кренки на 3и3В от сетевого ЗУ 220-9В
на выходе кренки 220мкф по питанию 104 кондер
И через УАРТ и преобразователь мах232 подключена к компу!
Земля меги и земля устройства соединена микропроводом длиной около 10см и выход данных устрйтсва
к выходу ПД2-ИНТ0 присоединен тоже 10см проводом (щас еще транзистор сделал для усиления - но все бестолку)!
Код простой
В прерывании так вообще 2е строчки
isr int0 ()
{Y=PIND;
if(Bit<48){BIt++; Array[Bit]=Y;}
}
Начало программы
инициализируем DDR PORT итп
mcucr=0b00000001; gicr=0b01000000; asm("sei");
Ну а дальше по одному байтики массива Аррай пересылаем в комп для анализа!
Все!
В программе еще много какого мусора есть - но оно все отключено и закомментировано для отладки!!
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 10:14:03
mill
ploop писал(а):mill, даже если учесть, что вы нигде не ошиблись в коде (хотя в этом нельзя быть уверенным никогда), вы уверены, что на линии нет звона?
Посмотрите, как выглядит прямоугольный импульс при длине дорожки 3 сантиметра. Если провод длиннее, всплески будут больше, и вполне способны дотянуть до единицы.
Попробуйте завести сигнал через резистор в несколько килоом.
Ок попробую - просто устройство микромощное и боюсь что резистор еще та нагрузка для выхода!
Просто если бы всплески были они отобразилсь бы как отдельное прерывание и были бы зафиксированы при сканировании! (а я сначала просканириовал поток на предмет накождения самого короткого импульса)
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 10:19:04
mill
akl писал(а):Здравствуйте. Я, конечно, не
Ди, но может попробовать подсчитать "некоторое время". У меня получается, что при тактировании "меги по дефолту 1Мгц" и входном сигнале с периодом 25мкс (40кГц) ни о каких "сотнях тактов" говорить нельзя. Может попробовать провести лог состояния PIND2 без обработчика прерывания INT0, вход в который занимает 4мкс.
Все верно самые короткие импульсы около 25 тактов а длинные - сотни и тысчи даже!
А в чем смысл лог без прерывания? Массив быстро забьется и все!
Можно попробовать тогда мегу ускорить до 8Мгц если вы предполагаете что за 4 такт устройство успевает импульс поменять!
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 11:23:50
akl
mill писал(а):Все верно самые короткие импульсы около 25 тактов а длинные - сотни и тысчи даже!
А в чем смысл лог без прерывания? Массив быстро забьется и все!
Можно попробовать тогда мегу ускорить до 8Мгц если вы предполагаете что за 4 такт устройство успевает импульс поменять!
Ничего я не предполагаю. Знаю, что "чудес с прерываниями Мега8515" не бывает.
Меряет длительности и периоды и покруче Ваших требований.
Вам нужно определиться "кто виновато и чё делать". Можно вообще отсоединить устройство от контроллера и провести лог на предмет ложных срабатываний. Можно вместо устройства подключить меандр 1кГц и выяснить есть ли ложные срабатывания в течение 500мкс длительности высокого уровня, затем в течение 500мкс длительности низкого уровня.
mill писал(а):mcucr=0b00000001
Вызов прерываний по любому перепаду сделан намеренно или это ошибка?
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 11:30:10
mill
akl писал(а):mill писал(а):Все верно самые короткие импульсы около 25 тактов а длинные - сотни и тысчи даже!
А в чем смысл лог без прерывания? Массив быстро забьется и все!
Можно попробовать тогда мегу ускорить до 8Мгц если вы предполагаете что за 4 такт устройство успевает импульс поменять!
Ничего я не предполагаю. Знаю, что "чудес с прерываниями Мега8515" не бывает.
Меряет длительности и периоды и покруче Ваших требований.
Вам нужно определиться "кто виновато и чё делать". Можно вообще отсоединить устройство от контроллера и провести лог на предмет ложных срабатываний. Можно вместо устройства подключить меандр 1кГц и выяснить есть ли ложные срабатывания в течение 500мкс длительности высокого уровня, затем в течение 500мкс длительности низкого уровня.
mill писал(а):mcucr=0b00000001
Вызов прерываний по любому перепаду сделан намеренно или это ошибка?
Отсоединенное устройство не ловит помехи! Хотя проверю еще раз!
Где мне взять эталонный меандр? Еще одну мегу зашить и подключить?
Ошибка - по памяти писал!
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 11:36:29
mill
Еще отмечу что по ДШ у 8515 оч малый гистерезис - 0.1В может в этом дело? у 16меги почти в три раза больше!

Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 11:51:06
akl
Звуковая есть? Загрузите программу и получите, конечно, не эталонный, но вполне пригодный синус. Через резистор 1кОм подаете прямо на вход PD2/INT0.
SinGen.zip
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 11:53:45
mill
akl писал(а):Звуковая есть? Загрузите программу и получите, конечно, не эталонный, но вполне пригодный синус. Через резистор 1кОм подаете прямо на вход PD2/INT0.
SinGen.zip
Бпасибо! Хороший совет! На звуковуху я не подумал!
Надо разьем jack найти пустой? Земля крайний к корпусу и один из оставшихся выбрать? Верно?
Re: Удивительные чудеса с прерываниями Мега8515
Добавлено: Пт окт 12, 2012 20:57:08
codenamehawk
В программе без оптимизации
прежде чем будет прочитан порт, будет выполнено 0098 - 007С = 1С или 28 шагов процессора.
и так частота проца 1000000 / 28 = 35714 это и есть максимальная частота которую сможете отследить.
Возможно еще несколько шагов проца уйдет на вызов самого прерывания.
В зависимости от скважности импульсов, лог 0 будет присутствовать не весь период, а меньше.
По идее необходимо повышать частоту проца.