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

 
 
 
Reply to this topicStart new topic
> ATXMEGA16E5 - вопросы и засады, (пытаюсь освоить)
Alexey_N
сообщение Mar 8 2014, 06:35
Сообщение #1


Местный
***

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



Вот пытаюсь освоить ATXMEGA16E5 после долгих лет жизни с просто мегами, наталкиваюсь на недоумения - нужен хелп.

1. Ядерная мегазасада - флаг прерывания в Таймере надо гасить вручную!
В старых мегах по умолчанию зашел в прерывание - флаг сбросился. Теперь это похоже не соблюдается... Какие здесь ещё засады в прерываниях?

2. В файле iox16e5.h, входящем в пакет АтмелСтудия, наблюдаю ашипку в разделе ЦАПа:
DAC_REFSEL_AREFB_gc = (0x03<<3), /* External reference on AREF on PORTB */
Надо поменять на
DAC_REFSEL_AREFD_gc = (0x03<<3), /* External reference on AREF on PORTD */
так как порта "B" у этого камня нет.

3. При попытке подать референс для ЦАПа именно от этого "AREF on PORTD" или от "AREF on PORTA" напряжение на выходе ЦАПы поднимается только до 0,5 Вольт (на ножку подано 2,5 Вольта). При выборе референса от "Analog supply voltage" ЦП работает нормально до 3 Вольт. Может я что-то здесь неправильно настраиваю?

4. Пытался разобраться с калибровкой АЦП - ни фига не могу найти адрес для записи в z-регистры, чтобы считать там эти калибровочные значения sad.gif. Наверное это всё лежит на самом виду, но после часа рытья в ПДФ-е я сломался... подскажите, плз.

5. Добавляю грабли. Попытка сравнить два напряжения на входах компаратора - на одном переменный сигнал от 0 до 3 В, на другом постоянной напряжение 1,5 В. Сравнение (прерывание) происходит при напряжении 0,2 В! Обе ножки камня в явном виде заданы в Totem-pole режиме (кто-нибудь знает как это перевести?!). Если же ставлю в качестве опорного напряжения примерно 1,5 В от внутреннего источника (Voltage Scaling Factor), всё прекрасно срабатывает на полутора вольтах. Ох, что-то я сильно не понимаю в ногах Хмеги...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 8 2014, 08:34
Сообщение #2


Гуру
******

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



Цитата(Alexey_N @ Mar 8 2014, 10:35) *
1. Ядерная мегазасада - флаг прерывания в Таймере надо гасить вручную!
В старых мегах по умолчанию зашел в прерывание - флаг сбросился. Теперь это похоже не соблюдается... Какие здесь ещё засады в прерываниях?
Какой конкретно таймер? Не было с ними никаких проблем - флаги очищались при переходе на вектор. И о каком флаге речь?

Цитата(Alexey_N @ Mar 8 2014, 10:35) *
4. Пытался разобраться с калибровкой АЦП - ни фига не могу найти адрес для записи в z-регистры, чтобы считать там эти калибровочные значения sad.gif. Наверное это всё лежит на самом виду, но после часа рытья в ПДФ-е я сломался... подскажите, плз.
Смотрите в описании NVM контроллера: 4.17 Register Description – Production Signature Row - 4.17.20 ADCACAL0 – ADCA Calibration register 0.
Z -регистры причём?

Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Mar 8 2014, 08:41
Сообщение #3


Местный
***

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



Цитата(_Артём_ @ Mar 8 2014, 12:34) *
Какой конкретно таймер? Не было с ними никаких проблем - флаги очищались при переходе на вектор. И о каком флаге речь?


Да, это нечетко указал, сорри. Вот - точное наведение:
Файл "XMEGA E MANUAL", стр.180-181,
касаемо INTFLAGS – Interrupt Flags register
**********
Bit 2 – TRGIF: Trigger Restart Interrupt Flag
...
The flag is cleared by writing a one to its bit location.

Bit 1 – ERRIF: Error Interrupt Flag
...
This flag is automatically cleared when the corresponding interrupt vector is executed. The flag can also be
cleared by writing a one to this location.

Bit 0 – OVFIF: Overflow/Underflow Interrupt Flag
...
The flag is cleared by writing a one to its bit location.
**********

То есть флаг в битах 0 и 2 нужно опускать вручную, а вот в бите 1 - приятная автоматика, можно не беспокоиться wink.gif...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 8 2014, 09:25
Сообщение #4


Гуру
******

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



Цитата(Alexey_N @ Mar 8 2014, 12:41) *
То есть флаг в битах 0 и 2 нужно опускать вручную, а вот в бите 1 - приятная автоматика, можно не беспокоиться wink.gif...

Действительно есть такое дело с флагами...Это особенность семейства E - таймер не простой наверное. В A и D такого не было.
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Jul 11 2014, 16:39
Сообщение #5


Местный
***

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



Продолжение триллера. Правда теперь это уже не 16 а 32, то есть ATXMEGA32E5. (В 16-й оказалось слишком мало ОЗУ, пришлось переползти...)

Для затравки - о третьем пункте из первого топика - он описан в Еррате. То есть действительно с порта D нельзя референс на ЦАП подавать, ну кто бы мог подумать...

И вот теперь, - козырная мегазасада: 14% камней из партии не захотели заводиться от внутреннего RC-генератора на 32 МГц! Судя по осциллографу, работает где-то примерно на 3,0 - 3,5 МГц. Остальные 86% - исправно запустились sm.gif.
То есть, применяя суперскую Е-серию, надо быть готовым к ручному перепаиванию процессоров на готовых платах, ну и брать их с запасом...
...
Господа, я что действительно в экс-СССР-ии один единственный, кто это де...мо ковыряет, больше никто не сподобился?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 11 2014, 18:30
Сообщение #6


Гуру
******

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



Цитата(Alexey_N @ Mar 8 2014, 10:35) *
Вот пытаюсь освоить ATXMEGA16E5 после долгих лет жизни с просто мегами, наталкиваюсь на недоумения - нужен хелп.

1. Ядерная мегазасада - флаг прерывания в Таймере надо гасить вручную!
В старых мегах по умолчанию зашел в прерывание - флаг сбросился. Теперь это похоже не соблюдается... Какие здесь ещё засады в прерываниях?

2. В файле iox16e5.h, входящем в пакет АтмелСтудия, наблюдаю ашипку в разделе ЦАПа:
DAC_REFSEL_AREFB_gc = (0x03<<3), /* External reference on AREF on PORTB */
Надо поменять на
DAC_REFSEL_AREFD_gc = (0x03<<3), /* External reference on AREF on PORTD */
так как порта "B" у этого камня нет.

3. При попытке подать референс для ЦАПа именно от этого "AREF on PORTD" или от "AREF on PORTA" напряжение на выходе ЦАПы поднимается только до 0,5 Вольт (на ножку подано 2,5 Вольта). При выборе референса от "Analog supply voltage" ЦП работает нормально до 3 Вольт. Может я что-то здесь неправильно настраиваю?


38. Errata – ATxmega32E5 / ATxmega16E5 / ATxmega8E5
38.1 Rev. B
DAC: AREF on PD0 is not available for the DAC
Issue: DAC: AREF on PD0 is not available for the DAC
The AREF external reference input on pin PD0 is not available for the DAC.
Workaround:
No workaround. Only AREF on pin PA0 can be used as external reference input for the DAC

А вы на какую ножку порта D опору подавали? И про какой из двух ЦАПов (каналов) говорите?

Полагаю, что DAC_REFSEL_AREFB_gc назван всё-таки правильно, т.к. пока в серии E у Х-Мег не появится порт B, второго референса не будет. sm.gif
Go to the top of the page
 
+Quote Post
Alexey_N
сообщение Jul 12 2014, 11:34
Сообщение #7


Местный
***

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



Цитата(Xenia @ Jul 11 2014, 22:30) *
38. Errata – ATxmega32E5 / ATxmega16E5 / ATxmega8E5
38.1 Rev. B
DAC: AREF on PD0 is not available for the DAC
Issue: DAC: AREF on PD0 is not available for the DAC
The AREF external reference input on pin PD0 is not available for the DAC.
Workaround:
No workaround. Only AREF on pin PA0 can be used as external reference input for the DAC

А вы на какую ножку порта D опору подавали? И про какой из двух ЦАПов (каналов) говорите?

Ну я менно про эту Еррату и упоминал в предыдущем посте.
Разумеется подавал на PD0 и в обоих ЦАП-ах результ одинаков sad.gif. Действительно всё заработало только после переразводки платы crying.gif на PA0.

Цитата
Полагаю, что DAC_REFSEL_AREFB_gc назван всё-таки правильно, т.к. пока в серии E у Х-Мег не появится порт B, второго референса не будет. sm.gif

Вообще-то остроумное замечание, спасибо! Я как-то сразу и не въехал, что эти два бага на самом деле между собой связаны и создают некую потенциальную фичу sm.gif. Кто бы мог подумать, что у них такой дальний прицел!
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 12 2014, 14:54
Сообщение #8


Гуру
******

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



Цитата(Alexey_N @ Jul 12 2014, 15:34) *
Вообще-то остроумное замечание, спасибо! Я как-то сразу и не въехал, что эти два бага на самом деле между собой связаны и создают некую потенциальную фичу sm.gif. Кто бы мог подумать, что у них такой дальний прицел!


У меня впечатление (смахивающее на уверенность), что Atmel заказывает разработку сразу по максимуму, а в дальнейшем отрубает те или иные возможности, в зависимости от специализации или числа ног. Ведь по нынешним временам стоимость любых переделок сравнима с ценой самого проекта. А потому и сама идея "выроста" себя в значительной степени скомпрометировала.

Оно, кстати, с печатными платами уже давно так произошло. Цена зависит от размера платы в квадратных дециметрах, а не от того, сколько там проводничков разведено. Соответственно с этим, и разработчикам много дешевле сразу заказать плату на максимум возможностей, а для конкретных заказчиков попросту не впаивать туда те детали, что им не нужны (а точнее, за те возможности, за которые заказчик не заплатил).

По-видимому, такая же ситуация складывается не только со схемой на кристалле, но и по части разработок. Скажем, чтобы получить лишние 2, 3 или 4 порта, нужно только прописать это требование в задании, и на цену разработки оно, скорее всего, не скажется или повлияет мало. Тогда как требования "на вырост" - что-то добавить задним числом, когда изделие уже производится в массовых масштабах - может стать очень дорогим, не говоря уже о том, что новая "переразводка" может повредить то, что раньше работало нормально.

Я уже прежде писала, что "нашла" у ATxega128A1 ... лишних 5 портов! sm.gif Не в том смысле, что они рабочие, а в том смысле что зарезервированы. Причем, полагаю, что зарезервированы они вовсе не на будущее, а попросту были кастрированы из-за того, что корпус Х-Меги ограничили 100 ножками. А было бы решено выпустить в 144-ножечном корпусе, то и те порты пришлись бы в пору. А так их просто выводить некуда.

Ровно так же самая история происходит с Х-Мегами в более миниатюрных корпусах - там тоже не происходит каких-либо существенных сдвигов по специализации регистров, а просто одни вычеркиваются, хотя адресация остальных остается без изменения. Отсюда же становится ясным, отчего у ATxmegaE5 второй порт назван D, а не B, хотя B - вторая буква алфавита, а D - четвертая. Несомненно, тут порты B и C попросту вырезали. То бишь в проекте они уже есть (!), а не на вырост были оставлены. Т.е. снова повелись на рекорд по пико-энергопотреблению, и потому начали производство с самой младшей/легкой модели. Хотелось бы мне увидеть ATxmegaE1, если до нее дело когда-нибудь дойдет!

Я-то по началу думала, что E-серия это все та же Хmega-A, только подстриженная еще короче, а потому внимания на нее не обратила, т.к. малоногими не интересуюсь. Но когда получила весть с недавнего семинара Atmel, то осознала, что серия E, скорее всего, является отдельной разработкой, т.к. имеет существенные отличия, с прошлыми сериями несовместимыми (т.е. не может быть получена путем обрезания последних). А раз так, то ваши "ковыряния" с ATXMEGA16E5 здесь особенно ценны. А потому прошу вас нас не забывать и делиться своими находками, даже если они будут вызывать радость, а не огорчения.
Go to the top of the page
 
+Quote Post
sherr
сообщение Jul 12 2014, 16:58
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Цитата(Xenia @ Jul 12 2014, 18:54) *
У меня впечатление (смахивающее на уверенность), что Atmel заказывает разработку сразу по максимуму, а в дальнейшем отрубает те или иные возможности, в зависимости от специализации или числа ног. Ведь по нынешним временам стоимость любых переделок сравнима с ценой самого проекта. А потому и сама идея "выроста" себя в значительной степени скомпрометировала.

Проверяется вскрытием контроллера и засовыванием под микроскоп - должны быть видны незадействованные
контактные площадки .

Сообщение отредактировал sherr - Jul 12 2014, 16:59
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 12 2014, 18:15
Сообщение #10


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Угу. Смахивает на то, как в начале 2000-х годов довольно уважаемый по тем временам журнал в качестве 1-апрельской шутки предлагал всем желающим сверлить процессоры Celeron алмазными свёрлами диаметром 0.1 мм с целью превращения их в полноценный Pentium ...

Встречались такие, кто поверил ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Vik-440
сообщение Aug 6 2014, 20:55
Сообщение #11





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



День добрый.
Раньше писал на тикики, но пару лет уже не программировал. Вот теперь взял в руки отладку XMEGA256A3 и установил AtmelStudio - просидел целый день, но так и не смог реализовать простое прерывание от кнопки и последующую обработку.
Весь даташит перелистал, вроде все включил - не работает.

PORTE.DIR=0b00000000;
PORTE.INTCTRL=0b00000001;
PORTE.INT0MASK=0b00100000;
PORTE.PIN5CTRL=PORT_ISC_RISING_gc;
__enable_interrupt();

и потом:
ISR(PORTE_INT0_vect)
{
PORTR.OUTCLR = LEDboard1;
while (1){};
};

Сообщение отредактировал Vik-440 - Aug 6 2014, 20:56
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 6 2014, 21:32
Сообщение #12


Гуру
******

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



Цитата(Vik-440 @ Aug 7 2014, 00:55) *
Вот теперь взял в руки отладку XMEGA256A3 и установил AtmelStudio - просидел целый день, но так и не смог реализовать простое прерывание от кнопки и последующую обработку.
Весь даташит перелистал, вроде все включил - не работает.


Как и во всякой ХМеге, прерывания сперва надо разрешить. Причем, по-отдельности, высокого, среднего и низкого уровня. Например, я разрешаю все три разом. Вот так:
PMIC.CTRL = PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm; // All Level Interrupt Enable

А дальше в регистр INTCTRL порта кладете номер одного из только что разрешенных уровней:
PORTE.INTCTRL = 0x01; // INT0LVL -> low priority
и указываете ножку порта, которая будет вызывать это прерывание и его условие:
PORTE.INT0MASK = PIN5_bm; // Select PE5 as interrupt source
PORTE.PIN5CTRL = PORT_ISC_RISING_gc; // Sense rising edges PE5

Вы почти всё правильно сделали, только про PMIC.CTRL забыли. Да и бесконечный цикл из процедуры прерывания лучше бы убрать (ему место в main, а не тут) и заменить чем-то вроде:
ISR(PORTE_INT0_vect)
{
PORTR.OUTTGL = LEDboard1;
}
чтобы лампочка от прерываний мигала.
Go to the top of the page
 
+Quote Post
Vik-440
сообщение Aug 7 2014, 08:30
Сообщение #13





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



Цитата(Xenia @ Aug 7 2014, 00:32) *
Вы почти всё правильно сделали, только про PMIC.CTRL забыли. а.

Спасибо большее, циклы преднамеренно так написал дабы просто зафиксировать прерывание.
Оказалось что еще била проблема с тем, что не включил еще #include <avr/interrupt.h>
В общем работает, буду ставить теперь новые горизонты...
еще раз спасибо
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:57
Рейтинг@Mail.ru


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