Работа с таймерами и прерываниями в Mega8

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Работа с таймерами и прерываниями в Mega8

Сообщение pyzhman »

Извиняйте за офф. Интересно будет понаблюдать матч Совесть vs Мастер Ломастер. :)
Docendo discimus
Реклама
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

TIFR = TIFR; И как это строчка сбросит флаги? Если TIFR=1; То получается грубо говоря к 1 присваиваем опять 1; Не понятно.
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Работа с таймерами и прерываниями в Mega8

Сообщение ibiza11 »

king-live, учите матчасть и предыдущие посты не забывайте внимательно и вдумчиво читать.
TIFR - восьмибитный регистр. TOV0 - один из битов этого регистра. TOV0 - Это только название, принятое для удобства, скрывающее за собой номер бита в регистре.
Любой бит регистра TIFR (именно этого регистра TIFR, а не любого другого) сбрасывается при записи в бит лог. "1" (Это написано в документации к контроллеру)
соответственно код

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

TIFR = TIFR 
сбросит все флаги регистра.
Последний раз редактировалось ibiza11 Пн мар 26, 2012 11:38:03, всего редактировалось 1 раз.
Ставим плюсы: )
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Леонид Иванович »

YS писал(а):Зато не затрагивает остальные биты.
Строчка TIFR = (1 << TOV0) сбрасывает только флаг TOV0. На другие флаги она никакого влияния не оказывает. OR здесь не нужен.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Jack_A »

king-live писал(а):TIFR = TIFR; И как это строчка сбросит флаги? Если TIFR=1; То получается грубо говоря к 1 присваиваем опять 1; Не понятно.
Не надо рассматривать это чисто математически. На аппаратном уровне происходят вещи, казалось бы, нелочичные с точки зрения чистой булевой алгебры. Например : бит стоит в `1`, писанули туда `1`, а стало `0` - схемотехника, ничего не попишешь. Нужно читать ДШ и принимать это как данность.
Кстати, у пишущих на ассемблере, у которых межу математикой и конкретным кодом не стоит компилятор, понимания сути процессов намного больше и соответственно вопросов меньше, потому что мыслят они не только математически, а в большой степени схемотехнически.
( Это я про себя, если кто не согласен ).
Реклама
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

О сколько нам открытий чудных Готовит просвещенья дух. Ну что же, по теме более менее понятно становится. Спасибо. А не подскажите где есть статья, что бы рассмотреть на примерах работу с прерываниями и создание обработчиков этих прерываний. Где именно разжованно для новичков эта тема.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6315
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Jack_A »

king-live писал(а): работу с прерываниями и создание обработчиков этих прерываний. Где именно разжованно для новичков эта тема.
Ну если не устраивают даташиты в силу своей англоязычности, а во всем остальном подробные и понятные - то что-нибудь переводное типа Евстифеева или аналогичного по запросу для дядюшки Гуголя "Микроконтроллеры АВР"
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Мастер Ломастер »

pyzhman писал(а):Извиняйте за офф. Интересно будет понаблюдать матч Совесть vs Мастер Ломастер. :)
Совесть - она ведь не обманет :))) против нее не попрешь :)))
извините и меня за оффтоп :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Работа с таймерами и прерываниями в Mega8

Сообщение YS »

Строчка TIFR = (1 << TOV0) сбрасывает только флаг TOV0. На другие флаги она никакого влияния не оказывает. OR здесь не нужен.
Согласен. Туплю.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

Такой вопрос. счётчик таймер прибавляет или убавляет своё значение в каждый такт. Если я пишу какую нибудь функцию, а в функции множество процедур которые выполняется при разном количестве тактов. Это я должен суммировать все эти такты процедур? Чтобы определить приблизительно, за сколько тактов будет исполняться вся функция до конца, дабы прерывание не пришло где нибудь в середине функции.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Мастер Ломастер »

king-live писал(а):Чтобы определить приблизительно, за сколько тактов будет исполняться вся функция до конца, дабы прерывание не пришло где нибудь в середине функции.
да пусть себе приходит, когда захочет! в чем проблема-то?
битва с дураками проиграна, победители торжествуют. слава победителям!
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

ну к примеру у меня 4 переменных, которые нужно пересчитать, ну два пересчитал и тут пришло прерывание!!!! Так остальные 2е переменные не успел пересчитать и выпонить определённые действия по условию этих 4х переменных. Как здесь быть?
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Работа с таймерами и прерываниями в Mega8

Сообщение hybroid »

Только с переменными >8 бит надо аккуратно. Вдвойне аккуратно, если в обработчике прерывания эти же переменные модифицируются. А то будет весело, если прочитал младший бит, а тут вылетело с грохотом прерывание и изменило переменную :)
king-live писал(а):Так остальные 2е переменные не успел пересчитать и выпонить определённые действия по условию этих 4х переменных. Как здесь быть?
Прерывание же не грохает выполнение основной программы. Отработает и вернёт туда, где вылетело. Только ещё раз прочитайте сказанное выше.

Если одни и те же переменные в таймере и основной программе и при этом логика работы такова, что прерыванию вылетать нельзя, то можно запрещать прерывания, пока считаете. Например вот так:

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

int main()
{
    sei(); // разрешили прерывания
    // ...... всякая муть
    uint8_t sreg = SREG;
    cli(); // запретили
    // тут считаете то, чему не должны мешать таймеры и т.д.
    SREG = sreg; // вернули прерывания на место
}
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

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

cli(); // запретили
. В таком случае запрещается только прерывание, а счётчик всё отсчитывает такты?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Engineer_Keen »

king-live писал(а):

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

cli(); // запретили
. В таком случае запрещается только прерывание, а счётчик всё отсчитывает такты?
И не только отсчитывает, но и проверяет, не произошло ли событие, которое должно вызвать прерывание (переполнение, совпадение с регистром сравнения и т.д.), если произошло, то ставит соответствующий флаг, и после sei() программа сразу перескочит на соответствующий обработчик. Кстати, если за время пока прерывания отключены одно и тоже условие для прерывания повторится, то это прерывание "потеряется", потому что флаг для него уже будет установлен, поэтому будьте осторожны с cli если не хотите пропустить событие.
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

Хочу создать свой проект DC/DC инвертора на Attiny13 , но мне нужна схема с обратной связью. Есть схемы с обратной связью подключенные на АЦП контроллера. Хватит ли его быстродействие, если частота ШИМ будет 80-100кГц. Или всё таки обратную связь реализовать с помощью встроенного компаратора?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Работа с таймерами и прерываниями в Mega8

Сообщение Мастер Ломастер »

king-live писал(а):Хочу создать свой проект DC/DC инвертора на Attiny13 , но мне нужна схема с обратной связью. Есть схемы с обратной связью подключенные на АЦП контроллера. Хватит ли его быстродействие, если частота ШИМ будет 80-100кГц. Или всё таки обратную связь реализовать с помощью встроенного компаратора?
а, извиняюсь, это че ж за ШИМ такой из тини13 выходить будет на частоте 100 кГц? шестибитный?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Работа с таймерами и прерываниями в Mega8

Сообщение hybroid »

Вообще не вижу смысла использовать для этого тини13. Мало отличных ШИМ-контроллеров? Ещё и дешёвых, между прочим. Ещё и удобных.
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

а, извиняюсь, это че ж за ШИМ такой из тини13 выходить будет на частоте 100 кГц? шестибитный?
С чего решили что ШИМ не получится 100кГц. Конечно я до этого вообще не делал ни какого проекта на ШИМ. Но если это ошибочный и не правильны путь, то давайте сразу объясните почему. Спасибо.
king-live
Прорезались зубы
Сообщения: 238
Зарегистрирован: Сб янв 29, 2011 20:26:48

Re: Работа с таймерами и прерываниями в Mega8

Сообщение king-live »

Вообще не вижу смысла использовать для этого тини13. Мало отличных ШИМ-контроллеров? Ещё и дешёвых, между прочим. Ещё и удобных.
Если использовать готовый ШИМ, то сразу скажу, у нас страна такая, сразу скопируют то, что хорошо идёт в продаже. И ещё и цену отпустят до безобразия. А тут хоть проект будет защищён от копирования. Наш отдел в частности я много сделал проектов светодинамических устройств на простых аналоговых схемах, а теперь они скопированны и продаются очень дёшево. А мы вкладывали в это время и средство.
Закрыто

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