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

 
 
> Вопросы по XMega
Tim0xA
сообщение Jan 25 2013, 12:47
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 21-02-09
Пользователь №: 45 161



XMega-ми заинтересовался недавно. Имеется отладочная плата XMEGA-A3BU Xplained. Использую Atmel Studio 6 и ASF 3.5.0.

Появилось несколько вопросов. Может коллеги подскажут что-нибудь...

1. Во-первых, в ASF отсутствует функция для управления выходами аналогового компаратора AC. Хотя в драйверах для IAR она имеется. Я прописал установку битов AC1OUT ACOOUT записью в регистр CTRLA, но при отладке в дебаггере вижу, что реально биты не устанавливаются. Пытаюсь в окошке I/O View установить эти биты, тоже безрезультатно. Ни в симуляторе, ни в железе. Что я делаю не так?
На плате стоит чип ATxmega256A3BU.

2. Возможно ли одновременное использование одного аналогового входа компаратором и АЦП? Или в реальности вход будет отдан тому, кто проинициализировал его последним?

3. Хочу записать результаты АЦП в память через DMA. В ASF есть пример - ознакомился, настроил. Запуск АЦП происходит через систему событий циклически, DMA записывает данные в память, все ОК. Все это происходит в спящем режиме. Но мне нужно отловить некий уровень на входе АЦП и после этого выдать данные в USART. Я настраиваю компаратор на выходе АЦП, который генерирует прерывание, когда на входе АЦП значение первышает некий уровень. Как только разрешаю это прерывание - сразу перестает работать система событий после получения результата АЦП, соответственно не запускается новый цикл АЦП и запись DMA. Ок. Перевожу АЦП в режим freerun - компаратор отрабатывает как надо, прерывания генерятся, но теперь и события генерятся только вместе с прерываниями после срабатывания компаратора. Соответсвенно и DMA тоже работает только когда сработал компаратор. Как только компаратор выключается - пропадают прерывания и события. Почему?
Мне нужно чтобы события оставалсиь всегда, чтобы пока проц спит в фоне постоянно работал АЦП и велась запись в память через DMA. Проц должен просыпаться только если на входе компаратора есть требуемый уровень. А так работает или одно или другое. Т.е. либо тебе события без прерываний, либо события с прерываниями, но после срабатывание компаратора.

Пока вижу одно решение: Настроить два аналоговых входа, физически запараллелить их - один настроить на АЦП с событиями и DMA, второй отдать аналоговому компаратору, который будет генерить прерывание при превышении порога.

Отсюда вопрос 4.
Можно ли запараллелить два входа, позволяет ли это входное сопротивление или нужно сделать какую-то обвязку?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bob1
сообщение Jun 10 2013, 03:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Считает с ноги через компаратор в режиме idle.
Если без AC, то EVSYS_CH3MUX=EVSYS_CHMUX_PORTA_PIN6_gc;

CODE


void main (void){
EVSYS_CH2MUX=EVSYS_CHMUX_TCD0_OVF_gc;
EVSYS_CH0MUX=EVSYS_CHMUX_TCC0_OVF_gc;
TCE0.CTRLA=TC_CLKSEL_EVCH2_gc;
TCC1.CTRLA=TC_CLKSEL_EVCH0_gc;

TCD0.CTRLA=TC_CLKSEL_EVCH3_gc;
ACA.AC0CTRL=0;

ACA.CTRLB=35;
ACA.AC0MUXCTRL=(uint8_t)(AC_MUXPOS_PIN6_gc|AC_MUXNEG_SCALER_gc);
ACA.AC0CTRL=(uint8_t)(AC_INTMODE_RISING_gc|AC_HYSMODE_LARGE_gc|AC_ENABLE_bm);


uint32_t Freq_cnt=F_t_cek(~(F_CPU/10));
}

uint32_t F_t_cek (uint32_t TT) {

TCC0.PER=0xFFFF;
TCC1.PER=0xFFFF;
TCD0.PER=0xFFFF;
TCE0.PER=0xFFFF;
TCC0.CNT=TT;
TCC1.CNT=TT>>16;
TCD0.CNT=0;
TCE0.CNT=0;

TCC1.INTFLAGS=0xF3;
TCC1.INTCTRLA=TC_OVFINTLVL_LO_gc;
TCC0.CTRLA=TC_CLKSEL_DIV1_gc;
EVSYS_CH3MUX=EVSYS_CHMUX_ACA_CH0_gc;
__sleep();
EVSYS_CH3MUX=EVSYS_CHMUX_OFF_gc;
TCC0.CTRLA=TC_CLKSEL_OFF_gc;
TCC1.INTCTRLA=TC_OVFINTLVL_OFF_gc ;

uint32_t Freq_cnt=0x10000*TCE0.CNT;
return Freq_cnt+TCD0.CNT;
};


Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 10 2013, 06:59
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(bob1 @ Jun 10 2013, 07:34) *
Если без AC, то EVSYS_CH3MUX=EVSYS_CHMUX_PORTA_PIN6_gc;


Спасибо! Вроде заработало. Действительно секрет состоял в использовании EVSYS.
Моей же ошибкой было то, что PDF-документы я читала (на них Google ссылки хорошо дает), но не видела к ним кодов. А они есть, хотя и в разделе мобилок:
http://www.atmel.com/applications/mobile_e...x?tab=documents
(справа от соответствующих PDF-документов).
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 12 2013, 14:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Xenia @ Jun 10 2013, 09:59) *
А они есть, хотя и в разделе мобилок:
http://www.atmel.com/applications/mobile_e...x?tab=documents
(справа от соответствующих PDF-документов).

Причём тут мобилки?

Appnotes с исходниками.

Цитата(Xenia @ Jun 12 2013, 17:31) *
А как в обратную сторону? Т.е. то, что все обычные Меги умеют делать через выход OC?
Это когда таймер генерит меандр (или PWM), который выводится на какую-то ножку Меги.

Про ШИМ смотрите AVR1306 и AVR1306 code
Пункты про Single Slope PWM Mode и Dual Slope PWM Modes
Цитата(Xenia @ Jun 12 2013, 17:31) *
А как это реализуется на ХМеге? Тоже через EVSYS?

Тактировать таймер можно и от системы событий, но зачем? Обычно от системного клока шим тактируют.

Такой шим не подойдёт:
Код
{// настройка шима

        /* Enable output  */
        PWM_PORT.DIR = 1<<PWM_PIN;
        TC0_ConfigClockSource( &TCF0, TC_CLKSEL_OFF_gc );


        /* Set the TC period. */
        TC_SetPeriod( &TCF0, PWM_PERIOD-1);

        /* Configure the TC for single slope mode. */
        TC0_ConfigWGM( &TCF0, TC_WGMODE_SS_gc );

        /* Enable Compare channel A. */
        TC0_EnableCCChannels( &TCF0, TC0_CCBEN_bm );

        TC_SetCompareB( &TCF0,  PWM_PERIOD>>1);
        TC_SetCount( &TCF0, 0);

        /* Start timer by selecting a clock source. */
        TC0_ConfigClockSource( &TCF0, TC_CLKSEL_DIV1_gc );
    }

?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 12 2013, 16:02
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(_Артём_ @ Jun 12 2013, 18:53) *
Такой шим не подойдёт:


Меня не генерация шима волнует, а способ его передачи на пин! Т.е. во вне микроконтроллера.
В вашем же коде я вижу только то, то вы настроили один пин порта на вывод (PWM_PORT.PWM_PIN), но нигде не вижу его связи с таймером, т.к. его имя нигде больше не упоминается.
Откуда таймер знает, что надо выдавать меандр именно на этот пин? А если бы у меня на вывод было открыто много пинов у разных портов? Неужели таймер станет гнать меандр на все порты, сконфигурированные на вывод?
Думаю, что-то важное вы пропустили. А именно то, что меня волнует - перенаправление меандра на конкретный пин.

В рекомендованном вами документе AVR1306 очень много написано про разные варианты модуляции, но что мне от того толку, если эту модуляцию наружу вывести не могу?

Сообщение отредактировал IgorKossak - Jun 12 2013, 21:48
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 12 2013, 16:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Xenia @ Jun 12 2013, 19:02) *
Меня не генерация шима волнует, а способ его передачи на пин! Т.е. во вне микроконтроллера.
В вашем же коде я вижу только то, то вы настроили один пин порта на вывод (PWM_PORT.PWM_PIN), но нигде не вижу его связи с таймером, т.к. его имя нигде больше не упоминается.

Упоминается:
Код
TC0_EnableCCChannels( &TCF0, TC0_CCBEN_bm );


Цитата(Xenia @ Jun 12 2013, 19:02) *
Откуда таймер знает, что надо выдавать меандр именно на этот пин?

Таймер узнаёт это из того, что разрешена Capture-compare функция на нужном канале таймера, а канал привязан к определённому пину порта.

Цитата(Xenia @ Jun 12 2013, 19:02) *
Если у меня на вывод открыто много пинов у разных портов? Неужели таймер станет гнать меандр на все порты, сконфигурированные на вывод?

С чего бы таймеру это делать? Не будет он так работать (разве что с ума сойдёт).

Цитата(Xenia @ Jun 12 2013, 19:02) *
Думаю, что-то важное вы пропустили.

Ничего я не пропустил - шим выдаётся куда нужно.

Цитата(Xenia @ Jun 12 2013, 19:02) *
А именно то, что меня волнует - перенаправление меандра на конкретный пин.

Разрешив альтернативную функцию и включив порт на выход вы привязываете шим к нужному пину.
Прикрепленное изображение

Цитата(Xenia @ Jun 12 2013, 19:02) *
В рекомендованном вами документе AVR1306 очень много написано про разные варианты модуляции, но что мне от того толку, если эту модуляцию наружу вывести не могу?

Пример шима можете взять в коде к AVR1306:
CODE
/*!
* This function implements example 4, "Using a Timer/Counter for PWM
* Generation" from the "Getting Started" section of application note AVR1306.
*
* This example shows how to configure TCC0 for pulse width modulation output
* with varying duty cycle on channel A.
*/
void Example4(void)
{
//Enable output on PC0.
PORTC.DIR = 0x01;

//Set the TC period.
TC_SetPeriod(&TCC0, 0xffff);

//Configure the TC for single slope mode.
TC_ConfigWGM(&TCC0, TC_WGMODE_SS_gc);

//Enable Compare channel A.
TC_EnableCCChannels(&TCC0, TC_CCAEN_bm);

//Start timer by selecting a clock source.
TC_ConfigClockSource(&TCC0, TC_CLKSEL_DIV1_gc);

uint16_t compareValue = 0x0000;
for (;;) {
//Calculate new compare value.
compareValue += 32;

//Output new compare value.
TC_SetCompareA(&TCC0, compareValue);

//Wait for the new compare value to be latched from CCABUF[H:L] to CCA[H:L].
//This happens at TC overflow (UPDATE).
while( TC_GetOverflowFlag(&TCC0) == 0) {
}

//Clear overflow flag.
TC_ClearOverflowFlag(&TCC0);
}
}


Этого не достаточно?

Сообщение отредактировал IgorKossak - Jun 12 2013, 21:49
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Tim0xA   Вопросы по XMega   Jan 25 2013, 12:47
- - bob1   1. Не включено тактирование AC. Вот биты и не вклю...   Jan 26 2013, 14:51
|- - Tim0xA   bob1, спасибо за ответы! Цитата1. Не включено...   Jan 27 2013, 21:55
- - Xenia   Подскажите пожалуйста (дайте примерчик), как ХМего...   Jun 9 2013, 21:16
|- - zombi   Цитата(Xenia @ Jun 10 2013, 00:16) Но как...   Jun 9 2013, 22:33
|- - Xenia   Цитата(zombi @ Jun 10 2013, 02:33) Доскон...   Jun 9 2013, 23:17
|- - Xenia   Цитата(_Артём_ @ Jun 12 2013, 20:18) Упом...   Jun 12 2013, 16:23
|- - _Артём_   Цитата(Xenia @ Jun 12 2013, 19:23) TCF0 -...   Jun 12 2013, 16:29
||- - Xenia   Цитата(_Артём_ @ Jun 12 2013, 20:29) В оп...   Jun 12 2013, 16:37
|- - _Артём_   Цитата(Xenia @ Jun 12 2013, 19:23) В хиде...   Jun 12 2013, 16:40
- - Xenia   А как в обратную сторону? Т.е. то, что все обычные...   Jun 12 2013, 14:31
- - Xenia   Дошло до меня - номер порта и пина нигде не задает...   Jun 12 2013, 16:50
|- - _Артём_   Цитата(Xenia @ Jun 12 2013, 19:50) Т.е. т...   Jun 12 2013, 17:46
- - Duhas   Дабы не плодить тем спрошу здесь. Понадобилось мне...   Aug 14 2013, 06:54
|- - Xenia   Цитата(Duhas @ Aug 14 2013, 10:54) я вижу...   Aug 14 2013, 07:43
- - Duhas   спасибо за указание на мэйн. пины я писал те, чт...   Aug 16 2013, 03:15
- - Xenia   У меня возник новый вопрос: а можно ли наоброт? Т....   Sep 15 2013, 13:13
|- - Tiro   Цитата(Xenia @ Sep 15 2013, 16:13) У меня...   Sep 15 2013, 14:53
|- - Xenia   Цитата(Tiro @ Sep 15 2013, 18:53) Ксения,...   Sep 15 2013, 15:08
|- - Tiro   Цитата(Xenia @ Sep 15 2013, 18:08) Я тоже...   Sep 15 2013, 16:09
|- - Xenia   Цитата(Tiro @ Sep 15 2013, 20:09) Я ничег...   Sep 15 2013, 16:52
|- - Tiro   Цитата(Xenia @ Sep 15 2013, 19:52) Вы зря...   Sep 15 2013, 16:57
|- - Xenia   Цитата(Tiro @ Sep 15 2013, 20:57) Ну не з...   Sep 15 2013, 17:06
|- - Tiro   Цитата(Xenia @ Sep 15 2013, 20:06) Данные...   Sep 15 2013, 17:29
|- - Xenia   Цитата(Tiro @ Sep 15 2013, 21:29) Глянул ...   Sep 15 2013, 17:40
|- - Tiro   Цитата(Xenia @ Sep 15 2013, 20:40) Задача...   Sep 15 2013, 17:56
|- - Xenia   Цитата(Tiro @ Sep 15 2013, 21:56) Моя скл...   Sep 15 2013, 18:12
- - ArtemKAD   Xenia, найдите описание регистра CLKEVOUT . Думаю ...   Sep 15 2013, 18:41
|- - Xenia   Цитата(ArtemKAD @ Sep 15 2013, 22:41) Xen...   Sep 15 2013, 19:28
- - ArtemKAD   Еще раз посмотрите! Цитата13.15.4 CLKEVOUT - ...   Sep 15 2013, 19:49
- - Xenia   У моих портов нет регистра CLKEVOUT . Этот регистр...   Sep 15 2013, 20:56
|- - Tiro   Цитата(Xenia @ Sep 15 2013, 23:56) А вот ...   Sep 15 2013, 21:12
- - Duhas   хоть он и сидит рядом с виртуальными портами, но о...   Sep 16 2013, 07:11
- - ArtemKAD   Цитатахоть он и сидит рядом с виртуальными портами...   Sep 16 2013, 17:16
|- - zombi   Цитата(ArtemKAD @ Sep 16 2013, 20:16) В о...   Sep 17 2013, 07:49
||- - Xenia   Цитата(zombi @ Sep 17 2013, 11:49) Пробыв...   Sep 17 2013, 12:11
||- - Navovvol   Цитата(Xenia @ Sep 17 2013, 16:11) А что,...   Sep 17 2013, 13:31
||- - Xenia   Цитата(Navovvol @ Sep 17 2013, 17:31) У м...   Sep 17 2013, 14:06
||- - _Pasha   Цитата(Xenia @ Sep 17 2013, 17:06) P.P.S....   Sep 17 2013, 17:28
||- - HHIMERA   Цитата(_Pasha @ Sep 17 2013, 20:28) Такая...   Sep 18 2013, 05:13
||- - _Pasha   Цитата(HHIMERA @ Sep 18 2013, 08:13) STM8...   Sep 18 2013, 06:16
||- - Xenia   Цитата(_Pasha @ Sep 18 2013, 10:16) Я гов...   Sep 18 2013, 06:32
||- - HHIMERA   Цитата(_Pasha @ Sep 18 2013, 09:16) Я гов...   Sep 18 2013, 07:05
||- - _Pasha   Цитата(HHIMERA @ Sep 18 2013, 10:05) ...   Sep 18 2013, 12:54
||- - HHIMERA   Цитата(_Pasha @ Sep 18 2013, 15:54) 74LVC...   Sep 18 2013, 14:41
||- - _Pasha   Цитата(HHIMERA @ Sep 18 2013, 17:41) Та н...   Sep 18 2013, 15:30
||- - HHIMERA   Цитата(_Pasha @ Sep 18 2013, 18:30) Наско...   Sep 18 2013, 15:41
|- - ArtemKAD   Цитата(ArtemKAD @ Sep 16 2013, 20:16) Сам...   Sep 19 2013, 12:06
- - Duhas   т.е. при выводе просто тишина? ради эксперимента...   Sep 17 2013, 08:49
|- - zombi   Цитата(Duhas @ Sep 17 2013, 11:49) т.е. п...   Sep 17 2013, 09:35
- - ArtemKAD   К примеру clkPER4 можно использовать для увеличени...   Sep 17 2013, 12:59
- - Duhas   что измеряете, если не секрет?   Sep 17 2013, 16:22
|- - Xenia   Цитата(Duhas @ Sep 17 2013, 20:22) что из...   Sep 17 2013, 17:18
|- - zombi   Цитата(Xenia @ Sep 17 2013, 20:18) разгов...   Sep 17 2013, 18:03
||- - Xenia   Цитата(zombi @ Sep 17 2013, 22:03) В DS н...   Sep 17 2013, 18:22
||- - zombi   Цитата(Xenia @ Sep 17 2013, 21:22) Тем бо...   Sep 17 2013, 20:31
|- - ArtemKAD   Цитата(Xenia @ Sep 17 2013, 20:18) Пока и...   Sep 17 2013, 19:47
- - Navovvol   Xenia, я кажется понял, что требуется. Пусть Atxm...   Sep 18 2013, 07:01
- - Xenia   Цитата(Navovvol @ Sep 18 2013, 11:01) Дал...   Sep 18 2013, 07:42
- - Navovvol   Цитата(Xenia @ Sep 18 2013, 11:42) Про ре...   Sep 18 2013, 08:13


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 17:49
Рейтинг@Mail.ru


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