Прерывания по любому изменению ПортаВ в АТтини2313, как?

Обсуждаем контроллеры компании Atmel.
Ответить
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Может и тупой вопрос..., но мне надо организовать внешнее прирывание именно на портуВ, 7 пин. т.е. Я конфигурирую на то, чтобы этот 7 пин реагировал на изменение сигнала.
Вопрос. Я так понимаю, что он будет реагировать, как на фронт, так и на спад сигнала??? Т.е. если я запущу на него меандр, он мне будет ловить по два прерывания на один период????
Как сделать, чтобы ловил только фронты (или спады)??
Станислав
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Я просто понимаю, что можно уйти в прерывание и задать там задержку, чтобы например, отловив фронт, проигнорировать следующий спад импульса. Но у меня импульсы с частотой 1 Гц, значит в прерывании сидеть очень долго надо будет, что меня в корне не устраивает, т.к. .....
А. ВСЕ, ПРИДУМАЛ, КАК СДЕЛАТЬ... =0)

СПасибо всем за внимание. Прошу тему закрыть уже за ненадобностью...

Хотя, если кто ответит по поводу правильности моего понимания работы этого вида прерываний, буду очень рад. =)
Станислав
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Да, прерывание вызывается на любом изменении лог. уровня на выводе.
Нужно просто проверять уровень на ноге вначале прерывания (бит 7 регистра PINB). Если лог. 1 - был возрастающий фронт, 0 - спадающий.

Надеюсь, вы до этого догадались :wink:
Последний раз редактировалось blackx Пн авг 12, 2013 19:03:30, всего редактировалось 1 раз.
Изображение only pure true norwegian blackx Изображение
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

Сообщение АСУ »

СКАЗОЧНИК писал(а):Вопрос. Я так понимаю, что он будет реагировать, как на фронт, так и на спад сигнала??? Т.е. если я запущу на него меандр, он мне будет ловить по два прерывания на один период?
Правильно понимаете.
СКАЗОЧНИК писал(а):Я просто понимаю, что можно уйти в прерывание
Один из вариантов: в первом прерывании по фронту взводить флаг, в следующем сбрасывать флаг.
Реклама
Эиком - электронные компоненты и радиодетали
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

=))) Да я все проще придумал, хотя думал про то, чтобы считывать состояние на ПИН7, определять фронты или спады. =) Мне просто надо было подсчитать количество импульсов, т.е. секунд в минуте, от часов РТС. В голову пришло считать количество прерываний, а если их идет по два на импульс, нужно просто считать в два раза прерываний. Т.е. не 60 за минуту, а 120. Вот и все. Контроллер в счетчике накопит 120 значений, поймет что прошла минута и выполнит запрос на РТС и обновит время на индикаторе. Примерно так.

Спасибо всем.
Станислав
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15745
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Для таких задач (подсчет внешних импульсов) используется таймер/счетчик (Т0 или Т1) в режиме счета с внешнего входа.
8)
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

таймер/счетчик (Т0 или Т1)
И это разумно, можно еще и просто прерывание внешнее INT0 или INT1, но я сделал все шиворот на выворот... Сначала все спаял, а потом мне приспичело сделать прерывание... Когда уже все выводы были заняты другими функциями. Приходится использовать то, что осталось. 8)
Станислав
Друг Кота
Аватара пользователя
Сообщения: 15745
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Садомазохизмо однако... :cry:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Мне надо еще на этот вывод сделать вывод сигнала будильника... =) Т.е. прерывания буду временно отключать, а сразу после сигнала снова включать, ну и обновлять считывание значений часов и минут с РТС....
Станислав
Друг Кота
Аватара пользователя
Сообщения: 15745
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

AVRки для таких дел (работа одновременно с несколькими прерываниями) не совсем удобны по сравнению с mcs51.
Как один из вариантов - соорудить всю начинку часиков внутри МК, а с внешней RTC обмениваться только при запуске и перед отключением (ну и по спецсобытиям а-ля будильник или корректор хода).
Частое обращение к регистрам часиков может вносить погрешность в их работу (смотри http://radiokot.ru/forum/viewtopic.php?f=61&t=83313 )
:beer:
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

BOB51 дело говорит
Я когда-то тоже часы на тиньке собирал. Тактировал кристалл от кварца 3.2768MHz (пусть и не сильно распространенный, но со стандартного ряда). 8-ми разрядный таймер (не помню точно при каком предделитете) переполняется ровно 12.5 раз в секунду. А далее дело техники...
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Т. е. вы рекомендуете сделать так, чтобы МК сам считал время и выводил его на индикатор? А синхронизировать с РТС только время от времени?

Я планировал сделать счетчик количества прерываний секунд от вывода SQW (настроен на 1 Гц), и по прошествии минуты запрашивать показания времени из часов и выводить их на индикатор... Т.е. обращаться к РТС каждую минуту.
Станислав
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

СКАЗОЧНИК писал(а):Т. е. вы рекомендуете сделать так, чтобы МК сам считал время и выводил его на индикатор? А синхронизировать с РТС только время от времени?

Я планировал сделать счетчик количества прерываний секунд от вывода SQW (настроен на 1 Гц), и по прошествии минуты запрашивать показания времени из часов и выводить их на индикатор... Т.е. обращаться к РТС каждую минуту.
А что мешает считать на основе этого сигнала (1Гц) время внутри контроллера постоянно?
Друг Кота
Аватара пользователя
Сообщения: 15745
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если обращение не к массиву, а побайтовое - проблем меньше, но это "недокументированный режим" для DS1307.
Да и внешний обмен - довольно ресурсоемкое дело (тем более, что внутри МК операции быстрее выполняются). :roll:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

BOB51 писал(а):Если обращение не к массиву, а побайтовое - проблем меньше,
ну, я так и собирался сделать. =) Только часы и минуты выдергивать, все не читать. Тем более весь протокол на ассемблере нарисовал (малость упрощенный) для I2C.
eess9 писал(а):что мешает считать на основе этого сигнала (1Гц)
Ну, так даже проще сделать... =) Просто думал, зачем писать двойные часы, если есть РТС???... Конечно, можно РТС использовать только для корректировки времени.

З.Ы. Календарь мне не нужен..

З.З.Ы. Тему, наверное, надо переименовать... Или приклеить к какой-нибдуь существующей... А то вопрос про прерывания себя исчерпал, а про РТС вопросы еще могут быть... Спасибо.
Станислав
Друг Кота
Аватара пользователя
Сообщения: 15745
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Там в даташите I2C только для работы с массивом.
Побайтовый вот такое дает:
shpora_I2C_1.pdf
(135.75 КБ) 254 скачивания
8)
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

А я не использую протокол из даташита... =) ПРимерно, то же сделал, что и пдфе написано.
Я правильно понимаю, что можно просто обратиться к часам РТС по адресам 0х01 и 0х02 и считать только значения минут и часов, причем к каждому по отдельности??? А потом на каждый ответный байт отослать их НАК.
Станислав
Друг Кота
Аватара пользователя
Сообщения: 15745
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Именно так и делается - считываются только часы и минуты (ну и календарь, если нужно).
Предварительно задан адрес и чтение одного или нескольких байт подряд. Однако если читаем два байта подряд, то лучше выставить младший адрес и считать оба последовательно, чем задавать два отдельных блока заголовок+чтение.
У меня закопалось два описания на DS1307. Скинул в личку. :beer:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

BOB51 писал(а):У меня закопалось два описания на DS1307. Скинул в личку.
Огромное спасибо! Очень признателен. :beer:
Станислав
Ответить

Вернуться в «AVR»