реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> Таймер на ATxmega32E5
Alexey_N
сообщение Feb 7 2018, 15:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



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

Нет импульсов, хоть тресни...
Может там какая-то всем известная закладка должна быть, или я просто туплю по-чёрному?
Go to the top of the page
 
+Quote Post
beard42
сообщение Feb 8 2018, 19:43
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 18-11-12
Пользователь №: 74 448



В datasheet, вроде, период в CCA заносить надо...
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Feb 8 2018, 23:00
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



Цитата(beard42 @ Feb 8 2018, 22:43) *
В datasheet, вроде, период в CCA заносить надо...

А я простодушно его занёс в ССВ:
>>TCC5.CCB = MEANDR_PER; // MEANDR_PER = 410 => F = 100 kHz
Вроде как должен юзаться канал "В", чтобы дергалась ножка OC5B?
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 8 2018, 23:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(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 возник вопрос: На каких пинах и какого порта должна быть эта частота?
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Feb 9 2018, 11:51
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



Цитата(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, может они, гады,всё портят?
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 9 2018, 12:42
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(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
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Feb 9 2018, 13:15
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



Цитата(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, работающего по прерыванию, там всё нормально...)
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 9 2018, 13:42
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(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]
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Feb 9 2018, 14:53
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



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

Всё, я упёрся, больше не знаю что делать.
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 9 2018, 15:49
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 062
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(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 нужна
Go to the top of the page
 
+Quote Post
beard42
сообщение Feb 9 2018, 19:59
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 18-11-12
Пользователь №: 74 448



О точно! Там же все настройки в TCC5 пишутся вместо TCD5.
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Feb 12 2018, 15:19
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



Цитата(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, иначе вообще нет импульсов. На Период не влияет никак. (Вообще непонятно!)
Вот.
Go to the top of the page
 
+Quote Post
beard42
сообщение Feb 12 2018, 18:00
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 18-11-12
Пользователь №: 74 448



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

На A-сериях в больших корпусах есть еще таймеры на портах E и F.
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Feb 13 2018, 13:03
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 308
Регистрация: 12-05-05
Из: мск
Пользователь №: 4 943



Цитата(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
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th August 2018 - 05:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.0099 секунд с 7
ELECTRONIX ©2004-2016