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

 
 
> Вопросы по 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
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 64)
bob1
сообщение Jan 26 2013, 14:51
Сообщение #2


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

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



1. Не включено тактирование AC. Вот биты и не включаются.
2. Почему бы нет. Должно работать.
3. Без кода можно только гадать.....
У АЦп также есть прерывание по уровню..смотрите даташит.
4. Можно, но не нужно.
Go to the top of the page
 
+Quote Post
Tim0xA
сообщение Jan 27 2013, 21:55
Сообщение #3





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



bob1, спасибо за ответы!

Цитата
1. Не включено тактирование AC. Вот биты и не включаются.

Так и оказалось. Я устанавливал бит разрешения выхода компаратора до момента включения компаратора. Поменял две строчки кода местами - все заработало.

Цитата
2. Почему бы нет. Должно работать.

Проверил - действительно работает.

Цитата
3. Без кода можно только гадать.....
У АЦп также есть прерывание по уровню..смотрите даташит.

Я это прерываение как раз и использовал, но проблема была в том, что как только его включаешь, перестают происходить события EVSYS_CHMUX_ADCA_CH0_gc и DMA_CH_TRIGSRC_ADCA_CH0_gc до момента срабатывания компаратора. А мне нужно было все данные через DMA сохранить в буфер, независимо от того, выше они порога компаратора или нет. Прерывание по уровню по моему замыслу должно было только разбудить процессор и инициировать обработку сохраненных данных из циклического буфера.

Я нашел объяснение в даташите, почему так происходит
Цитата
Interrupt requests and events can be generated when an ADC conversion is complete OR when an ADC measurements is above or below the ADC compare register value
Т.е. "или-или".

В итоге, учитвая то, что один вход может использоваться ADC и AC, я решил поставленную задачу без функции компаратора ADC.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 9 2013, 21:16
Сообщение #4


Гуру
******

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



Подскажите пожалуйста (дайте примерчик), как ХМегой считать импульсы? Т.е. как на ней делать то, что обычные Меги делали через входы T0 и T1?

В описаниях одни только слова, по которым код не сваришь. Смотрела документы:
AVR1001 : Getting Started With the XMEGA Event System
AVR1306 : Using the XMEGA Timer_Counter
AVR1307 : Using the XMEGA USART"
AVR1311 : Using the XMEGA Timer_Counter Extensions
AVR1313 : Using the XMEGA IO Pins and External Interrupts
AVR1617 : Frequency Measurement with Atmel AVR XMEGA Family Devices"
но толку чуть.

Поняла лишь одно: таймер нужно запрограммировать на счет не от делителя тактовой частоты, а от канала событий. Это сделать я смогу, например, как-то так:
TCC0.CTRLA = TC_CLKSEL_EVCH0_gc; // Clock Selection: Event Channel 0
А потом какой-то пин в порту запрограммировать в режиме сенсора. Это тоже вроде бы ясно:
PORTF.PIN7CTRL = PORT_ISC_RISING_gc; // Sense rising edge on PORTF7
Но как отправить это событие в тот самый канал, который ждет таймер, остается для меня загадкой.

В документе "AVR1001 : Getting Started With the XMEGA Event System" дан такой совет:
Цитата
4.4 Event Counting
It is possible to use an event channel as a clock source for a Timer/Counter. This can be used to count the number of events on an event channel.
4.4.1 Configuration
In this example, TCC0 will be used to count the number of times a button connected to PD0 has been pressed.
1. Configure PD0 to trigger on rising or falling edge.
2. Select PD0 as event source for event channel 0.
3. Set the digital filter for event channel 0 to the highest possible value.

4. Configure event channel 0 as the clock source for TCC0.
TCC0 will now count the number of times the button connected to PD0 has been pressed.

Однако мне не ясно, как выполнять пунты 2 и 3, а подробности опущены. А про "digital filter for event channel" вообще не нашла даже упоминания, что такой существует.

Полагаю, что задаю не слишком тяжелый вопрос, т.к. не прошу вникать в мою задачу, а прошу лишь объяснить, как выкручиваться на ХМеге в тех задачах, которые на обычных Мегах решались через счетный вход таймеров T0 и T1. Например, на обычной Меге для этого было достаточно одной строки кода:
TCCR1B = 0x7; // external clock source, on rising edge
А дальше лишь присоединить сигнал к ножке T1 и дело в шляпе. А с ХМегой уже больше недели над этим вопросом бьюсь, голова распухла от чтения мануалов, а дело с мертвой точки не слезает. Вероятно, в интернете полно таких примеров, но найти их не смогла - видимо запрос не смогла правильно сформулировать.
Go to the top of the page
 
+Quote Post
zombi
сообщение Jun 9 2013, 22:33
Сообщение #5


Гуру
******

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



Цитата(Xenia @ Jun 10 2013, 00:16) *
Но как отправить это событие в тот самый канал, который ждет таймер, остается для меня загадкой.

Досконально не разбирался и не экспериментировал, но думаю нужно указать "Системе событий" источник события (нужный пин порта) путём засписи в нужный рег. CHnMUX соотв. данных.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 9 2013, 23:17
Сообщение #6


Гуру
******

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



Цитата(zombi @ Jun 10 2013, 02:33) *
Досконально не разбирался и не экспериментировал, но думаю нужно указать "Системе событий" источник события (нужный пин порта) путём записи в нужный рег. CHnMUX соотв. данных.


Ваш ответ слишком абстрактный. Я и так догадываюсь, что для того, чтобы заработало, нужно записать в нужные регистры нужные значения sm.gif. Хотелось бы конкретнее - рабочий пример. Можно без объяснений - разберусь сама.
Go to the top of the page
 
+Quote Post
bob1
сообщение Jun 10 2013, 03:34
Сообщение #7


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

Группа: Свой
Сообщений: 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
Сообщение #8


Гуру
******

Группа: Модератор 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
Xenia
сообщение Jun 12 2013, 14:31
Сообщение #9


Гуру
******

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



А как в обратную сторону? Т.е. то, что все обычные Меги умеют делать через выход OC?
Это когда таймер генерит меандр (или PWM), который выводится на какую-то ножку Меги.

А как это реализуется на ХМеге? Тоже через EVSYS?
Документы занового прошерстила, но именно такого примера не нашла. А похожие работать у меня отказались.

Пробовала так:

Цитата
TCD0.PER = 1000; // 32 MHz / 1000 = 32 KHz
TCD0.CTRLA = TC_CLKSEL_DIV1_gc;
TCD0.CTRLB = 0;
TCD0.INTCTRLA = 0;
TCD0.CTRLD = TC_EVACT_QDEC_gc | TC_EVSEL_CH5_gc;

PORTF_PIN0CTRL = PORT_ISC_LEVEL_gc;
EVSYS.CH5MUX = EVSYS_CHMUX_PORTF_PIN0_gc;
EVSYS.CH5CTRL = EVSYS_QDEN_bm | EVSYS_DIGFILT_2SAMPLES_gc;

Но ничего не вышло - на ножке PORTF0 стоит твердо нуль.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 12 2013, 14:53
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #11


Гуру
******

Группа: Модератор 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
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Xenia
сообщение Jun 12 2013, 16:23
Сообщение #13


Гуру
******

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



Цитата(_Артём_ @ Jun 12 2013, 20:18) *
Упоминается:
Код
TC0_EnableCCChannels( &TCF0, TC0_CCBEN_bm );


TCF0 - это имя таймера, а не порта. Где у вас упоминается PWM_PORT, кроме того места, где вы его открыли на вывод?

В хидерое среди определений PWM_PIN не нашла. Это константа? А если мне нужно PWM выдать на другой пин, тогда что? Или место выдачи PWM в порту фиксировано?
Скажем, если мне нужен PWM на другой ножке, то какие измения в коде я должна провести, КРОМЕ открытия этого пина на вывод?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 12 2013, 16:29
Сообщение #14


Гуру
******

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



Цитата(Xenia @ Jun 12 2013, 19:23) *
TCF0 - это имя таймера, а не порта

Совершенно верно. TCF0 - таймер.

Цитата(Xenia @ Jun 12 2013, 19:23) *
Где у вас упоминается PWM_PORT, кроме того места, где вы его открыли на вывод?


В определениях упоминается:
Код
#define PWM_PORT PORTF
#define PWM_PIN 1
#define PWM_PERIOD (3686400UL*8/50000UL) // 3686400UL*8 - тактовая ядра

Больше нигде.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 12 2013, 16:37
Сообщение #15


Гуру
******

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



Цитата(_Артём_ @ Jun 12 2013, 20:29) *
В определениях упоминается:
Код
#define PWM_PORT PORTF
#define PWM_PIN 1
#define PWM_PERIOD (3686400UL*8/50000UL) // 3686400UL*8 - тактовая ядра

Больше нигде.


Так это, значит, ваши собственные определения?
А если я переопределю PWM_PIN на другое число, скажем на 2 вместо 1, то PWM начет выводиться на соседнюю ножку? Или нет?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 12 2013, 16:40
Сообщение #16


Гуру
******

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



Цитата(Xenia @ Jun 12 2013, 19:23) *
В хидерое среди определений PWM_PIN не нашла. Это константа?

Да - константа. На плате у меня там шим должен быть.

Цитата(Xenia @ Jun 12 2013, 19:23) *
Или место выдачи PWM в порту фиксировано?


Место выдачи шима фиксировано следующим образом:
Таймер типа 0 может выводить шим с канала А на пин 0 порта, с канала Б на пин 1 порта ... с канала D на пин 3.
Таймер типа 1 может выводить шим с канала А на пин 4 порта, с канала Б на пин 5.

Цитата(Xenia @ Jun 12 2013, 19:23) *
Скажем, если мне нужен PWM на другой ножке, то какие измения в коде я должна провести

Нужно разрешить соответствующий канал таймера, ну и пин на выход.

Цитата(Xenia @ Jun 12 2013, 19:37) *
Так это, значит, ваши собственные определения?

Естественно.

Цитата(Xenia @ Jun 12 2013, 19:37) *
А если я перепределю PWM_PIN на другое число, скажем на 2 вместо 1, то PWM начет выводиться на соседнюю ножку?

Нужно ещё канал разрешить и соответствующий регистр сравнения инициализировать (для пина 2 - канал С и set new compare value for compare channel C):

TC0_EnableCCChannels( &TCF0, TC0_CCCEN_bm );
TC_SetCompareC( &TCF0, PWM_PERIOD>>1);
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 12 2013, 16:50
Сообщение #17


Гуру
******

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



Дошло до меня - номер порта и пина нигде не задается, поскольку он намертво привязан к имени таймера. Т.е. таймер может выдать PWM только на одноименный с ним порт, и только на пин, определяемый буквой после CC. Например, выдать PWM на PORTF0 можно ТОЛЬКО через TCF0.CCA и никак не иначе. А если нужна соседняя нога PORTF1, то надо переходить на TCF0.CCB, и т.д.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jun 12 2013, 17:46
Сообщение #18


Гуру
******

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



Цитата(Xenia @ Jun 12 2013, 19:50) *
Т.е. таймер может выдать PWM только на одноименный с ним порт, и только на пин, определяемый буквой после CC. Например, выдать PWM на PORTF0 можно ТОЛЬКО через TCF0.CCA и никак не иначе. А если нужна соседняя нога PORTF1, то надо переходить на TCF0.CCB, и т.д.

Всё так. Дошло.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Aug 14 2013, 06:54
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



Дабы не плодить тем спрошу здесь. Понадобилось мне переделать DFU bootloader для XMEGAxxA4 на свою ножку. это стало для меня трудной задачей ) для студии в ASF я готовых примеров не нашел, что делать с исходниками из архива http://www.atmel.com/Images/AVR1916.zip мне не понятно( т.к. я вижу там только хидеры, ни файла проекта ни сишного файла с main я не ощущаю, ЧЯДНТ учитывая что я пишу обычно в студии и на АСМе? )

ПС если есть добрые люди готовые пересобрать бутлоадеры под:
ATxmega16A4U - PD4
ATxmega128A4U - PB1 - буду оч благодарен )
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 14 2013, 07:43
Сообщение #20


Гуру
******

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



Цитата(Duhas @ Aug 14 2013, 10:54) *
я вижу там только хидеры, ни файла проекта ни сишного файла с main я не ощущаю, ЧЯДНТ учитывая что я пишу обычно в студии и на АСМе?

Во всех бутлоадерах есть main() и находится он в файле:
\common\services\usb\class\dfu_flip\device\bootloader\xmega\main.c

Цитата(Duhas @ Aug 14 2013, 10:54) *
ПС если есть добрые люди готовые пересобрать бутлоадеры под:
ATxmega16A4U - PD4
ATxmega128A4U - PB1 - буду оч благодарен )

Линии USB фиксированы, это PD6 (D-) и PD7 (D+). Переставить эти функции на другое место нельзя. Но если вам нужен загрузчик не по USB, а по USART, то пины PD4 и PB1 для этого тоже не годятся, т.к. RXD/TXD тоже выводятся на 6-й и 7-й пины портов C и D.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Aug 16 2013, 03:15
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



спасибо за указание на мэйн.

пины я писал те, что должны запускать бутлоадер при старте, чтоб управление не передалось приложению, то что ЮСБ линии фиксированы - понятное дело )

еще раз спасибо. пересобрал под нужные пины. может заодно подскажете в чем идея прятать так глубоко основные файлы проекта?

Сообщение отредактировал Duhas - Aug 16 2013, 06:30
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 13:13
Сообщение #22


Гуру
******

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



У меня возник новый вопрос: а можно ли наоброт? Т.е. существует ли возможность превратить событие с "Event Channel" в дрыгание какой-либо ножки?

Про то, как превратить ножку в сенсор, вызывающий переключение "Event Channel", я поняла, и это у меня заработало. Но гложет вопрос про обратную возможность - превратить возникшее у "Event Channel" переключение состояния в подергивание какой-то ножки, но только другой. Т.е. интересует возможность использования "Event Channel", как средства сообщения между двумя ножками МК, чтобы одна его ножка повторяла (в той же фазе или противофазе) изменения уровня на другой.
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 14:53
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 15 2013, 16:13) *
У меня возник новый вопрос: а можно ли наоброт? Т.е. существует ли возможность превратить событие с "Event Channel" в дрыгание какой-либо ножки?

Про то, как превратить ножку в сенсор, вызывающий переключение "Event Channel", я поняла, и это у меня заработало. Но гложет вопрос про обратную возможность - превратить возникшее у "Event Channel" переключение состояния в подергивание какой-то ножки, но только другой. Т.е. интересует возможность использования "Event Channel", как средства сообщения между двумя ножками МК, чтобы одна его ножка повторяла (в той же фазе или противофазе) изменения уровня на другой.

Ксения, микроконтроллер это аппаратно-программное устройство, содержащее несколько конфигурируемых аппаратных узлов, которые могут сигнализировать о своем состоянии флагами или прерываниями программы. Прямая связь аппаратных узлов в нем не предусмотрена, только через программу.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 15:08
Сообщение #24


Гуру
******

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



Цитата(Tiro @ Sep 15 2013, 18:53) *
Ксения, микроконтроллер это аппаратно-программное устройство, содержащее несколько конфигурируемых аппаратных узлов, которые могут сигнализировать о своем состоянии флагами или прерываниями программы. Прямая связь аппаратных узлов в нем не предусмотрена, только через программу.


Я тоже всегда так считала. Но вот увидела, как сделан у XMaga "Event System", и возбудилась sm.gif.
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 16:09
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 15 2013, 18:08) *
Я тоже всегда так считала. Но вот увидела, как сделан у XMaga "Event System", и возбудилась sm.gif.

Равнодушнее, мадам, это всего лишь кусок кремния ))) Я ничего не знаю про "Event System", но есть какой-нибудь практический вопрос по конкретной хмеге и ножкам? Готов посмотреть дейташит на аппаратуру. Заодно новенькое узнаю ))
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 16:52
Сообщение #26


Гуру
******

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



Цитата(Tiro @ Sep 15 2013, 20:09) *
Я ничего не знаю про "Event System", но есть какой-нибудь практический вопрос по конкретной хмеге и ножкам? Готов посмотреть дейташит на аппаратуру. Заодно новенькое узнаю ))

Вы зря беретесь отвечать на вопросы, связанные с тем, о чем вы ничего не знаете.

Речь идет о возможностях "Event System Controller", упоминаемого в даташите. Там сказано:
Цитата
 Events can be generated by
Timer/Counters (TCxn)
Real Time Counter (RTC)
Analog to Digital Converters (ADCx)
Analog Comparators (ACx)
Ports (PORTx)
System Clock (ClkSYS)
Software (CPU)

 Events can be used by
Timer/Counters (TCxn)
Analog to Digital Converters (ADCx)
Digital to Analog Converters (DACx)
Ports (PORTx)
DMA Controller (DMAC)
IR Communication Module (IRCOM)

Меня интересует вторая часть этих возможностей - не генерация событий (с ней все ясно), а их использование. И в частности для управления пинами порта (соответствующий пункт в цитате я выделила и подчеркнула).

В русском варианте есть такая информация:
Цитата
К линии порта также можно программно подключить канал 7 системы событий (Event Channel 7). Если в этом канале генерируется событие, то соответствующий этому событию сигнал будет отображаться на выводе микроконтроллера в течение одного периода периферийного тактового сигнала.
(цитировано из http://kit-e.ru/articles/micro/2008_4_95.php )

И вот это интересует меня в самом буквальном смысле: "отобразить событие на выводе микроконтроллера".

На рисунке, приведенном в даташите, стрелочки от "Port pins" идут в обе стороны! И меня интересует та возможность, которая соответствует стрелке вниз.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 16:57
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 15 2013, 19:52) *
Вы зря беретесь отвечать на вопросы, связанные с тем, о чем вы ничего не знаете.

Речь идет о возможностях "Event System Controler", упоминаемой в даташите. Там сказано:

Меня интересует вторая часть этих возможностей - не генерация событий (с ней все ясно), а их использование. И в частсности для упралением пинамм порта (соотвествующий пункт в цитате я выделила и подчеркнула).

В русском варианте есть такая информация:

И вот это интересует меня в самом буквальном смысле: "отобразить событие на выводе микроконтроллера".

Ну не зря, мне интересное все новое. А вот наименования контроллера нет, поэтому я не могу прочесть дейташит, который есть у Вас. И в ссылке правая скобка мешает переходить на статью.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 17:06
Сообщение #28


Гуру
******

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



Цитата(Tiro @ Sep 15 2013, 20:57) *
Ну не зря, мне интересное все новое. А вот наименования контроллера нет, поэтому я не могу прочесть дейташит, который есть у Вас. И в ссылке правая скобка мешает переходить на статью.


Данные возможности относятся ко всему семейству XMega, т.к. контроллер "Event System" представляет особенность новой архитектуры. Да и журнальная статья, ссылку на которую я привела, относится к рекламе возможностей всей линейки XMega, а не какого-то отдельного экземпляра.

Но лично у меня флагман sm.gif этой серии - ATxmega128A1.

P.S. Более конкретно меня интересует всё, что связано с флагами:
Код
    PORTCFG_EVOUT_PC7_gc,    ///< Event Channel 7 Output on Port C pin 7
    PORTCFG_EVOUT_PD7_gc,    ///< Event Channel 7 Output on Port D pin 7
    PORTCFG_EVOUT_PE7_gc,    ///< Event Channel 7 Output on Port E pin 7
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 17:29
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 15 2013, 20:06) *
Данные возможности относятся ко всему семейству XMega, т.к. контроллер "Event System" представляет особенность новой архитектуры. Да и журнальная статья, ссылку на которую я привела, относится к рекламе возможностей всей линейки XMega, а не какого-то отдельного экземпляра.

Но лично у меня флагман sm.gif этой серии - ATxmega128A1.

Глянул дейташит на 256А3. Там обещают в качестве Ивент Систем некий 8-канальный мультиплексор, который в обход контроллера прерываний передает сигналы из одного аппаратного блока в другой, но с задержкой до 2 МЦ. То есть мне смотреть возможность передачи сигналов между двумя ножками разных портов? Или есть другая, конкретная задача?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 17:40
Сообщение #30


Гуру
******

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



Цитата(Tiro @ Sep 15 2013, 21:29) *
Глянул дейташит на 256А3. Там обещают в качестве Ивент Систем некий 8-канальный мультиплексор, который в обход контроллера прерываний передает сигналы из одного аппаратного блока в другой, но с задержкой до 2 МЦ. То есть мне смотреть возможность передачи сигналов между двумя ножками разных портов? Или есть другая, конкретная задача?


Задача интересует в самом общем виде. Но, видя вашу склонность к конкретизации sm.gif, предложу задачу моргания светодидом 1 раз в секунду (сигнализируя о работоспособности устройства) не прибегая к прерываниям! Очевидно, что "задержка до 2 МЦ" в этом деле несущественна.

Например, при тактовой частоте 32 МГц запускаем таймер :
TCC0.PER = 15625; // 32000000 Hz / 1024 / 2 = 15625 (без остатка!) = 1 Гц ровно
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;

Теперь отправим признак переполнения в 7-ой канал "Event System Controller":
EVSYS.CH7MUX = EVSYS_CHMUX_TCC0_OVF_gc; // channel 7 <- Overflow от таймера ТСС0

Ну, а дальше-то что? Как мне теперь событие 7-го канала превратить во что-то реальное?
Есть у меня флаг
PORTCFG_EVOUT_PE7_gc, ///< Event Channel 7 Output on Port E pin 7
якобы способный вывести событие на пин PE7, но что для этого надо сделать? Куда этот флаг пихать?
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 17:56
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 15 2013, 20:40) *
Задача интересует в самом общем виде. Но, видя вашу склонность к конкретизации sm.gif, предложу задачу моргания светодидом 1 раз в секунду (сигнализируя о работоспособности устройства) не прибегая к прерываниям! Очевидно, что "задержка до 2 МЦ" в этом деле несущественна.

Ну, а дальше-то что? Как мне теперь событие 7-го канала превратить во что-то реальное?
Есть у меня флаг
PORTCFG_EVOUT_PE7_gc, ///< Event Channel 7 Output on Port E pin 7
якобы способный вывести событие на пин PE7, но что для этого надо сделать? Куда этот флаг пихать?

Моя склонность к конкретизации вызвана только необходимостью сузить рамки материала для изучения ))
Судя по дейташиту, функциональность Ивент Систем весьма ограничена, на вывод (и обратно) можно отмапить только из Канала 0 Ивент Систем на ножку Порт 7. Раздел 15.1 предпоследняя строка.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 18:12
Сообщение #32


Гуру
******

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



Цитата(Tiro @ Sep 15 2013, 21:56) *
Моя склонность к конкретизации вызвана только необходимостью сузить рамки материала для изучения ))
Судя по дейташиту, функциональность Ивент Систем весьма ограничена, на вывод (и обратно) можно отмапить только из Канала 0 Ивент Систем на ножку Порт 7. Раздел 15.1 предпоследняя строка.


Если вы понимаете, что там написано, то ... напишите строку кода! sm.gif Мне уже совершенно наплевать, нулевой там номер или седьмой. Дайте хоть хоть одним глазком взглянуть на реализацию ЛЮБОГО варианта, где "Event System" дергает пином! И чтобы без всяких оговорок типа "знаю, как это делается, но вам не скажу, т.к. к вашему номеру пина это не подойдет".
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 15 2013, 18:41
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Xenia, найдите описание регистра CLKEVOUT . Думаю Вам это поможет... sm.gif
PS. A1 уже не флагман. Флагман A1U...
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 19:28
Сообщение #34


Гуру
******

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



Цитата(ArtemKAD @ Sep 15 2013, 22:41) *
Xenia, найдите описание регистра CLKEVOUT . Думаю Вам это поможет... sm.gif

Это я видела, оно из другой оперы - к "Event System" отношения не имеет, а просто тактовую частоту (периферийную) на пин гонит. Это совершенно не то.

Цитата(ArtemKAD @ Sep 15 2013, 22:41) *
PS. A1 уже не флагман. Флагман A1U...

Флагманом я назвала его не потому, что он самый лучший, а потому, что самый первый, тогда как A1U - лишь его немного усовершенствованная копия.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 15 2013, 19:49
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Еще раз посмотрите!
Цитата
13.15.4 CLKEVOUT - Clock and Event Out Register
• Bit 7:6 - Reserved
These bits are reserved and will always be read as one. For compatibility with future devices,
always write these bits to zero when this register is written.
• Bit 5:4 - EVOUT[1:0] - Event Output Port
These bits decide which port the Event Channel 0 from the Event System should be output to.
Pin 7 on the selected port is always used, and the CLKOUT bits must be set different from
EVOUT. The pin must be configured as an output pin for the Signaling Event to be available on
the pin.

Table 13-7 on page 145 shows the possible configurations.
• Bits 3:2 - Reserved
These bits are reserved and will always be read as one. For compatibility with future devices,
always write these bits to zero when this register is written.
• Bit 1:0 - CLKOUT[1:0] - Clock Output Port
These bits decide which port the Peripheral Clock should be output to. Pin 7 on the selected port
is always used. The Clock output setting, will override the Event output setting, thus if both are
enabled on the same port pin, the Peripheral Clock will be visible. The pin must be configured as
an output pin for the Clock to be available on the pin.


Это регистр отвечает и за вывод частоты и за событие.
Цитата
Table 13-7. Event Channel 0 output configurations
EVOUT[1:0] Group Configuration Description
00 OFF Event out disabled
01 PC7 Event Channel 0 output on Port C pin 7
10 PD7 Event Channel 0 output on Port D pin 7
11 PE7 Event Channel 0 output on Port E pin 7
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 20:56
Сообщение #36


Гуру
******

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



У моих портов нет регистра CLKEVOUT sm.gif. Этот регистр из категории виртуальных портов, которые я еще не освоила (и что-то не тянет). А у простых портов типа PORTA, PORTB, PORTC, PORTD, PORTE и PORTF такого расширения нет.

Скажем, такие бывают:
PORTB.OUT
PORTE.DIR
PORTE.INTCTRL
PORTE.INT1MASK
PORTE.INTFLAGS
PORTE.INT0MASK

А вот такого не бывает:
PORTE.CLKEVOUT

Error[Pe136]: struct "PORT_struct" has no field "CLKEVOUT"
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 21:12
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Xenia @ Sep 15 2013, 23:56) *
А вот такого не бывает:
PORTE.CLKEVOUT

Error[Pe136]: struct "PORT_struct" has no field "CLKEVOUT"

Ксения, ну где-то есть этот CLKEVOUT. Нужно хидер прочитать, ты ж программист. И вообще, это уже становится частным вопросом, АртемКАД вот подключился. Может сперва сами порешаем, а потом решение сюда? А если кто из форумчан знает, сам отпишется.
А если у АртемКАД есть решение, то я попрошу его не говорить сразу.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 16 2013, 07:11
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



хоть он и сидит рядом с виртуальными портами, но отношения к ним прямого не имеет, просто состоит вместе с ними в одной группе PORTCFG ...
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 16 2013, 17:16
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
хоть он и сидит рядом с виртуальными портами, но отношения к ним прямого не имеет, просто состоит вместе с ними в одной группе PORTCFG ...

Не совсем вместе с ними. Просто в PORTCFG засунули в т.ч. и настройку виртуальных портов. Эдакая общая группа портов для того, что в специализированные группы не влезло, но к портам относится. Сами-же виртуальные порты отдельно в VPORTх . Хотя я так пока и не вкурил зачем они вообще нужны...
В общем PORTCFG.CLKEVOUT в помощь...
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 17 2013, 07:49
Сообщение #40


Гуру
******

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



Цитата(ArtemKAD @ Sep 16 2013, 20:16) *
В общем PORTCFG.CLKEVOUT в помощь...

100%

И у меня вопрос (дабы не плодить тем).
Почему на xmega128A1U не выводится на пин clkPER4?
Т.е. clkPER и clkPER2 выводится а clkPER4 нет.
Пробывал при clkPER4=128MHz, clkPER2=64MHz, clkPER=32MHz.
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 17 2013, 08:49
Сообщение #41


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



т.е. при выводе просто тишина? ради эксперимента попробуйте в целом уменьшить все частоты и попробовать так.
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 17 2013, 09:35
Сообщение #42


Гуру
******

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



Цитата(Duhas @ Sep 17 2013, 11:49) *
т.е. при выводе просто тишина?

Да, ноль.

Цитата(Duhas @ Sep 17 2013, 11:49) *
ради эксперимента попробуйте в целом уменьшить все частоты и попробовать так.

Необходимо было имеено 128MHz на пине получить.
Экспериментировать сейчас некогда, да и не актуально уже.
Просто думал сталкивался ли кто с этим
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 17 2013, 12:11
Сообщение #43


Гуру
******

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



Цитата(zombi @ Sep 17 2013, 11:49) *
Пробывал при clkPER4=128MHz, clkPER2=64MHz, clkPER=32MHz.


А что, разве на Xmega можно частоты выше, чем 32 МГц получать? Не знала... Точнее, видела, что множитель позволяет умножать аж до 31 раз, но думала, что это для медленных кварцев сделано, а верхнюю границу в 32 МГц нарушать нельзя. Или все-таки можно? И если да, то как? И какие возможности это дает? Таймеры быстрее заработают?
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 17 2013, 12:59
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



К примеру clkPER4 можно использовать для увеличения точности PWM.

32МГц это верх для ядра. А к примеру на USB надо подать 48МГц.
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Sep 17 2013, 13:31
Сообщение #45


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

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Цитата(Xenia @ Sep 17 2013, 16:11) *
А что, разве на Xmega можно частоты выше, чем 32 МГц получать? Не знала... Точнее, видела, что множитель позволяет умножать аж до 31 раз, но думала, что это для медленных кварцев сделано, а верхнюю границу в 32 МГц нарушать нельзя. Или все-таки можно? И если да, то как? И какие возможности это дает? Таймеры быстрее заработают?

Можно нарушать, только неизвестно, как долго проработает. У меня один опытный образец уже полтора года на 48МГц работает и полностью исправен. Работает от внешнего кварца на 8 МГц и PLL на 6. Выше поднимать удавалось, уже не помню до скольки, но потом засомневался и прекратил эксперименты, оставив на 48МГц. Нагреваний МК-ра замечено не было. Ну, а таймеры могут тактироваться вместе с CPU или через делитель, так что - да, таймеры заработают быстрее.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 17 2013, 14:06
Сообщение #46


Гуру
******

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



Цитата(Navovvol @ Sep 17 2013, 17:31) *
У меня один опытный образец уже полтора года на 48МГц работает и полностью исправен. Работает от внешнего кварца на 8 МГц и PLL на 6. Выше поднимать удавалось, уже не помню до скольки, но потом засомневался и прекратил эксперименты, оставив на 48МГц. Нагреваний МК-ра замечено не было. Ну, а таймеры могут тактироваться вместе с CPU или через делитель, так что - да, таймеры заработают быстрее.


Ядро разгонять свыше 32 МГц я не хочу, мне процессорной скорости вполне хватает. Однако хотелось бы, что таймер был способен считать внешние импульсы (меандр) на более высокой частоте, чем нынешние 16 МГц (половина от 32-х). Т.е. мне надо только на счет, а не на выдачу! И хотя, казалось бы, скорость внешнего счета от внутренней частоты никак не зависит, но какая-то там связь типа синхронизации есть, которая мешает мне подняться выше 16 МГц (начинает пропускать импульсы). Причем, мне не ясно, какого из трех клоков не хватает (clkper, clkper2, clkper4). Похоже, что не хватает clkper, т.е. именно он тактирует таймеры и систему событий (через последнюю сигналы от ножек попадат к таймеру). Но насколько технически возможно поднять clkper выше частоты ядра? Ведь ядро вроде бы работает как раз от этого clkper...

P.S. Может быть эта синхронизация как-то отключается, чтобы счет внешних импульсов стал асинхронным? И тогда клоками можно не заморачиваться?

P.P.S. По-видимому, задача моя нерешабельная, т.к. в руководстве (Atmel AVR1617: Frequency Measurement with Atmel AVR XMEGA Family Devices) прямо сказано:
Цитата
Limitations
• The Atmel AVR XMEGA device operating with the recommended 32MHz internal RC oscillator is limited to measuring clock frequencies up to 32MHz / 2, or 16MHz
Go to the top of the page
 
+Quote Post
Duhas
сообщение Sep 17 2013, 16:22
Сообщение #47


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



что измеряете, если не секрет?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 17 2013, 17:18
Сообщение #48


Гуру
******

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



Цитата(Duhas @ Sep 17 2013, 20:22) *
что измеряете, если не секрет?

Пока измеряла две вещи:

Первое: сигнал с выхода кварцевого генератора KXO-210 с частотами 4-6-8-10-12-16 МГц на предмет их термостабильности. Хорошо бы подняться до 60 МГц (выше у кварцев обычно не бывает). По всей видимости воспользуюсь делителем, но разговор о частотах у Xmega, превышающих 32 МГц, меня заинтриговал.

Второе: тестовый вариант измерения частоты, генерирумой той же XMega другим таймером. Коннект выхода со входом внешний, посредством джампера. Тут частота стоит, как влитая - даже младший разряд не шелохнется.

В обоих случаях велся счет импульсов за 1 секунду, отмеряемую третьим таймером той же XMega.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 17 2013, 17:28
Сообщение #49


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Xenia @ Sep 17 2013, 17:06) *
P.P.S. По-видимому, задача моя нерешабельная

Такая фича, как считать испульсы частотой выше процессорной традиционно присутствует у продукции Микрочип
Специально глянул PIC10Fxxx там таки осталось это. Счетчик с предделителем меряют до 50МГц, и это с незапамятных времен было. Так что поставьте предделитель из мелкого пичка, в sot23-6.
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 17 2013, 18:03
Сообщение #50


Гуру
******

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



Цитата(Xenia @ Sep 17 2013, 20:18) *
разговор о частотах у Xmega, превышающих 32 МГц, меня заинтриговал.

В DS на конкретный чип раздел Electrical Characteristics , Internal Phase Locked Loop (PLL) characteristics
там мин/макс чего можно от PLL получить
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 17 2013, 18:22
Сообщение #51


Гуру
******

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



Цитата(zombi @ Sep 17 2013, 22:03) *
В DS на конкретный чип раздел Electrical Characteristics , Internal Phase Locked Loop (PLL) characteristics
там мин/макс чего можно от PLL получить


PLL, согласно "электрическим характеристикам" можно аж до 128 МГц разогнать sm.gif, но не в этом же дело. Проблема в том, будут ли с такой частотой работать остальные элементы МК. Частота 32 МГц выбрана предельной не потому, что PLL не может сгенерировать больше, а, прежде всего, потому, что flash-память на такой частоте сглючит.

Но вот этот же момент меня и смущает, т.к. для работы таймера в счетном режиме никая поддержка CPU не нужна, т.к. этот процесс теоретически может происходить совершенно автономно, будучи ограниченным лишь скоростью дискретных элементов самого таймера. И никакие клочные частоты для этого не нужны. А эта скорость, очевидно, 32 МГц-ами не может быть ограничена. Тем более, если zombi не врет sm.gif, то у него получалось с частотой 64MHz даже ножкой дрыгать.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 17 2013, 19:47
Сообщение #52


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(Xenia @ Sep 17 2013, 20:18) *
Пока измеряла две вещи:

Первое: сигнал с выхода кварцевого генератора KXO-210 с частотами 4-6-8-10-12-16 МГц на предмет их термостабильности. Хорошо бы подняться до 60 МГц (выше у кварцев обычно не бывает). По всей видимости воспользуюсь делителем, но разговор о частотах у Xmega, превышающих 32 МГц, меня заинтриговал.

Второе: тестовый вариант измерения частоты, генерирумой той же XMega другим таймером. Коннект выхода со входом внешний, посредством джампера. Тут частота стоит, как влитая - даже младший разряд не шелохнется.

В обоих случаях велся счет импульсов за 1 секунду, отмеряемую третьим таймером той же XMega.


Посмотрите в сторону xMega E-серии . У них там блок программируемой логики и вроде там была возможность не протаскивать входной сигнал через синхронизаторы и составить 16 разрядный таймер с защелкой по событию.
Если есть возможность иметь опорный сигнал с частотой 32кГц можно более точно увидеть изменения. Считаете входной сигнал таймером без сброса и остановки, а защелку фиксируете по фронту опорника. Накапливаете статистику дэльт к примеру за секунду.... Так можно отловить в т.ч. величину фазовых шумов.

ЗЗЫ. Кроме того, там основной тактовый генератор обещают может до 140 с лишним МГц на предделители отправлять....
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 17 2013, 20:31
Сообщение #53


Гуру
******

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



Цитата(Xenia @ Sep 17 2013, 21:22) *
Тем более, если zombi не врет sm.gif, то у него получалось с частотой 64MHz даже ножкой дрыгать.

Даа... не ожидал такого недоверия!
Всё, обиделся я тчк.

Цитата(Xenia @ Sep 17 2013, 21:22) *
PLL, согласно "электрическим характеристикам" можно аж до 128 МГц разогнать sm.gif, но не в этом же дело. Проблема в том, будут ли с такой частотой работать остальные элементы МК.

И нафига тогда, скажите пожалуйста, атмел это делает ?
Даёт частоту на которой не всё работает biggrin.gif biggrin.gif biggrin.gif

Всё, короче, обиделся ещё раз. crying.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 18 2013, 05:13
Сообщение #54


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(_Pasha @ Sep 17 2013, 20:28) *
Такая фича, как считать испульсы частотой выше процессорной традиционно присутствует у продукции Микрочип

STM8 и STM32 тоже на такое способны...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 18 2013, 06:16
Сообщение #55


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(HHIMERA @ Sep 18 2013, 08:13) *
STM8 и STM32 тоже на такое способны...

Я говорил о том, что если свет клином сошелся на Xmega, то добавление корпуса SOT23-6 в качестве предделителя весьма ненапряжно.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 18 2013, 06:32
Сообщение #56


Гуру
******

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



Цитата(_Pasha @ Sep 18 2013, 10:16) *
Я говорил о том, что если свет клином сошелся на Xmega, то добавление корпуса SOT23-6 в качестве предделителя весьма ненапряжно.


Это чего еще за корпус? sm.gif Чего у него внутри? Номинал назвать можно?
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Sep 18 2013, 07:01
Сообщение #57


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

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Xenia, я кажется понял, что требуется.
Пусть Atxmega128A1 тактируется от внешнего кварца на 8МГц. И через PLL вытворяем такое: (код сгенерирован CV AVR)
CODE

// System Clocks initialization
void system_clocks_init(void)
{
unsigned char n,s;

// Optimize for speed
#pragma optsize-
// Save interrupts enabled/disabled state
s=SREG;
// Disable interrupts
#asm("cli")

// External 8000.000 kHz clock source on XTAL1 initialization
OSC.XOSCCTRL=OSC_XOSCSEL_EXTCLK_gc;
// Enable the external clock source
OSC.CTRL|=OSC_XOSCEN_bm;

// System Clock prescaler A division factor: 1
// System Clock prescalers B & C division factors: B:2, C:2
// ClkPer4: 128000.000 kHz
// ClkPer2: 64000.000 kHz
// ClkPer: 32000.000 kHz
// ClkCPU: 32000.000 kHz
n=(CLK.PSCTRL & (~(CLK_PSADIV_gm | CLK_PSBCDIV1_bm | CLK_PSBCDIV0_bm))) |
CLK_PSADIV_1_gc | CLK_PSBCDIV_2_2_gc;
CCP=CCP_IOREG_gc;
CLK.PSCTRL=n;

// PLL initialization
// PLL clock source: External Osc. or Clock
// PLL multiplication factor: 16
// PLL frequency: 128.000000 MHz
// Set the PLL clock source and multiplication factor
n=(OSC.PLLCTRL & (~(OSC_PLLSRC_gm | OSC_PLLFAC_gm))) |
OSC_PLLSRC_XOSC_gc | 16;
CCP=CCP_IOREG_gc;
OSC.PLLCTRL=n;
// Enable the PLL
OSC.CTRL|=OSC_PLLEN_bm;

// System Clock prescaler A division factor: 1
// System Clock prescalers B & C division factors: B:2, C:2
// ClkPer4: 128000.000 kHz
// ClkPer2: 64000.000 kHz
// ClkPer: 32000.000 kHz
// ClkCPU: 32000.000 kHz
n=(CLK.PSCTRL & (~(CLK_PSADIV_gm | CLK_PSBCDIV1_bm | CLK_PSBCDIV0_bm))) |
CLK_PSADIV_1_gc | CLK_PSBCDIV_2_2_gc;
CCP=CCP_IOREG_gc;
CLK.PSCTRL=n;

// Wait for the PLL to stabilize
while ((OSC.STATUS & OSC_PLLRDY_bm)==0);

// Select the system clock source: Phase Locked Loop
n=(CLK.CTRL & (~CLK_SCLKSEL_gm)) | CLK_SCLKSEL_PLL_gc;
CCP=CCP_IOREG_gc;
CLK.CTRL=n;

// Disable the unused oscillators: 2 MHz, 32 MHz, internal 32 kHz
OSC.CTRL&= ~(OSC_RC2MEN_bm | OSC_RC32MEN_bm | OSC_RC32KEN_bm);

// ClkPer output: Disabled bit 7
PORTCFG.CLKEVOUT=(PORTCFG.CLKEVOUT & (~PORTCFG_CLKOUT_gm)) | PORTCFG_CLKOUT_OFF_gc;

// Restore interrupts enabled/disabled state
SREG=s;
// Restore optimization for size if needed
#pragma optsize_default
}

Далее берем таймер и заставляем его работать в режиме "высокой точности" Hi-Res в этом режиме он тактируется от Clkper4, т.е. от 128MHz. А далее пин таймера ставим на Capture. Нее ? не подойдет ?
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 18 2013, 07:05
Сообщение #58


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(_Pasha @ Sep 18 2013, 09:16) *
Я говорил о том, что если свет клином сошелся на Xmega, то добавление корпуса SOT23-6 в качестве предделителя весьма ненапряжно.

Не... если "PIC и XMega - братья навек!"(С)... то я как бы и не против...
Только... такое решение попахивает удалением гланд нетрадиционным для медицины способом...
Тогда уж проще прилепить что-то из 74LVC... "И XMega сыта, и адепты целы."(С)...

Сообщение отредактировал HHIMERA - Sep 18 2013, 07:54
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 18 2013, 07:42
Сообщение #59


Гуру
******

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



Цитата(Navovvol @ Sep 18 2013, 11:01) *
Далее берем таймер и заставляем его работать в режиме "высокой точности" Hi-Res в этом режиме он тактируется от Clkper4, т.е. от 128MHz. А далее пин таймера ставим на Capture. Нее ? не подойдет ?


Про режим "высокой точности" интересно, надо будет попробовать. Однако признаюсь, что отношусь к этой идее скептически, поскольку HiRes действует на частоту PWM, тогда как у меня не генерация частоты, а, наоборот, счет частоты, причем внешней. И тут уж каждый электрический импульс снаружи (фронт нужного направления) добавляет к счетчику таймера единичку. При этом само понятие "высокой точности" в данном контексте абсурдно, т.к. ничего другого, кроме той единички прибавиться не может.
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Sep 18 2013, 08:13
Сообщение #60


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

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Цитата(Xenia @ Sep 18 2013, 11:42) *
Про режим "высокой точности" интересно, надо будет попробовать. Однако признаюсь, что отношусь к этой идее скептически, поскольку HiRes действует на частоту PWM, тогда как у меня не генерация частоты, а, наоборот, счет частоты, причем внешней. И тут уж каждый электрический импульс снаружи (фронт нужного направления) добавляет к счетчику таймера единичку. При этом само понятие "высокой точности" в данном контексте абсурдно, т.к. ничего другого, кроме той единички прибавиться не может.

Ах да совсем забыл... в режиме HiRes нормальный режим таймера не доступен. А он нужен для захвата.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 18 2013, 12:54
Сообщение #61


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(HHIMERA @ Sep 18 2013, 10:05) *
"И XMega сыта, и адепты целы."(С)...

Типичное мышление, благодаря которому простое удаление гланд становится нетрадиционным [censored] .
74LVC, да в sot23-6, - содержит емнип адын flip-flop, который несомненно порадует очаровательную Ксению своей бесполезностью . sm.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 18 2013, 14:41
Сообщение #62


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(_Pasha @ Sep 18 2013, 15:54) *
74LVC, да в sot23-6, - содержит емнип адын flip-flop, который несомненно порадует очаровательную Ксению своей бесполезностью . sm.gif

Та ну??? Серьёзно??? biggrin.gif
Один или два flip-flop... не суть...
Ты не спеши... в даташит загляни, почитай 6.0 TIMER0 MODULE AND TMR0 REGISTER...
Почитал??? Куда теперь твоя уверенность делась??? rolleyes.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 18 2013, 15:30
Сообщение #63


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(HHIMERA @ Sep 18 2013, 17:41) *
Та ну??? Серьёзно??? biggrin.gif
Один или два flip-flop... не суть...
Ты не спеши... в даташит загляни, почитай 6.0 TIMER0 MODULE AND TMR0 REGISTER...
Почитал??? Куда теперь твоя уверенность делась??? rolleyes.gif

Насколько я понимаю, на процесс подсчета количества импульсов, порождаемый оффтопом джиттер не влияет, по сему, никуда уверенность не девается laughing.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Sep 18 2013, 15:41
Сообщение #64


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(_Pasha @ Sep 18 2013, 18:30) *
Насколько я понимаю, на процесс подсчета количества импульсов, порождаемый оффтопом джиттер не влияет, по сему, никуда уверенность не девается laughing.gif

А зря!!! Должна была уже давно покинуть этот тленный мир... wink.gif
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 19 2013, 12:06
Сообщение #65


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(ArtemKAD @ Sep 16 2013, 20:16) *
Сами-же виртуальные порты отдельно в VPORTх . Хотя я так пока и не вкурил зачем они вообще нужны...

Упс, таки уже вкурил. Как гавориться - а слона-то я и не заметил...

Кстати, есть тут и у меня вопросик. В процессе поисков в описании порта наткнулся на факт наличия на входе наряду с обычными event-ами еще и "Asynchronous Events". Вот только дальше найти куда они идут и как используются я так и не смог. Кому-то найти это удалось?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:58
Рейтинг@Mail.ru


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