Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Таймер на ATxmega32E5
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Alexey_N
Я хочу казалось бы не так много - иметь с ноги PD5 меандр от таймера 5.
ПДФ вещает, что к этой ноге прибит выход OC5B, что казалось бы воодушевляет.
Программирую его на выход.
Программирую регистры Таймера:
TCC5.CTRLA = 0x01; // Prescaler: Clk
TCC5.CTRLB = 0x01; // Mode of operation = "Frequency"
TCC5.CTRLE = 0x04; // CCBMODE = 01 => Ch B = Output compare enabled
TCC5.INTCTRLA = 0x00; // Interrupt disabled
TCC5.CCB = MEANDR_PER; // MEANDR_PER = 410 => F = 100 kHz
Остальные регистры не трогаю.

Нет импульсов, хоть тресни...
Может там какая-то всем известная закладка должна быть, или я просто туплю по-чёрному?
beard42
В datasheet, вроде, период в CCA заносить надо...
Alexey_N
Цитата(beard42 @ Feb 8 2018, 22:43) *
В datasheet, вроде, период в CCA заносить надо...

А я простодушно его занёс в ССВ:
>>TCC5.CCB = MEANDR_PER; // MEANDR_PER = 410 => F = 100 kHz
Вроде как должен юзаться канал "В", чтобы дергалась ножка OC5B?
zombi
Цитата(Alexey_N @ Feb 9 2018, 02:00) *
А я простодушно его занёс в ССВ:
>>TCC5.CCB = MEANDR_PER; // MEANDR_PER = 410 => F = 100 kHz
Вроде как должен юзаться канал "В", чтобы дергалась ножка OC5B?

Так я и не понял, Вы поменяли CCB на CCA? появилась частота?

Цитата
13.8.2 Frequency (FRQ) Waveform Generation
For frequency generation the period time (T) is controlled by the CCA register instead of PER. The waveform generation
(WG) output is toggled on each compare match between the CNT and CCA registers, as shown in Figure 13-13.


ЗЫ: Пока читал DS возник вопрос: На каких пинах и какого порта должна быть эта частота?
Alexey_N
Цитата(zombi @ Feb 9 2018, 02:50) *
Так я и не понял, Вы поменяли CCB на CCA? появилась частота?

ЗЫ: Пока читал DS возник вопрос: На каких пинах и какого порта должна быть эта частота?

Пока ничего не появилось sad.gif.
Итак, с самого начала, развёрнуто:
Я хочу, чтобы на ножке №23 (PD5) был меандр от Таймера_5.
В Даташите на стр.60 в Таблице 32-5 указано, что альтернативная функция PD5 - это OC5B, что я интерпретирую, как выход канала сравнения "В" этого Таймера_5.
Правда на стр.34 есть картинка 17-6, которая намекает, что сигнал от компаратора проходит до выхода через загадочные блоки FAULT, WeX и HiRes, но они мне не нужны, и я их не трогаю, наивно предполагая, что по умолчанию сигнал должен проходить через них насквозь.
Теперь - вот все регистры, которые казалось бы имеют отношение к Таймеру:

PR.PRPC = 0x58; // Разрешение работы таймеров 4 и 5

TCC5.CTRLA = 0x01; // Prescaler: Clk

TCC5.CTRLB = 0x01; // Mode of operation = "Frequency"
или
TCC5.CTRLB = 0x31; // Добавлено Circular Buffer Enable (both PER/PERBUF and CCA/CCABUF)
безразлично, все равно не работает.

TCC5.CTRLE = 0x04; // CCBMODE = 01 => Ch B = Output compare enabled

TCC5.CCB = MEANDR_PER; // MEANDR_PER = 410 => F = 100 kHz
TCC5.CCA = MEANDR_PER; // Зачем это?? На всякий случай.

Остальные регистры не трогаю, они = 0.

Таким образом я нахожу, что в указанной Вами фразе на стр. 169 в Даташите содержится неточность, вместо
"For frequency generation the period time (T) is controlled by the CCA register instead of PER."
следует видимо читать
"For frequency generation the period time (T) is controlled by the CCx register instead of PER."
потому что каналов сравнения как минимум два: А и В.
Я неправ?

В силу того, что частота так и не появилась, думаю щас предметно заняться загадочными устройствами FAULT, WeX и HiRes, может они, гады,всё портят?
zombi
Цитата(Alexey_N @ Feb 9 2018, 15:51) *
В силу того, что частота так и не появилась, думаю щас предметно заняться загадочными устройствами FAULT, WeX и HiRes, может они, гады,всё портят?

Я бы для начала глянул всё таки на вывод PD4 pin 24.
Не думаю что это просто так написано
Цитата
For frequency generation the period time (T) is controlled by the CCA register instead of PER.

Цитата
Для генерации частоты период времени (T) управляется регистром CCA вместо PER.


Цитата( @ Feb 9 2018, 15:51) *
PR.PRPC = 0x58; // Разрешение работы таймеров 4 и 5

Разрешаете работу таймеров порта C
Цитата(Alexey_N @ Feb 9 2018, 15:51) *
что альтернативная функция PD5 - это OC5B

Ожидаете на D

Посмотрите таблицу 8.9 Register Summary – Power Reduction стр.119 XMEGA E MANUAL
Alexey_N
Цитата(zombi @ Feb 9 2018, 15:42) *
Я бы для начала глянул всё таки на вывод PD4 pin 24.
Не думаю что это просто так написано
Разрешаете работу таймеров порта C
Ожидаете на D
Посмотрите таблицу 8.9 Register Summary – Power Reduction стр.119 XMEGA E MANUAL

Да, Вы правы, это место я не доглядел, добавляем:

PR.PRPD = 0x10; // Разрешение работы таймеров 4 и 5

Один хрен, сигнала нет sad.gif...
(Да, на PD4 я разумеется тоже посматриваю. Там у меня идет импульсация от Таймера_4, работающего по прерыванию, там всё нормально...)
zombi
Цитата(Alexey_N @ Feb 9 2018, 16:15) *
(Да, на PD4 я разумеется тоже посматриваю. Там у меня идет импульсация от Таймера_4, работающего по прерыванию, там всё нормально...)

Судя по DS у порта D нет Таймера_4!
Что вы можете там посматривать и тем более формировать?
Еще раз смотрите таблицу 8.9 Register Summary – Power Reduction стр.119 XMEGA E MANUAL
или Table 32-5. PORT D – Alternate Functions стр.60 XMEGA E5 [DATASHEET]
или Pinout and Block Diagram стр.4 XMEGA E5 [DATASHEET]
Alexey_N
Цитата(zombi @ Feb 9 2018, 16:42) *
Судя по DS у порта D нет Таймера_4!
Что вы можете там посматривать и тем более формировать?
Еще раз смотрите таблицу 8.9 Register Summary – Power Reduction стр.119 XMEGA E MANUAL
или Table 32-5. PORT D – Alternate Functions стр.60 XMEGA E5 [DATASHEET]
или Pinout and Block Diagram стр.4 XMEGA E5 [DATASHEET]

Да, разумеется. Ключевое слово - "...по прерыванию", ну то есть в прерывании от Таймера_4 я просто шевелю этой лапой вручную.

С таблицами я согласен, не вижу никаких противоречий с тем, что я делаю.

Беглый просмотр загадочных FAULT, WeX и HiRes ничего не дал, вроде не должны сигнал останавливать...

Процессор исправен, замыкания на плате нет, от того же прерывания в Таймере_4 нога PD5 прекрасно дергается.

Всё, я упёрся, больше не знаю что делать.
zombi
Цитата(Alexey_N @ Feb 9 2018, 17:53) *
Всё, я упёрся, больше не знаю что делать.

Ну значит пора переходить к методу научного тыка.
ПАубирать из программы всё кроме того что касается исследуемой периферии.
И тыкать, тыкать, тыкать ... пока не получите нужный результат.
У Вас получается что прерывание по таймеру порта C чего-то делает с предполагаемым для вывода частоты пином порта D.


Цитата(Alexey_N @ Feb 9 2018, 17:53) *
от того же прерывания в Таймере_4 нога PD5 прекрасно дергается.

А судя по DS не должна! See 13.8.6 Port Override for Waveform Generation page 172 XMEGA E [MANUAL]
Если дёргается, значит CCxMODE неправильно настроен. Или настроен но не тот или .....
Тыкать короче... biggrin.gif
Я бы поигрался была бы у меня xmegaE

Кстати, а почему TCC5.CTRLA = ...? может нужно TCD5.CTRLA = ... и т.д. раз Вам частота на порту D нужна
beard42
О точно! Там же все настройки в TCC5 пишутся вместо TCD5.
Alexey_N
Цитата(zombi @ Feb 9 2018, 18:49) *
Кстати, а почему TCC5.CTRLA = ...? может нужно TCD5.CTRLA = ... и т.д. раз Вам частота на порту D нужна



Цитата(beard42 @ Feb 9 2018, 22:59) *
О точно! Там же все настройки в TCC5 пишутся вместо TCD5.


АХРЕНЕТТЬЬЬ!
Таки-действительно да!!!
То есть везде заменил TCC5. на TCD5., и тут же всё заработало...
Господа, вам - огромное мерси, вы реально спасли мой заблудший мосх!
sm.gif)))

Однако остаётся непонятка, - почему же так?? Я уже сто лет юзаю эти Хмеги, и везде пользовался настройками таймеров с префиксами ТСС, а оказывается есть ещё и TCD...
Это где-то описано? И что означает сия аббревиатура? Неужели на каждом порту свой таймер сидит?
Как это всё понять?

//////
Что в результате получилось:
TCD5.CTRLA = 0x01; // Prescaler: Clk+
TCD5.CTRLB = 0x01; // Mode of operation = "Frequency"
TCD5.CTRLE = 0x04; // CCBMODE = 01 => Ch B = Output compare enabled
TCD5.CCA = MEANDR_PER; // ВОТ ИМЕННО ЭТОТ РЕАЛЬНЫЙ ПЕРИОД И ПОЛУЧАЕТСЯ! (Почему регистр А, если я шевелю ногу В?)
TCD5.CCB = 0; // А этот регистр должен иметь любое значение от 0 до TCC5.CCA, иначе вообще нет импульсов. На Период не влияет никак. (Вообще непонятно!)
Вот.
beard42
TCC - это Timer Counter (Port) C.
Соответственно TCD - это Timer Counter (Port) D.

На A-сериях в больших корпусах есть еще таймеры на портах E и F.
Alexey_N
Цитата(beard42 @ Feb 12 2018, 21:00) *
TCC - это Timer Counter (Port) C.
Соответственно TCD - это Timer Counter (Port) D.

На A-сериях в больших корпусах есть еще таймеры на портах E и F.

Блин, всё точно, так и есть. В ДШ в явном виде указано:
17.1 Features
Three 16-bit timer/counter
- One timer/counter of type 4
- Two timer/counter of type 5
Вот второго-то "слона" 5-го типа я и не приметил...
Всё, теперь всё срослось, рассудок спасён!
sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.