Обсуждаем контроллеры компании Atmel.
Ответить

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Вт сен 07, 2021 23:37:12

akl,
Команды LDI в прерывании разрешая один канал запрещают другой

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

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Ср сен 08, 2021 05:11:17

Если вернуться обратно к исходному коду, только в прерывании B разрешать канал A и в прерывании A разрешать канал B, то работают оба канала. Но! Картинка крепко меняется. Появляются очень узкие импульсы при сравнении в разрешенном канале перед его отключением. И сами импульсы становятся уже и на приблизительный меандр не похожи.

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Ср сен 08, 2021 09:37:30

Для шагового двигателя лучше взять что-то другое, что формирует мёртвое время.

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Ср сен 08, 2021 15:10:36

akl, прикладываю осциллограммы для иллюстрации:

Изображение Изображение Изображение

Соответственно, там, где каждый канал активен в своем прерывании - тишь да гладь

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Ср сен 08, 2021 20:19:10

Вот за такие фокусы я и не люблю таймеры древних AVR.

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Чт сен 09, 2021 05:07:39

akl, прикладываю осциллограммы для иллюстрации:
...Соответственно, там, где каждый канал активен в своем прерывании - тишь да гладь
Обратите внимание на длительность импульсов на первой фотке, которая примерно в 2 раза больше. Фотка работы переключаемых в прерываниях каналов. Видны узкие импульсы.
Изображение

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Пт сен 10, 2021 00:17:36

Ребят, всем спасибо за наводку!

Оказалось, достаточно было в конце модуля инициализации перед разрешением глобальных прерываний сразу установить PORTB в "1"
Интересная особенность, однако :shock:

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Пт сен 10, 2021 09:17:29

Установил PORTB в 1. Те же фаберже только инверсные.

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Пт сен 10, 2021 11:26:13

Все очень и очень странно.
Почему с "0" не заводится? Или есть какой-то секрет.

А главное, какую роль тут играет PORTB, если мы уже ноги переключили на альтернативную функцию OC1A/OC1B

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Пн сен 27, 2021 12:30:13

akl,
вот это не очень понял:
Код:
LDI   R16,1<<COM1A1|1<<COM1B1|1<<COM1A0|0<<COM1B0|1<<WGM11;|1<<WGM10
OUT   TCCR1A,R16   ;противофазные импульсы A и B

Не нашел конкретно эту комбинацию в таблице
Изображение
Разве можно выставлять 0 и 1 отдельно для COM1A0 и COM1B0? :shock:
Они же, вроде, парой идут в одном столбике.

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Пн сен 27, 2021 13:11:47

а что, разве трудно понять, что одинаковый функционал можно объединить в один столбик?
или тебе нужно, чтобы было 2 одинаковых таблицы - но отдельно для канала А и отдельно для канала В?

Re: Некорректная работа прерываний T1 с двух каналов (CTC)

Пн сен 27, 2021 14:13:01

Теперь понял.

Это режимы Set и Clear для OC1A и OC1B соответственно.
Просто зациклился ранее, что только Toggle используется для генерации сигнала.
Ответить