Например TDA7294

Форум РадиоКот • Просмотр темы - mega128 мультипрерывание по Т1
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср мар 11, 2026 22:06:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: mega128 мультипрерывание по Т1
СообщениеДобавлено: Пт янв 11, 2013 15:41:38 
Родился
Аватар пользователя

Зарегистрирован: Вт авг 03, 2010 15:13:33
Сообщений: 13
Откуда: РБ г.Бобруйск
Рейтинг сообщения: 0
Задача казалась простой - до моделирования в Proteuse.
1. Таймер Т1 сконфигурировать на тактирование от внешнего сигнала (нога Т1) и подать на него выход таймера Т0
2. Режим таймера Phase and Frequency Correct PWM (№8 в таблице режимов) с вершиной счёта до значения ICR1 (0x00FF)
3. Вызов прерывания при TCNT1=0x0000 и выполнение обработчика
4. Вызов прерывания при TCNT1=ICR1 и выполнение обработчика
В книге А. В. Евстифеева «Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL 5 е издание» на стр.298 говорится:
«Как и в остальных режимах, при работе с какими либо фиксированными значениями модуля счета, для задания его рекомендуется использовать регистр захвата. При этом регистр OCR1A (OCR3A) может использоваться для формирования ШИМ сигнала. Если же в процессе формирования ШИМ сигнала его частота меняется очень часто, для задания модуля счета рекомендуется использовать регистр сравнения. При достижении счетчиком максимального значения происходит смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала clkT1 (clkT3). В этом же такте устанавливается флаг ICF1 либо OCF1A (зависит от того, какой из регистров используется для задания модуля счета). При достижении счетчиком минимального значения ($0000) направление счета опять изменяется. При этом устанавливается флаг прерывания TOV1 (TOV3) регистра TIFR (ETIFR) и производится обновление содержимого регистра сравнения.»
По логике вещей при вот такой настройке Т1 (TIMSK=0b00100100 ETIMSK=0x00) я должен получить 2 прерывания за цикл счёта Т1:
1-ое при TCNT1=0x0000 и 2-ое при TCNT1=0x00FF.
Но они происходят последовательно при TCNT1=0x0000 сначала прерывание по ICF (ЗАХВАТУ) т.е. как будто бы сейчас 0x00FF, а потом по TOV1 0x0000.

Кому интересно поковырятся милости прошу.


Вложения:
Комментарий к файлу: А вот последовательность событий в узле Т1 из отладчика в PROTEUS
Снимок-12.jpg [68.17 KiB]
Скачиваний: 355

_________________
Ошибок не делает тот, кто ничего не делает!
Вернуться наверх
 
 Заголовок сообщения: Re: mega128 мультипрерывание по Т1
СообщениеДобавлено: Сб янв 12, 2013 22:22:27 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
И где же тут " поковырятся"?
Ни файла протеуса, ни кода глючного.

Вообще, насколько я заметил, у вас кроется небольшая ошибка в логической цепочке размышлений.

Цитата:
Режим таймера Phase and Frequency Correct PWM (№8 в таблице режимов) с вершиной счёта до значения ICR1 (0x00FF)

Цитата:
1-ое при TCNT1=0x0000 и 2-ое при TCNT1=0x00FF.


Если вершина счета 0x00FF, то выставляется почти мгновенно два флага один - флаг совпадения с регистром сравнения, второй по очистке счетчика ведь до верха уже дошли! и происходит сброс счетчика.
Далее наблюдается следующее- смотрим по таблице прерываний у которого больше приоритет, тот выполняется первым, после его выполнения опять проверяется регистр флагов и таблица прерываний.


Вернуться наверх
 
 Заголовок сообщения: Re: mega128 мультипрерывание по Т1
СообщениеДобавлено: Пн янв 14, 2013 09:06:23 
Родился
Аватар пользователя

Зарегистрирован: Вт авг 03, 2010 15:13:33
Сообщений: 13
Откуда: РБ г.Бобруйск
Рейтинг сообщения: 0
Спасибо за оказанное внимание к моим изысканиям.
Только я не просил поковыряться в моих потрохах. У меня проблема не в коде, так как его просто нет, а в настройке таймера на два прерывания за цикл счёта. Поковыряться я предлагал в даташите для определения возможно ли это вообще, а то как то загадочно, там всё это описано.
И по поводу логики моего мышления :

vitalik_1984 писал(а):
Если вершина счета 0x00FF, то выставляется почти мгновенно два флага один - флаг совпадения с регистром сравнения, второй по очистке счетчика ведь до верха уже дошли! и происходит сброс счетчика.


как я и предпологал этим режимом пользуются не все и очень легко спутать его с "быстрым ШИМ" где TCNT1 обнуляется при достижении вершины. Поэтому будет не лишним ещё раз привести цитату из книги:
"При достижении счетчиком максимального значения происходит смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала clkT1 (clkT3). В этом же такте устанавливается флаг ICF1 либо OCF1A (зависит от того, какой из регистров используется для задания модуля счета).---Счёт продолжается но на уменьшение--- и при достижении счетчиком минимального значения ($0000) направление счета опять изменяется. При этом устанавливается флаг прерывания TOV1 (TOV3) регистра TIFR (ETIFR) и производится обновление содержимого регистра сравнения."

А поковыряться в даташите на 128 мегу стр126-128 и картинка + надписи на стр127 + блок схема таймера на стр 110

В приложеном файле Снимок-12 последовательность событий в Т1.
Так вот хочется чтобы строки:
[AVR INTERRUPT] Handling TIMER1_CAPT(Timer/Counterl Capture Event), address=0x002C
[AVR INTERRUPT] TIMER1_CAPT completed
были не после строки [AVR TIMER/COUNTER 1] Overflow (0x0000)
а после строки [AVR TIMER/COUNTER 1] Top (0x00FF).

И всё должно выглядеть вот так:
[AVR TIMER/COUNTER 1] Overflow (0x0000)
[AVR INTERRUPT] Handling TIMER1_OVF(Timer/Counterl Оverflow], address=0x0038.
[AVR INTERRUPT] TIMER1_OVF completed.
Другие события по сравнению в каналах ШИМ
[AVR TIMER/COUNTER 1] Top (0x00FF)
[AVR INTERRUPT] Handling TIMER1_CAPT(Timer/Counterl Capture Event), address=0x002C
[AVR INTERRUPT] TIMER1_CAPT completed
Другие события по сравнению в каналах ШИМ
[AVR TIMER/COUNTER 1] Overflow (0x0000)
[AVR INTERRUPT] Handling TIMER1_OVF(Timer/Counterl Оverflow], address=0x0038.
[AVR INTERRUPT] TIMER1_OVF completed.
И так в цикле.

_________________
Ошибок не делает тот, кто ничего не делает!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y