Свежие обсуждения
Измерения

Осц.-пр. к ПК версия 2 (упрощенная)

1 30 44

Ребяты!
Я бы с удовольствием принял участие в обсуждении, но не знаю Атмела, а ПИКи вы не обсуждаете.
А ещё я никак не могу понять принципа. В моём понимании, всё просто: замерили сигнал АЦП, вывели на экран. Через Tдискретизации опять замерили и вывели. Но, насколько понял, всё гораздо сложнее. Можете пояснить, или дать ресурс, где чётко теория прописана?

 

Лучше так
ldr r0, [r1] ;в 0
str r5, [r2, #4] ; из 5
ldr r3, [r1] ;в 3
str r6, [r2, #8] ; из 6
ldr r4, [r1] ;в 4
str r0, [r2, #12] ; из 0
ldr r5, [r1] ;в 5
str r3, [r2, #16] ; из 3
ldr r6, [r1] ;в 6
str r4, [r2, #20] ; из 4

ldr r0, [r1] ;в 0
str r5, [r2, #24] ; из 5
ldr r3, [r1] ;в 3
str r6, [r2, #28] ; из 6
ldr r4, [r1] ; в 4
str r0, [r2, #32] ; из 0
ldr r5, [r1] ; в 5
str r3, [r2, #36] ; из 3
ldr r6, [r1] ;в 6
str r4, [r2, #40] ; из 4

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

: Gregory - ПИК класная вещь, сам люблю пользовать, но для каждого случая лучше брать то что лучше - из того что знаешь

 

То AnSi: Я собираюсь на TDA8703 - это видео АЦП, но может работать и от постоянки.. Максимальная частота выборок - 40*10^6 в секунду. Не требует отрицательного питания, имеет прямой и инверсный входы тактирования, умеет переводить выходы в третье состояние. Иммет выход сигнализирующий о выходе исследуемого сигнала за границы диапазона преобразования (1,55-3,26 вольта). Бывает как ДИП, так и планар. Купить сложно, но можно (мне удалось). Цена около 300 руб, что для быстрого АЦП вполне нормально.

Что-то из примеров я не понял, как межпроцессорная синхронизация выполнена и как синхронизация с сисследуемым сигналом ?

 

AnSi

"вы сохраняете регистр, почему не порт ???"
- Не регистр, а содержимое порта, на который указывает регистр. Т.е. в регистре -- адрес порта.

"т.е. конвеер не работает ???"
- Да всё там работает.
Наличие конвеера вовсе не означает, что все команды проходят через него за одинаковое время. Некоторые команды (меньшинство) создают задержку. К ним относятся, в том числе, LDR и STR. Сброс конвеера тут не при чём (он сбрасывается если изменить регистр PC, например, командой перехода).

В документации на систему команд ARM, для удобства, приводят "инкрементальное" время выполнения -- сколько тактов "добавит" такая-то команда.

Проверил предложенный шаманский код -- при запуске из ОЗУ тоже дает 6 тактов на сэмпл. Так что увы.

Расскажите подробней про 3 * AVR, всем же наверное интресно.
Мне например не очевидно как сделать именно непрерывный (если понимать под этим константный период записи) кольцевой буфер на 20 мегасэмплов.
Ведь указатель надо как то вернуть на начало когда буфер полон?

 

Gregory: Можете пояснить, или дать ресурс, где чётко теория прописана?
Начните с первой страницы.

 

: caddr == Проверил предложенный шаманский код -- при запуске из ОЗУ тоже дает 6 тактов на сэмпл. Так что увы.
-- а в описании столько обещаний

== Расскажите подробней про 3 * AVR, всем же наверное интресно.
начнём с того что мег я поставил 4
на 3мегах сделан кольцевой буфер, для того чтоб при переходе с конца буфера на начало не было выпадения сигнала переходы немного смещены, в момент перехода одной из мег, другая пишет шину в регистры без сохранения в память.
на 1меге сделан опрос шины и сравнение с регистром-уровень синхронизации и остальные фишки - типа пилажу к ней компаратор и цифровой вход внешней синхронизации, ещё чего нить.
для настройки програмы ставил вместо АЦП счетчик, АЦП пока не купил

 

Alexey:
Начните с первой страницы.
Читаю регулярно, с того самого 2004-го года.

 

AnSi

Всё равно непонятно с кольцевым буфером. Попробую, для начала, сформулировать нечто вроде теоремы.

1. (аксиома). Для того, чтобы обеспечить частоту заполнения "общего" буфера равной тактовой частоте fclk (20МГц максимум), за произвольно взятый интервал времени t три контроллера AVR должны выполнить в сумме (t * fclk) команд IN и (t * fclk) команд ST.

2. (теорема) Из п.1 следует, что программа должна состоять из одинакового количества команд IN и ST. Никакие другие команды не допустимы. Доказательство: команда IN выполняется за 1 такт, команда ST выполняется за 2 такта, остаток времени (на какие-либо другие команды) =
= (интервал_оцифровки * тактовая_частота * число_контроллеров) - (1 * требуемое_количество_команд_IN) - (2 * требуемое_количество_команд_ST) =
= (t * fclk * 3) - (1 * t * fclk) - (2 * t * fclk)
= 0 (нулю)

Вопрос: как тогда возвращать указатель?

 

caddr: Всё равно непонятно с кольцевым буфером.

AnSi: на 3мегах сделан кольцевой буфер, для того чтоб при переходе с конца буфера на начало не было выпадения сигнала переходы немного смещены, в момент перехода одной из мег, другая пишет шину в регистры без сохранения в память.

 

АКСИОМА - это типа не требует доказательства - однако круто
это если ВЫ пользуетесь одним регистром - внего пишите и из него читаете.
но ни что не мешает выполнить 1000-IN и например 990-ST - выше написано "другая пишет шину в регистры без сохранения в память" - можно оставить в регистрах и не переписывать в память.