Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.03.2010, 14:50
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
С xmega не работал и не планирую пока. Текст с хомутом не приведен - скорее всего просто ошибка в программе. Но могут быть разные фокусы. Приведу пример:
Задача сбросить бит строба, прочитать порт, установить бит строба. Казалось бы решение
cbi
in
sbi
На самом деле, так работать не будет. А вариант
cbi
sbi
in
является правильным.
(mega163 + ftdi245).
такие нюансы могут быть и на xmega.
|
|
|
|
11.03.2010, 00:39
|
|
Временная регистрация
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от _guardianangel
|
Это чтение 2 портов в переменную i и наложение на старший байт маски 0x03.
|
За пример спасибо ,проблему решил.
|
|
|
|
11.03.2010, 00:42
|
|
Временная регистрация
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от SasaVitebsk
|
На самом деле, так работать не будет. А вариант
cbi
sbi
in
является правильным.
|
Не так пожалуй неправильно: как только снимешь строб - АЦП освободит шину (пины перейдут в третье состояние).
|
|
|
|
11.03.2010, 01:07
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от svv11
|
Код пишется для ATxmega128A1, порты к которым идёт обращения настроенны как виртуальные и обращение к ним идёт как к регистрам с младшими адресами - командами за 1 такт, кампилятор и не знает что это порты. Что меняет местами не сомневайтесь, я внимательно проверял.
|
svv11, вы так и не показали начальный C код, от которого вы не могли добится правильной работы. Все проблемы с перестановками и "съеденными" обращениями к памяти решаются магическим словом volatile.
|
|
|
|
11.03.2010, 02:40
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от svv11
|
Не так пожалуй неправильно: как только снимешь строб - АЦП освободит шину (пины перейдут в третье состояние).
|
А фишка в том, что строб снимается физически в конце 2 такта команды sbi, а чтение порта осуществляется в начале команды in. Иными словами при такой последовательности команд это произойдёт одновременно, а ацп задержит. В первом же варианте, надо вставить такт задержки, иначе устр-во не успеет выставить сигнал.
Это всё проверено.
|
|
|
Сказали "Спасибо" SasaVitebsk
|
|
|
11.03.2010, 03:01
|
|
Временная регистрация
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
SasaVitebsk, полезное замечание, но читать нужно было с двух портов. А выставить успевает, девайс очень резвый, у него преобразование меньше пол-микросекунды, да и торопиться снимать строб нет нужды. А вот один "nop" перед чтением поставлю для профилактики, за замечание спасибо.
|
|
|
|
11.03.2010, 03:46
|
|
Временная регистрация
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Используемый дивайс - AD7470. Насколько я понял из датошита сигналы ~CS и ~RD можно вообще не шевелить, а просто выставить их в постоянно низкое состояние и тогда код будет появляться как только закончится конвертирование, причём выставляться будет даже намного раньше - перед окончанием сигнала BUSY - завтра попробую.
|
|
|
|
11.03.2010, 20:57
|
|
Временная регистрация
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Попробовал если ~CS и ~RD выставить их в постоянно низкое состояние - работает. По изучал Xmega - пришёл к выводу что внутренний АЦП не хуже и умеет понимать напряжение ниже нуля и ещё много всяких полезных прибамбасов позволяющих выкинуть часть обвески (доделываю чужой проект).
|
|
|
|
12.03.2010, 02:35
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Если он сделан аналогично как в megaavr, то там есть один нюанс. Дело в том, что питание (AVCC) используется не только для питания самого ацп, но и порта, на который этот ацп выведен. В результате, при использовании достаточно мощных нагрузок на линиях этого порта, резко ухудшается качество измерения. А если порт оставить чистым, то всё прекрасно работает. На electronix, один парень исследовал характеристики АЦП в xmega в парафазном режиме - и параметры указанные в даташите, вполне подтвердились. Единственное ограничение - с опорником они там хомутнули.
Но если надо измерениями заниматься, то лучше использовать AD.
|
|
|
|
21.03.2010, 05:47
|
|
Временная регистрация
Регистрация: 20.11.2005
Сообщений: 52
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от SasaVitebsk
|
Но если надо измерениями заниматься, то лучше использовать AD.
|
Точность в этом проекте не главное - 8-битного бы вполне хватило, важна скорость.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:02.
|
|