Работа с таймерами и прерываниями в Mega8
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Работа с таймерами и прерываниями в Mega8
Извиняйте за офф. Интересно будет понаблюдать матч Совесть vs Мастер Ломастер. 
Docendo discimus
- Реклама
Re: Работа с таймерами и прерываниями в Mega8
TIFR = TIFR; И как это строчка сбросит флаги? Если TIFR=1; То получается грубо говоря к 1 присваиваем опять 1; Не понятно.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Работа с таймерами и прерываниями в Mega8
king-live, учите матчасть и предыдущие посты не забывайте внимательно и вдумчиво читать.
TIFR - восьмибитный регистр. TOV0 - один из битов этого регистра. TOV0 - Это только название, принятое для удобства, скрывающее за собой номер бита в регистре.
Любой бит регистра TIFR (именно этого регистра TIFR, а не любого другого) сбрасывается при записи в бит лог. "1" (Это написано в документации к контроллеру)
соответственно код сбросит все флаги регистра.
TIFR - восьмибитный регистр. TOV0 - один из битов этого регистра. TOV0 - Это только название, принятое для удобства, скрывающее за собой номер бита в регистре.
Любой бит регистра TIFR (именно этого регистра TIFR, а не любого другого) сбрасывается при записи в бит лог. "1" (Это написано в документации к контроллеру)
соответственно код
Код: Выделить всё
TIFR = TIFR
Последний раз редактировалось ibiza11 Пн мар 26, 2012 11:38:03, всего редактировалось 1 раз.
Ставим плюсы: )
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Работа с таймерами и прерываниями в Mega8
Строчка TIFR = (1 << TOV0) сбрасывает только флаг TOV0. На другие флаги она никакого влияния не оказывает. OR здесь не нужен.YS писал(а):Зато не затрагивает остальные биты.
Re: Работа с таймерами и прерываниями в Mega8
Не надо рассматривать это чисто математически. На аппаратном уровне происходят вещи, казалось бы, нелочичные с точки зрения чистой булевой алгебры. Например : бит стоит в `1`, писанули туда `1`, а стало `0` - схемотехника, ничего не попишешь. Нужно читать ДШ и принимать это как данность.king-live писал(а):TIFR = TIFR; И как это строчка сбросит флаги? Если TIFR=1; То получается грубо говоря к 1 присваиваем опять 1; Не понятно.
Кстати, у пишущих на ассемблере, у которых межу математикой и конкретным кодом не стоит компилятор, понимания сути процессов намного больше и соответственно вопросов меньше, потому что мыслят они не только математически, а в большой степени схемотехнически.
( Это я про себя, если кто не согласен ).
- Реклама
Re: Работа с таймерами и прерываниями в Mega8
О сколько нам открытий чудных Готовит просвещенья дух. Ну что же, по теме более менее понятно становится. Спасибо. А не подскажите где есть статья, что бы рассмотреть на примерах работу с прерываниями и создание обработчиков этих прерываний. Где именно разжованно для новичков эта тема.
Re: Работа с таймерами и прерываниями в Mega8
Ну если не устраивают даташиты в силу своей англоязычности, а во всем остальном подробные и понятные - то что-нибудь переводное типа Евстифеева или аналогичного по запросу для дядюшки Гуголя "Микроконтроллеры АВР"king-live писал(а): работу с прерываниями и создание обработчиков этих прерываний. Где именно разжованно для новичков эта тема.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Работа с таймерами и прерываниями в Mega8
Совесть - она ведь не обманетpyzhman писал(а):Извиняйте за офф. Интересно будет понаблюдать матч Совесть vs Мастер Ломастер.
извините и меня за оффтоп
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Работа с таймерами и прерываниями в Mega8
Согласен. Туплю.Строчка TIFR = (1 << TOV0) сбрасывает только флаг TOV0. На другие флаги она никакого влияния не оказывает. OR здесь не нужен.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Работа с таймерами и прерываниями в Mega8
Такой вопрос. счётчик таймер прибавляет или убавляет своё значение в каждый такт. Если я пишу какую нибудь функцию, а в функции множество процедур которые выполняется при разном количестве тактов. Это я должен суммировать все эти такты процедур? Чтобы определить приблизительно, за сколько тактов будет исполняться вся функция до конца, дабы прерывание не пришло где нибудь в середине функции.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Работа с таймерами и прерываниями в Mega8
да пусть себе приходит, когда захочет! в чем проблема-то?king-live писал(а):Чтобы определить приблизительно, за сколько тактов будет исполняться вся функция до конца, дабы прерывание не пришло где нибудь в середине функции.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Работа с таймерами и прерываниями в Mega8
ну к примеру у меня 4 переменных, которые нужно пересчитать, ну два пересчитал и тут пришло прерывание!!!! Так остальные 2е переменные не успел пересчитать и выпонить определённые действия по условию этих 4х переменных. Как здесь быть?
Re: Работа с таймерами и прерываниями в Mega8
Только с переменными >8 бит надо аккуратно. Вдвойне аккуратно, если в обработчике прерывания эти же переменные модифицируются. А то будет весело, если прочитал младший бит, а тут вылетело с грохотом прерывание и изменило переменную
Если одни и те же переменные в таймере и основной программе и при этом логика работы такова, что прерыванию вылетать нельзя, то можно запрещать прерывания, пока считаете. Например вот так:
Прерывание же не грохает выполнение основной программы. Отработает и вернёт туда, где вылетело. Только ещё раз прочитайте сказанное выше.king-live писал(а):Так остальные 2е переменные не успел пересчитать и выпонить определённые действия по условию этих 4х переменных. Как здесь быть?
Если одни и те же переменные в таймере и основной программе и при этом логика работы такова, что прерыванию вылетать нельзя, то можно запрещать прерывания, пока считаете. Например вот так:
Код: Выделить всё
int main()
{
sei(); // разрешили прерывания
// ...... всякая муть
uint8_t sreg = SREG;
cli(); // запретили
// тут считаете то, чему не должны мешать таймеры и т.д.
SREG = sreg; // вернули прерывания на место
}Re: Работа с таймерами и прерываниями в Mega8
Код: Выделить всё
cli(); // запретили- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Работа с таймерами и прерываниями в Mega8
И не только отсчитывает, но и проверяет, не произошло ли событие, которое должно вызвать прерывание (переполнение, совпадение с регистром сравнения и т.д.), если произошло, то ставит соответствующий флаг, и после sei() программа сразу перескочит на соответствующий обработчик. Кстати, если за время пока прерывания отключены одно и тоже условие для прерывания повторится, то это прерывание "потеряется", потому что флаг для него уже будет установлен, поэтому будьте осторожны с cli если не хотите пропустить событие.king-live писал(а):. В таком случае запрещается только прерывание, а счётчик всё отсчитывает такты?Код: Выделить всё
cli(); // запретили
Re: Работа с таймерами и прерываниями в Mega8
Хочу создать свой проект DC/DC инвертора на Attiny13 , но мне нужна схема с обратной связью. Есть схемы с обратной связью подключенные на АЦП контроллера. Хватит ли его быстродействие, если частота ШИМ будет 80-100кГц. Или всё таки обратную связь реализовать с помощью встроенного компаратора?
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Работа с таймерами и прерываниями в Mega8
а, извиняюсь, это че ж за ШИМ такой из тини13 выходить будет на частоте 100 кГц? шестибитный?king-live писал(а):Хочу создать свой проект DC/DC инвертора на Attiny13 , но мне нужна схема с обратной связью. Есть схемы с обратной связью подключенные на АЦП контроллера. Хватит ли его быстродействие, если частота ШИМ будет 80-100кГц. Или всё таки обратную связь реализовать с помощью встроенного компаратора?
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Работа с таймерами и прерываниями в Mega8
Вообще не вижу смысла использовать для этого тини13. Мало отличных ШИМ-контроллеров? Ещё и дешёвых, между прочим. Ещё и удобных.
Re: Работа с таймерами и прерываниями в Mega8
С чего решили что ШИМ не получится 100кГц. Конечно я до этого вообще не делал ни какого проекта на ШИМ. Но если это ошибочный и не правильны путь, то давайте сразу объясните почему. Спасибо.а, извиняюсь, это че ж за ШИМ такой из тини13 выходить будет на частоте 100 кГц? шестибитный?
Re: Работа с таймерами и прерываниями в Mega8
Если использовать готовый ШИМ, то сразу скажу, у нас страна такая, сразу скопируют то, что хорошо идёт в продаже. И ещё и цену отпустят до безобразия. А тут хоть проект будет защищён от копирования. Наш отдел в частности я много сделал проектов светодинамических устройств на простых аналоговых схемах, а теперь они скопированны и продаются очень дёшево. А мы вкладывали в это время и средство.Вообще не вижу смысла использовать для этого тини13. Мало отличных ШИМ-контроллеров? Ещё и дешёвых, между прочим. Ещё и удобных.


