Проблема с прерыванием INT0.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
DimAnoiD
Родился
Сообщения: 7
Зарегистрирован: Чт янв 03, 2008 23:04:59
Контактная информация:

Проблема с прерыванием INT0.

Сообщение DimAnoiD »

Здравствуйте! Во-первых хочу поблагодарить и сказать Спасибо за хороший сайт, за понятную и простую обучалку и за все остальное! :) Почитал курс и осмелился приобрести контроллер и поработать вживую как говорится. ) Собрал я значит на макетке все самое необходимое для мигания четырьмя светодиодами (больше не нашел :) ). Все работает. И одним помигал, и всеми и туда-сюда помигал. Теперь решил с кнопкой на внешнее прерывание поработать. Контроллер у меня... извините за выражение - AT90S1200. :) (Скоро приобрету тини2313) Алгоритм таков: мигает первый светодиод, после нажатия кнопки он отключается и начинает мигать следующий, еще нажал - второй отключился, третий замигал и так далее по кольцу. Написал, прошил работает. Но, когда отпускашь кнопку ИНОГДА происходит "перескакивание" мигания с одного на другой или даже два сразу пропускаются. Думаю проблема в дребезге контактов при их размыкании, но как мне это программно решить - не знаю, поэтому и прошу помощи. Ниже прикрепляю исходник. Заранее благодарю!
Вложения
source.asm
Исходник программы.
(1.55 КБ) 601 скачивание
DimAnoiD
Родился
Сообщения: 7
Зарегистрирован: Чт янв 03, 2008 23:04:59
Контактная информация:

Сообщение DimAnoiD »

После сбоя в работе форума все сообщения темы удалились, но ничего... Главное наконец-то проблема решена! : :))) Конечно же с вашей помощью и помощи многоуважаемого ARV. ) Сначала добавил конденсатор 0,1мкф параллельно кнопке - работа улучшилась, но несмотря на нажатия, не происходило переключеня с третьего светодиода на четвертый. В подпрограмму обработчика, добавил MOV Temp,Pin , несмотря на то что эта команда существует в основном цикле программы - заработало... Смутным мне остается причина возникновения этого сбоя, физически не могу представить... Ниже немного измененный, рабочий на данный момент исходник. Всем Спасибо! :)
Вложения
SourceL.asm
(1.78 КБ) 334 скачивания
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

И тем не менее в своем коде ты не устранил указанный мной недочет: не сохраняешь SREG в обработчике прерывания. Это плохо, даже если сейчас работает. Посеешь наплевательское отношение к SREG - пожнешь кучу проблем в настоящих программах.

Еще недочеты: конденсатор на входе INT не нужен. Флаг запроса прерывания на выходе из обработчика не сбрасываешь - это плохо. Команда, стоящая прямо на метке loop - бесполезная, ее смело можно выкинуть. Какая тактовая частота? Для гарантии защиты от дребезга нужна задерка не менее 10 мс. Если тактовая частота высокая - задержки в 256 повторов цикла (в обработчике) может не хватить для получения 10 мс.

Причина этих сбоев (уверен - в текущем варианте программы не устраненная полностью) кроется в том, что пока ты делаешь задержку в своем прерывании, из-за дребезга может снова установиться флаг запроса, который ты не сбрасываешь. Т.е. после завершения прерывания мгновенно возникнет новое (но еще от старого нажатия кнопки) - и твой огонь перескочит через одну позицию.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
DimAnoiD
Родился
Сообщения: 7
Зарегистрирован: Чт янв 03, 2008 23:04:59
Контактная информация:

Сообщение DimAnoiD »

Тактовая частота 4МГц. Флага внешнего прерывания INT0 в микроконтроллере AT90S1200 нет. Я вообще-то сделал как вы сказали насчет сохранения регистра SREG, но после того как заработало, убрал эти команды, верну обязательно. Задержка в обработчике 6,4мс, сделаю больше десяти... Вобщем, доработаю с вашими рекомендациями и как закончу выложу сюда...
DimAnoiD
Родился
Сообщения: 7
Зарегистрирован: Чт янв 03, 2008 23:04:59
Контактная информация:

Сообщение DimAnoiD »

Если убрать команду возле метки loop: mov Temp,Pin
то нарушается работа программы. Можно поставить туда ldi Temp,0x01, но в этом случае вызов прерывания ничего не изменит - будет мигать только первый светодиод. Сохранил SREG в стеке:
in Temp5,SREG
push Temp5
...
...
pop Temp5
out SREG,Temp5

Компилятор ругнулся на отсуствие стека как такового... В этом МК нет ОЗУ, но как написано в даташите есть аппаратный трехуровневый стек, который использует сам контроллер - "Для обработки прерываний и подпрограмм..." Так что это тоже не прокатило... Из изменений. Увеличил время цикла антидребезга до 16мс, а остальное все осталось как прежде... На этом думаю тему можно закрыть - так как основная цель достигнута, все работает без проблем и сбоев... Спасибо! :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

мда, не учел я в своих советах материально-техническую базу :) но сохранять можно и в свободном регистре. а на счет команды mov Temp, Pin - чего-то не пойму:

Код: Выделить всё

   mov  Temp, Pin
   ldi Temp, 0
первая команда абсолютно бесполезна, т.к. следующая затирает значение Temp нулем. К чему пересылка???
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
DimAnoiD
Родился
Сообщения: 7
Зарегистрирован: Чт янв 03, 2008 23:04:59
Контактная информация:

Сообщение DimAnoiD »

Ни в одном из приведенных мной исходников такого нет... Если вы имеете ввиду мое последнее собщение, то я имел ввиду замену, а не добавление еще одной команды... :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

DimAnoiD писал(а):Ни в одном из приведенных мной исходников такого нет... Если вы имеете ввиду мое последнее собщение, то я имел ввиду замену, а не добавление еще одной команды... :)

Вот кусок из последнего размещенного тут твоего исходника:

Код: Выделить всё

loop:   mov   Temp,Pin      ;цикл мигания светодиодом
   ldi   Temp,0x00
   rcall   Delay
   ldi   Temp,0x00
   rcall   Delay
   rjmp   loop

по-твоему, первая и вторая строчки - это не то, о чем я говорю?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
DimAnoiD
Родился
Сообщения: 7
Зарегистрирован: Чт янв 03, 2008 23:04:59
Контактная информация:

Сообщение DimAnoiD »

Ааа! Ну теперь понятно.. :) При копированиии из окна AVRStudio в Блокнот, из-за большого количества табуляций, вид исходника бывает нереальный для восприятия. И когда я удалял эти больший пробелы в строках, допустил вот такую ошибку, вы можете заметить в строке с меткой loop: после комментария идет команда вызова подпрограммы задержки rcall Delay... :) На всякий случай выкладываю нормально отредактированный код.
Вложения
Source3.asm
(2.08 КБ) 570 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

DimAnoiD писал(а):Ааа! Ну теперь понятно.. :)
Ааа! Ну теперь понятно.. :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
nicname
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 16, 2006 22:20:04

Сообщение nicname »

Попробовал вот эту среду : http://www.matrixmultimedia.com/Flowcode3a-X.php ... Здорово - просто и сердито для простых программ !!! Кто знает , как оформить тут прерывание от Int0 ?
Изображение
nicname
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Позырить в примерах. Наверняка есть и в хелпе еще. Механизм работы прерывания раскрыт на стр 3 под кнопкой ВВВ ниже.
Последний раз редактировалось tych Ср апр 16, 2008 19:09:23, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
nicname
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 16, 2006 22:20:04

Сообщение nicname »

Ну , в хелпе только для таймера ...
А тут чего писать ?
Изображение
nicname
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
nicname
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 16, 2006 22:20:04

Сообщение nicname »

Да они есть у меня , только , там чего-то надо для просмотра картинок ещё устанавливать , да и сама программа крякнутая ... Так и непонятно , чего делать-то ?
nicname
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

nicname писал(а):Да они есть у меня , только , там чего-то надо для просмотра картинок ещё устанавливать , да и сама программа крякнутая ... Так и непонятно , чего делать-то ?


Почитайте как устроены прерывания на стр 3 под кнопкой Изображение ниже и в диалоге на вашем скриншоте сделайте настройки.
Последний раз редактировалось tych Ср апр 16, 2008 22:10:08, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
nicname
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 16, 2006 22:20:04

Сообщение nicname »

Нет у меня ни страниц , ни Go! -
Изображение
Изображение

P.S. Ларчик просто открывался .... :))
nicname
MetEl
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Чт окт 18, 2007 16:45:30
Откуда: из Питера

Сообщение MetEl »

Блин, здоровская програмулина!
На днях поюзаю!
Пасиба.
Дон Амброзио

Сообщение Дон Амброзио »

Какие красивые картинки.. Почему у меня таких нет :(

Что это за программы такие? Может сказать гже качнуть? Тоже хачу такую красотищу. А то в нотепаде только черные буквы на белом фоне... Никакой красоты :(
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

А Вы в Фаре работайте, будут белые на синем. :wink:
Оптимизм х (Опыт + Знания) = const
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»