Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATxmega
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3, 4, 5, 6, 7
Duhas
ну в хмеге есть встроенные генераторы.. если на них опираться - то можно оценить частоту кварца.. но не думаю что точность таким образом можно подогнать...
V_G
Цитата(Duhas @ Apr 21 2010, 06:18) *
ну в хмеге есть встроенные генераторы.. если на них опираться - то можно оценить частоту кварца.. но не думаю что точность таким образом можно подогнать...

Согласен с Duhas, точность встроенных генераторов, даже в Xmеge, не дотягивает до кварцевой. Измерить частоту можно, но с точностью, оговоренной в даташите на xmegу. Т.е. чтобы отличить номиналы кварцев, часто достаточно, но чтобы различить кварцы одного номинала - нереально.
Александр Куличок
Цитата
Не хочется макетку делать.

Что мешает вывести на один пин штатной платы сигнал, поделенный на 29491200. (период 1 сек +/-дельта)? Далее измеряете образцовым эталоном времени точную длительность этого периода и вычисляете поправку к делителю 29491200. Только частота все равно уплывет со временем/температурой. Так как 0,01ppm (1,00000001 сек) - это круто.
P.S. частоту кварца можно подстроить правильным подбором конденсаторов.
MDD
Цитата(Leonmezon @ Apr 20 2010, 22:09) *
По таймерам понятно (если использовать 64-бит еще точнее можно сделать rolleyes.gif )

Нет, 64 бита уже ничего не дадут. Число 29491200 вписывается в 32 бита, поэтому дополнительные 32бита будут "крутиться вхолостую".
Leonmezon
Цитата(Александр Куличок @ Apr 21 2010, 04:18) *
Что мешает вывести на один пин штатной платы сигнал, поделенный на 29491200. (период 1 сек +/-дельта)? Далее измеряете образцовым эталоном времени точную длительность этого периода и вычисляете поправку к делителю 29491200. Только частота все равно уплывет со временем/температурой. Так как 0,01ppm (1,00000001 сек) - это круто.
P.S. частоту кварца можно подстроить правильным подбором конденсаторов.

Вывести можно - но не очень приятно решать обратную задачу. Можно ли вывести частоту кварца на ножку МК - так вроде легче: я померил частотометром частоту и поправил значение регистра.
Меня в полне устроит погрешность 100 мкс. (1,00000001 сек - я для примера написал - понятно что ее получить практически не реально (с GPS я добивался значения 1,000001 сек), хотя даже в идеальной GPS системе не обещают секундный интервал с точность более 1,0000001 - +_100 нс). (или с накоплением +-10 нс).
Александр Куличок
ХМЕГу читал, но плохо. А во всех обычных мегах/ат90 можно вывести частоту генератора, деленную на 2.
Если устройств много, может будет удобнее подавать на вход штатной меги образцовую частоту 1Гц, а уже она (в сервисном режиме) пусть подстраивает свой делитель под внешнюю частоту. И запоминает настройки где-нибудь во флеши или еепроме.
Leonmezon
Вопрос по Xmege (АЦП):
кто нибудь запустил АЦП в несимметричном измерение в знаковом режиме, т.е. на (на одну ножку!) вход АЦП подавать биполярное напряжение в диапазоне -Vref до +Vref (т.е. реализуются схема измерения с выводом данных представленных на рис. 25.10 - 11 битное разрешение) - вопрос на сколько реально смогли добиться по разрешению (какая погрешность измерения)?
MDD
Цитата(Leonmezon @ Apr 26 2010, 21:05) *
кто нибудь запустил АЦП в несимметричном измерение в знаковом режиме, т.е. на (на одну ножку!) вход АЦП подавать биполярное напряжение в диапазоне -Vref до +Vref (т.е. реализуются схема измерения с выводом данных представленных на рис. 25.10 - 11 битное разрешение) - вопрос на сколько реально смогли добиться по разрешению (какая погрешность измерения)?

Пришлось использовать этот режим в одном из каналов по той причине, что знаковый режим включается глобально для всего АЦП и он мне нужен был непрерывно в другом канале. Погрешность не оценивал, использовал старшие 8 разрядов для опроса потенциометров и измерения напряжения батареи.
А вот с -Vref поосторожнее. Даташит гласит: Voltage on any Pin with respect to Ground..-0.5V to VCC+0.5V. Как я понимаю, на отрицательное напряжение АЦП реагировать не будет. А шкала так проградуирована повидимому чтобы показать, что возможна индикация небольших отрицательных кодов вблизи нуля из-за ошибки смещения АЦП.
Leonmezon
Цитата(MDD @ Apr 27 2010, 07:31) *
Пришлось использовать этот режим в одном из каналов по той причине, что знаковый режим включается глобально для всего АЦП и он мне нужен был непрерывно в другом канале. Погрешность не оценивал, использовал старшие 8 разрядов для опроса потенциометров и измерения напряжения батареи.
А вот с -Vref поосторожнее. Даташит гласит: Voltage on any Pin with respect to Ground..-0.5V to VCC+0.5V. Как я понимаю, на отрицательное напряжение АЦП реагировать не будет. А шкала так проградуирована повидимому чтобы показать, что возможна индикация небольших отрицательных кодов вблизи нуля из-за ошибки смещения АЦП.

Т.е. скажем синусоиду +-1,5 В я не могу оцифровать. (только дифференциальном? и то неизвестно)
Да непонятно зачем было на рис. показывать от -Uref (на нем четко показано... даже коды).
Попробую Atmel этот вопрос задать (или они как всегда хотели больше - а получилось 1111493779.gif )
Leonmezon
Цитата(Leonmezon @ Apr 27 2010, 13:17) *
Т.е. скажем синусоиду +-1,5 В я не могу оцифровать. (только дифференциальном? и то неизвестно)
Да непонятно зачем было на рис. показывать от -Uref (на нем четко показано... даже коды).
Попробую Atmel этот вопрос задать (или они как всегда хотели больше - а получилось 1111493779.gif )


Задал этот же вопрос Atmel:
"1. Возник вопрос с примением встроенного ADC в режиме Single-ended measurement in signed mode (Figure 25-4. и Figure 25-10. из XMEGA A MANUAL)
Могу ли я в этом режиме (при внешнем напряжении сравнения Uref=2,5 V) подать на один из входов ADC биполярную синусоиду с амплитудой +-2 V - т.е. могу ли я подавать отрицательные напряжения на вход ADCв этом режиме?
2. В каких пределах должно быть напряжение в этом режиме?
3. Как оцифровать втроенным ADC синусоиду с амплитудой +-2 V?"

Вот ответ (может кому интресно):
1. No, the signal will be cut. The voltage range for the ADC is 0 to VREF as you can see in chapter "33.5 ADC Characteristics" in the ATxmegaA1 datasheet. VREF has to be in the range of 1 - (Vcc-0.6).
With Vref set to 2,5V you could work with a signal with an amplitude of +-1.25V. Remember that you can break the device by going out of range.
Если кратко: то отрицательное напряжение подавать нельзя! (а без этого АЦП - вобщем не очень хорошее).
2. I am not sure what you mean here, could you rephrase you question? (Не поняли друг друга).
3. How to digitize Built in ADC sinusoid with an amplitude of + -2 V? Ответ: It's not possible directly, you must lower the voltage range (with a voltage divider or something) on the signal because the XMega series can operate on a voltage (Vcc) higher than 3.6V.
Если кратко: то и в дифференциальном режиме только в положительной области.

P.S. А так хотелось - за 200 руб. иметь все! rolleyes.gif
V_G
Спасибо, что поделились...
В общем, мы все в принципе одинаково понимаем английский язык, находя явное противоречие в даташитах по этому поводу. Американцы-атмеловцы как-то по-другому думают. Или они китайцы?
Duhas
а там разве не шведы АВР ядро и тд делают? у атымелов же вроде 2 подразделения... 1 в европе 1 в америке.. ну я могу и ошибаться )
Vasily_
Цитата
Т.е. скажем синусоиду +-1,5 В я не могу оцифровать. (только дифференциальном? и то неизвестно)


А что мешает сделать смещение на внешних резисторах? так всегда и делали для оцифровки синусоиды.
Leonmezon
Цитата(Vasily_ @ May 4 2010, 17:52) *
А что мешает сделать смещение на внешних резисторах? так всегда и делали для оцифровки синусоиды.

Да можно, только на рис. в даташите показан режим (теперь понятно что левый) - что АЦП может работать с биполярными сигналами!
А это (если правда АЦП правильно внутренее откалиброван по смещениям) - очень хорошо. Жалко что нельзя.
Вот пример: мне надо измерять амплитуду сетевого напряжения (220 В) - я ставлю делитель на 150 - получаю синусоиду от - 2 до +2 В - спокойно оцифровываю ее с 11 бит. разрешением. - Разве плохо?
MDD
Цитата(Leonmezon @ May 4 2010, 18:03) *
Вот пример: мне надо измерять амплитуду сетевого напряжения (220 В) - я ставлю делитель на 150 - получаю синусоиду от - 2 до +2 В - спокойно оцифровываю ее с 11 бит. разрешением. - Разве плохо?

Да чего там мелочиться - сразу 220В в чип, было бы еще бюджетнее biggrin.gif
А что касается рисунков, то на 25-10 они действительно погорячились - входное напряжение у них однозначно "слегка" заходит в отрицательную область, даже если они хотели сказать что-то другое(возможность получения отрицательных кодов из-за смещения).
Сомневаюсь, что таким образом АЦП может оцифровывать допустимые -0.5В.
Интересно, исправят ли в следующей версии...
Leonmezon
Цитата(MDD @ May 5 2010, 08:22) *
Да чего там мелочиться - сразу 220В в чип, было бы еще бюджетнее biggrin.gif
А что касается рисунков, то на 25-10 они действительно погорячились - входное напряжение у них однозначно "слегка" заходит в отрицательную область, даже если они хотели сказать что-то другое(возможность получения отрицательных кодов из-за смещения).
Сомневаюсь, что таким образом АЦП может оцифровывать допустимые -0.5В.
Интересно, исправят ли в следующей версии...


Согласен. Я еще хочется аппаратный преобразователь RS232-USB3!, аналоговый вход с цифровыми фильтрами, выход на VGA (можно простенький), токовый выход на шаговые двигатели (по каждой фазе не менее 1 А), еще разные АЦП (24 сигму-дельту, 16 - параллельный...), можно еще ЦАП разных, цифровых потенциометров и т.п. и обязательно выход на кнопку "Шедевр" - чтоб сам тестил программу и исправлял ошибки! Во как! rolleyes.gif

А даташит не поправят: как понял из ответа МК при отрицательных напряжениях могут гореть - так что производителю это на руку.
Prodif
Как правильно .. Планируется ATxmega256A3, по докам заливается через JTAG и PDI. Даже если предположительно ISP по SPI и заработал бы (ну в теории), то все равно оба набортных SPI нагружены потребителями. При наличии не дорогого AVRISPMK2 возможен вариант только по PDI, если нюансов с AVR studio не возникнет. Но тут еще не задача, у PDI задействуется порт reset, а на этом порту тоже мониторчик питания висит. И как правильнее сей нюанец обойти? (джампер-переключатель думаю не оптимальный вариант)
Или может оно и так без проблем будет работать, потому как для всяких резисторов ... 3V питания всего.
V_G
Цитата(Prodif @ May 17 2010, 20:46) *
Но тут еще не задача, у PDI задействуется порт reset, а на этом порту тоже мониторчик питания висит. И как правильнее сей нюанец обойти?

А чем не устраивает встроенный мониторчик питания (brown-out), нетрадиционные уровни, что ли?

Я-то использую внешний, если меня не устраивает сброс по brown-out (предпочитаю высокоуровневое прерывание). Если вам принципиально, посмотрите выходную емкость вашего мониторчика и требования по емкости на ноге PDI.
Prodif
"V_G'
Тут получается не только емкость, монитор формирует 1 выходным ключем и есть ли там встроенный резистор доподлинно не известно. Так что позволит ли точек через ключ сформировать нормальные импульсы программатору вот в чем вопрос.
V_G
Цитата(Prodif @ May 17 2010, 21:44) *
и есть ли там встроенный резистор доподлинно не известно. Так что позволит ли точек через ключ сформировать нормальные импульсы программатору вот в чем вопрос.

Внутренняя подтяжка ресета есть - читайте мануал. Главное, чтобы монитор имел открытый коллектор.
Fusion
Помогите разобраться с АЦП
ATxmega32A4 тактирование внутр. 32 мГц
АЦП - signed, FREERUN, 12bit left adjusted, 1 вольт внутренняя опора.
Результат измерения изменяется от частоты тактирования АЦП.
Например при 2 мГц (прескалер DIV16) результат меньше почти в два раза , чем при 62.5 кГц (прескалер DIV512).
Код инициализации АЦП:
Код
ldi temp, 1<<ADC_ENABLE_bp; ADC Enable
sts ADCA_CTRLA,temp

ldi temp, 1<<ADC_CONMODE_bp | 1<<ADC_FREERUN_bp    | 3<<ADC_RESOLUTION_gp
sts ADCA_CTRLB,temp    ; signed, FREERUN, 12bit left adjusted
        
ldi temp, 2<<ADC_PRESCALER_gp            ; /16  (2 mHz)
sts ADCA_PRESCALER,temp

ldi temp, 2<<ADC_CH_INPUTMODE_gp;    Differential input signal
sts ADCA_CH0_CTRL,temp

ldi temp, 1<<AC_MUXNEG0_bp        ; ADC1 pin NEG
sts ADCA_CH0_MUXCTRL, temp
Fusion
Вопрос снят. Все нормализовалось после замены меги.
Вероятно спалил пока экспериментировал....
При 2 мГц выдает стабильных 10 разрядов. Два младшие скачут (печатка - макетка).
gzigzeo
Цитата(SAWushka @ Mar 15 2010, 20:33) *
Для отладки только: AVR Dragon; AVR JTAGICE mkII или AVR ONE
Для программирования AVRISP mkII


В описании AVR Dragon на Атмеловском сайте нет в числе интерфейсов отладки PDI, как нет и xmega в числе поддерживаемых устройств.
С другой стороны на этом же сайте есть информация, что в AVR Studio 4.18 вошла поддержка отладки xmega Драгоном.

Поэтому вопрос: дебажится xmega (интересует серия A4) Dragon'ом всё же или нет? Может кто-то проверял?

Спасибо за ответы
Duhas
таки добрался до железа..

ковыряю таймер.. выставил прерывание по переполнению, поставил средний уровень прерывания (других пока нет), прерывания среднего и других - разрешил.. глобально - тоже... драконом вижу флаг.. прерывания нету...
MDD
Вроде все правильно, других хитростей там нет. Вы бы исходники привели, может там опечатка какая.
Duhas
все что пропущено работает...
разобрался!
сначала написал так: перепутал битмаск и битпозишн
Код
    
    ldi        tmp1,            1<<PMIC_MEDLVLEX_bm
    sts        PMIC_CTRL,        tmp1


потом когда дописывал остальные и исправлял написал корявое или )
Код
    
    ldi        tmp1,            (1<<PMIC_MEDLVLEX_bp)||(1<<PMIC_LOLVLEX_bp)||(1<<PMIC_HILVLEX_bp)
    sts        PMIC_CTRL,        tmp1


надо спать поранее ложиться)
MDD
Цитата(Duhas @ Jul 7 2010, 05:27) *
перепутал битмаск и битпозишн


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

Код
    
PMIC.CTRL|=0x07;//разрешаем обработку прерываний низкого, среднего и высокого уровня

Знаю, что это "некошерно" smile.gif . Но лично мне так удобнее. Лишний повод вникнуть в даташит, выписать на листочке какой бит за что отвечает...
Duhas
я сам пишу частенько так - 0b11001100 )

но местами пишу по той самой "грамоте"... как оказалось - зря ))) минут 40 перед сном убил ) какая все-таки медленная отладка...
=F8=
Вопрос по контроллеру DMA в xmega128A3.
Мне нужно по Event 0 данные из регистра IN порта записывать в циклический буфер размером в 16 байт. Контороллер конфигурирую так:
Код
//DMA Configuration
DMA_CTRL = (1<<DMA_RESET_bp);
DMA_CH0_CTRLA = (1<<DMA_CH_RESET_bp);
    
DMA_CH0_CTRLB    = (0<<DMA_CH_ERRINTLVL_gp)|(3<<DMA_CH_TRNINTLVL_gp);
//ERRINTLVL - OFF; TRNINTLVL - high
    
DMA_CH0_ADDRCTRL = (2<<DMA_CH_SRCRELOAD_gp)|(1<<DMA_CH_SRCDIR_gp)|
                    (1<<DMA_CH_DESTRELOAD_gp)|(1<<DMA_CH_DESTDIR_gp);
//SRCRELOAD - BURST; SRCDIR - INC; DESTRELOAD - BLOCK; DESTDIR - INC
    
DMA_CH0_TRIGSRC = DMA_CH_TRIGSRC_EVSYS_CH0_gc;
//Запуск от события 0
    
DMA_CH0_TRFCNT = 16;//Размер блока - 0
DMA_CH0_REPCNT = 0; //Кол-во повторов - неограничено
    
DMA_CH0_SRCADDR0 = (unsigned long)SR_ADDR & 0xFF;
DMA_CH0_SRCADDR1 = ((unsigned long)SR_ADDR>>8) & 0xFF;
DMA_CH0_SRCADDR2 = ((unsigned long)SR_ADDR>>16) & 0xFF;
    
DMA_CH0_DESTADDR0 =  (unsigned long)DataBuffer & 0xFF;
DMA_CH0_DESTADDR1 =  ((unsigned long)DataBuffer >> 8) & 0xFF;
DMA_CH0_DESTADDR2 =  ((unsigned long)DataBuffer >> 16) & 0xFF;
    
DMA_CH0_CTRLA = (1<<DMA_CH_ENABLE_bp)|//Enable DMA chanal 0
                  (1<<DMA_CH_REPEAT_bp)|//Repeat ON
                  (0<<DMA_CH_TRFREQ_bp)|//TRFRE - OFF
                  (1<<DMA_CH_SINGLE_bp)|//Single Shot Data transfer - ON
                  (0<<DMA_CH_BURSTLEN_gp); //BURSTLEN - 1byte
    
DMA_CTRL = (1<<DMA_ENABLE_bp)|(1<<DMA_DBUFMODE_gp)|(3<<DMA_PRIMODE_gp);

В результате получается, что после передачи каждого блока, когда TRFCNT доходит до 0, сбрасывается бит ENABLE в регистре CH0_CTRLA.
!!! Поскольку отлаживать в железе пока нет возможности то пытаюсь отлаживать в симуляторе avrstudio(что симуляторы - зло знаю smile.gif). Вопрос собственно в том Enable сбрасывается и в реальности или это глюк симулятора? Или с настройками контроллера что-то не так?
MDD
Цитата(=F8= @ Jul 9 2010, 15:29) *
это глюк симулятора? Или с настройками контроллера что-то не так?

Или то, или другое smile.gif
В конкретику реализации вникать лень. Но могу сказать, что в железе Хмега прекрасно работает с кольцевыми буферами и по "складыванию", и по "раздаче". Из замеченных тонкостей работы с DMA - если используете прерывание по окончании транзакции, то бит запроса прерывания нужно сбрасывать в прерывании вручную. Автоматически заходом в прерывание биты от DMA не сбрасываются.
IgorKossak
Тема начинает (уже давно) напоминать свалку.
Тему закрыл.
Создавайте более конкретные темы.
Moderator
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.