Перейти к содержанию
    

Таймер на ATxmega32E5

Я хочу казалось бы не так много - иметь с ноги 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

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

 

Нет импульсов, хоть тресни...

Может там какая-то всем известная закладка должна быть, или я просто туплю по-чёрному?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В datasheet, вроде, период в CCA заносить надо...

А я простодушно его занёс в ССВ:

>>TCC5.CCB = MEANDR_PER; // MEANDR_PER = 410 => F = 100 kHz

Вроде как должен юзаться канал "В", чтобы дергалась ножка OC5B?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я простодушно его занёс в ССВ:

>>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 возник вопрос: На каких пинах и какого порта должна быть эта частота?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Пока ничего не появилось :(.

Итак, с самого начала, развёрнуто:

Я хочу, чтобы на ножке №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, может они, гады,всё портят?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В силу того, что частота так и не появилась, думаю щас предметно заняться загадочными устройствами 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.

 

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

Разрешаете работу таймеров порта C

что альтернативная функция PD5 - это OC5B

Ожидаете на D

 

Посмотрите таблицу 8.9 Register Summary – Power Reduction стр.119 XMEGA E MANUAL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы для начала глянул всё таки на вывод PD4 pin 24.

Не думаю что это просто так написано

Разрешаете работу таймеров порта C

Ожидаете на D

Посмотрите таблицу 8.9 Register Summary – Power Reduction стр.119 XMEGA E MANUAL

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

 

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

 

Один хрен, сигнала нет :(...

(Да, на PD4 я разумеется тоже посматриваю. Там у меня идет импульсация от Таймера_4, работающего по прерыванию, там всё нормально...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(Да, на 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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по 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 прекрасно дергается.

 

Всё, я упёрся, больше не знаю что делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё, я упёрся, больше не знаю что делать.

Ну значит пора переходить к методу научного тыка.

ПАубирать из программы всё кроме того что касается исследуемой периферии.

И тыкать, тыкать, тыкать ... пока не получите нужный результат.

У Вас получается что прерывание по таймеру порта C чего-то делает с предполагаемым для вывода частоты пином порта D.

 

 

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

А судя по DS не должна! See 13.8.6 Port Override for Waveform Generation page 172 XMEGA E [MANUAL]

Если дёргается, значит CCxMODE неправильно настроен. Или настроен но не тот или .....

Тыкать короче... :biggrin:

Я бы поигрался была бы у меня xmegaE

 

Кстати, а почему TCC5.CTRLA = ...? может нужно TCD5.CTRLA = ... и т.д. раз Вам частота на порту D нужна

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, а почему TCC5.CTRLA = ...? может нужно TCD5.CTRLA = ... и т.д. раз Вам частота на порту D нужна

 

 

О точно! Там же все настройки в TCC5 пишутся вместо TCD5.

 

АХРЕНЕТТЬЬЬ!

Таки-действительно да!!!

То есть везде заменил TCC5. на TCD5., и тут же всё заработало...

Господа, вам - огромное мерси, вы реально спасли мой заблудший мосх!

:))))

 

Однако остаётся непонятка, - почему же так?? Я уже сто лет юзаю эти Хмеги, и везде пользовался настройками таймеров с префиксами ТСС, а оказывается есть ещё и 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, иначе вообще нет импульсов. На Период не влияет никак. (Вообще непонятно!)

Вот.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TCC - это Timer Counter (Port) C.

Соответственно TCD - это Timer Counter (Port) D.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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-го типа я и не приметил...

Всё, теперь всё срослось, рассудок спасён!

:)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...