|
|
  |
ATxmega |
|
|
|
Dec 12 2009, 11:41
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
Цитата(Склихасовский @ Dec 12 2009, 17:34)  да получается, что предварительно стереть нужно Стирать не нужно, NVM сам сотрет только обновляемые ячейки на странице (насколько помню). Вообще есть соотв AppNote, там все подробно объяснено, я сделал по нему, и все работает без проблем. На ассемблере, правда. Использовал заполнения страничного буфера как обычное копирование данных (с контролем перехода за границы страницы) и Atomic Write. А не в memory mapped - используйте старые алгоритмы и пишите по байту, изменений особых нет. Новый режим экономичней, если писать более одного байта.
Сообщение отредактировал V_G - Dec 12 2009, 11:44
|
|
|
|
|
Dec 12 2009, 16:26
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862

|
Цитата используйте старые алгоритмы "Старые алгоритмы" недоступны, теперь в любом случае пишется только через буфер страницы. Только в первом случае (I/O-mapped) доступ к нему через NVM контроллер, во втором он мапится в память. Запутал Атмел невнятным описанием этого своего страничного доступа. Значит получается, что во время Atomic Write на странице трутся только "потревоженные" в буфере ячейки, а не тупо вся страница. Типа, хочешь - пиши одной командой один байт, хочешь сразу всю страницу. А ведь первое впечатление было такое - раз очистил перед записью буфер, значит будет чиститься и страница... Сейчас проверил через I/O-mapped доступ - действительно это так! Соседние, ранее записанные ячейки, не трет... Значит все совсем неплохо
Сообщение отредактировал MDD - Dec 12 2009, 16:35
|
|
|
|
|
Dec 12 2009, 16:32
|
Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912

|
Цитата(V_G @ Dec 12 2009, 14:41)  Стирать не нужно, NVM сам сотрет только обновляемые ячейки на странице (насколько помню). Вообще есть соотв AppNote, там все подробно объяснено, я сделал по нему, и все работает без проблем. На ассемблере, правда. Использовал заполнения страничного буфера как обычное копирование данных (с контролем перехода за границы страницы) и Atomic Write. если не сложно можно взглянуть на исходники ASM? Цитата(MDD @ Dec 12 2009, 19:26)  Сейчас проверил через I/O-mapped доступ - действительно это так! Соседние, ранее записанные ячейки, не трет... Значит не все совсем неплохо  а если переписать ячейку тогда как? например было $00 нужно $FF --- И так я все таки не вкурил доконца... требуется записать область маппед с адреса $1020-103f 1. копирую из основной памяти эти 32 байта в маппед область с адреса $1020 2. выставляю команду NVM контроллеру (если не ошибаюсь $35) 3. регистр адреса NVM определяю как 1 страница 4. даю команду на выполнение. Правильно? (а то проверить смогу тока в понедельник)
Сообщение отредактировал Склихасовский - Dec 12 2009, 16:37
|
|
|
|
|
Dec 12 2009, 18:12
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862

|
Цитата(Склихасовский @ Dec 12 2009, 18:32)  а если переписать ячейку тогда как? например было $00 нужно $FF Сейчас специально проверил конкретно этот случай - все работает. Т.е. допустим в первой ячейке страницы был 0. Дальше очищаем буфер страницы. Казалось бы, что после этой команды во всем буфере должны сидеть $ff (или $00). В этом и было мое главное заблуждение. Надо считать, что это абстрактно пустой буфер. Дальше, в первую ячейку буфера пишем $ff(или любое другое число). Остальные ячейки не трогаем. И даем команду Atomic Write. После этого будет стерта и записана новым значением только первая ячейка страницы. Если бы загрузили сразу несколько любых ячеек буфера, они бы тоже были переписаны в соответствующее ячейки страницы во время действия этой команды. Т.е. резюме такое - "пустые ячейки" буфера никуда не пишутся (не портят содержимого страницы). PS.На счет memory-mapped режима не подскажу, еще не разбирался.
|
|
|
|
|
Dec 27 2009, 18:37
|

Знающий
   
Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499

|
Цитата(ZVA @ Nov 14 2009, 16:01)  2. Проверены собственные шумы АЦП в таком режиме для двух вариантов: - выводы АЦП в диф. включении были замкнуты между собой резистором 2К и никуда не подключались, АЦП крутился в free run режиме и значения считывались асинхронно и передавались по RS485 в PC. Кроме этого в прерываниях от таймера формировалась пила на ЦАПе и моргал тестовый светодиод. Кроме собственно значений АЦП в RS485 передавались значения после фильтрации. Фильтр экспоненциальный(две строчки на С), я его обычно использую во всех задачах измерения постоянных сигналов. Результаты без коментариев даны на рис.1 Выводы, плохой камень или нет, делайте сами. Если вас не затруднит, испытайте пожалуйста, шумы ацп в не дифферециальном включении от хорошего опорника. с rc фильтром. Я думаю, общественности будет интересно. Я делал такие измерения для STM32F103R8 , для анализа линейности оверсемлинга, результатом остался доволен. Из массива полученных данных я строю диаграмму в экселе- распределение вероятности. По вертикальной оси сколько раз значение встречается в процентах от всей выборки, по горизонтальной оси- сами значения. При "правильной" работе АЦП должно получаться гауссовское распределение. Я строил такие диаграммы для разных настроек ацп- частоты и времени выборки. Как ни странно высокая(12Мгц) частота и малое время выборки (3мкс) ацп давала самые малошумящие значения, всего +-1 разряд на выборку из 3000 значений. Но для увеличения линейности оверсемплинга лучше было уменьшать частоту до 9 Мгц и немного поднимать время выборки- - тогда значения размазывались на +-3, и после фильтрации линейность возрастала. Шум (dithering) специально не подмешивал.
|
|
|
|
|
Dec 28 2009, 08:45
|

Участник

Группа: Участник
Сообщений: 39
Регистрация: 24-08-09
Пользователь №: 52 013

|
Подскажите, пожалуйста... Область памяти, которая называется таблицей приложения. В даташите написано, что если не хранить в ней данные, то ее можно использовать под приложение. Так вот, как узнать, использую ли я ее для хранения данных? Другими словами, чтоб хранить в ней данные надо это каким-то особенным образом объявить? А если я этого не знаю, то я ее и не использую? И если я правильно понимаю все вышесказанное, то приложение можно расширить до 136КБ? А из бутлоадера эта область доступна?
Или эта таблица входит в 128КБ памяти программ?
|
|
|
|
|
Jan 3 2010, 10:31
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862

|
Цитата(ivainc1789 @ Jan 3 2010, 01:01)  ADC "не умеет" работать выше 2.4V, а дифф входы вообще имеют диапазон обратно пропорциональный усилению??? А как Вы хотели иначе с диапазоном диффвходов? Там имеется ввиду дифференциальное напряжение. Естественно чем больше усиление, тем меньше допустимый максимальный сигнал на входе. Кстати, здесь в теме кто-то проверял синфазное напряжение, вроде работает до тех же 2.4В. А вот померить Vсс напрямую похоже уже никогда не удастся. В последней версии даташита появилось максимальное значение для Vref=Vcc-0.6V. Это конечно неудобно. А вообще, даже с такой ерратой жить можно. Многие обещанные фичи там весьма приятны и сделаны изначально прямо
|
|
|
|
|
Jan 28 2010, 13:50
|

В поисках истины
  
Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923

|
Цитата An internal temperature reference is available. Measuring the voltage on this will give an ADC result representing the current temperature in the microcontroller. The temperature, T, is given as: T = TBD ⋅ ADCRESULT + TBD А вот кто такой TBD я что-то не понял...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|