Модуль цифрового осцилографа
| |
ВитГо | Дата: Воскресенье, 24.02.2013, 22:34 | Сообщение # 376 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (Sergi) А откуда начинать рисовать, с какого места? Дисплей 400х240 16бит - весь экран 192000байт. В маленьком я зарисовую старую линию цветом фона и сразу рисую новую цветом линии. Посмотри исходники на радиокоте OsA. Так получается быстро.
фиг его знает конечно, но имхо проще не стирать картинку старым цветом, а сразу рисовать новую, тем более что на цветном дисплее на st7735 есть функция задания области для вывода, у меня при последовательном выводе область заполняется снизу вверх, слева на право, следовательно зная нужную позицию по Y каждой точки можно рассчитать вывод.. причем это будет очень быстрый вывод, я уже писал - на разрешении 128 на 160 точек у меня вывод кадра занимал чтото около 11-15 мс Цитата (Sergi) Но еще обсчитать, интерполировать, Высчитать действующее и среднее напряжение, синхру, маркеры. ну на 168 мгц это не проблема, тем более что стартовать можно по 50%ому заполнению буфера захвата (не обязательно ждать полного цикла) так что это проблема скорее грамотного использования связки DCMI и DMA
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Вторник, 26.02.2013, 09:17 | Сообщение # 377 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Не могу разобраться. Например DCMI упаковывает четыре 8битных отсчета в одно 32бит слово (за 4*2,5=10 тактов), правильно? DMA забирает это из регистра DCMI_DR и пишет в память с инкрементом 4. На картинках видел что DMA работает за 7 тактов. Непонятно- 7 тактов на 8бит или на все 32? А то может получиться что DMA не успеет за DCMI. Даже если использовать FIFO DCMI (наверно обязательно чтоб процу не мешать) 4*32бит, можно не успеть забрать данные. Если DMA не использовать, то можно забрать за 3 такта на байт (3*4=12 или может 3 такта на слово в 32бита), но проц будет занят и все остальные будут ждать очереди. Правильно ли я думаю? Как идет запись в память? По байтно (8 бит) или по словно (32) за один такт?
Добавлено (26.02.2013, 09:17) --------------------------------------------- Если DMA работает за 7 тактов на слово, можно сделать 2 канала по 8бит со скоростью 40 MSPS на канал при частоте проца 200 Мгц! На clk DCMI поставить делитель на 2, а с него на CS разных АЦП. Шину данных запараллелить. Четные отсчеты будут от АЦП0, нечетные-АЦП1.Если АЦП не умеют так быстро переключаться, добавить по 8битному буферу. Понятно что одиночный канал будет работать на 80.
Сообщение отредактировал Sergi - Вторник, 26.02.2013, 09:22 |
|
| |
ВитГо | Дата: Вторник, 26.02.2013, 11:34 | Сообщение # 378 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (Sergi) Не могу разобраться. Например DCMI упаковывает четыре 8битных отсчета в одно 32бит слово (за 4*2,5=10 тактов), правильно? DMA забирает это из регистра DCMI_DR и пишет в память с инкрементом 4. На картинках видел что DMA работает за 7 тактов. Непонятно- 7 тактов на 8бит или на все 32? на все 32 бита ! Цитата (Sergi) Если DMA не использовать, то можно забрать за 3 такта на байт (3*4=12 или может 3 такта на слово в 32бита), но проц будет занят и все остальные будут ждать очереди. Правильно ли я думаю?
а вот это не получиться из за особенностей архитектуры, у армов получается что GPIO тактируется как бы отдельно от проца, поэтому скорость ввода\вывода gpio не равна скорости исполнения команд ввода\вывода у процессора.. у дихалта ктото тестировал gpio на чтение у F4 получили около 30 msps всего опять таки забрать 3 такта, упаковать еще 2-3 такта, и после 4ех упаковок записать в память еще 4-7 тактов - будет точно дольше !
Цитата (Sergi) Если DMA работает за 7 тактов на слово, можно сделать 2 канала по 8бит со скоростью 40 MSPS на канал при частоте проца 200 Мгц! На clk DCMI поставить делитель на 2, а с него на CS разных АЦП. Шину данных запараллелить. Четные отсчеты будут от АЦП0, нечетные-АЦП1.Если АЦП не умеют так быстро переключаться, добавить по 8битному буферу. Понятно что одиночный канал будет работать на 80.
а вот это идея ! в принципе запустив на 240 мгц проц получим теоретический предел DCMI равный 96 мгц ! правда делитель mco только 2 или 3 - так что будет только 80 мгц на два канала на практике (без дополнительного генератора) соответственно поделив на 2 канала - будет по 48 мгц на канал... правда нужно посмотреть быстродействующий делитель на частоту 96 мгц и посмотреть если ли у АЦП линия управления OE (Output Enable) lkz перевода линий в Z состояние..
опять таки делитель 2.5 от sysclk только для 12 и 14 бит захвата, а для 8 бит возможно пройдет и делитель 2 !! (по крайней мере в тестах у меня работало) - а это уже 120 мгц на канал (при 240 мгц такта) и по 60 мгц на два канала
в принципе можно на ходу менять тактирование с 240 мгц (когда работают два канала) на 168 мгц (когда работает один канал) - чтобы не превышать сильно частоту АЦП (у меня например АЦП на 80 мгц)
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Вторник, 26.02.2013, 11:52 | Сообщение # 379 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| вот про изменение тактирования через SPL: http://forum.easyelectronics.ru/viewtopic.php?p=164196#p164196 сохраню здесь чтобы потом не искать :-)
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Вторник, 26.02.2013, 21:56 | Сообщение # 380 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| В F207 мсо может работать с делителем 1. На штатной частоте 120МГц. Есть буфер 74AC245. Самый плохой случай переключения в Z- 7.5нс при 3.3в. А это 130МГц. На АЦП AD9283 явно не указано время EN. Ориентировочно 5нс. Это если конвертация не останавливается пока сигнал не активен. В расчетах не стоит далеко отходить от штатных частот. Для проверки скорости захвата надо проводить опыт. Думаю что сохранение регистра DCMI_DR в память с инкрементом пройдет максимум за 6 тактов без DMA (у меня так получилось на F100). Это 32МГц при 192 тактовой или 2 канала 8бит по 64МГц или 1 с 128 МГц. DCMI медленнее. 4*2=8 тактов или 24 МГц и 48 и 96 соответственно. Если DMA работает за 7, то основное место задержки DCMI. И все будет работать правильно. Теперь задумываюсь о переделке цифровой части.
Сообщение отредактировал Sergi - Вторник, 26.02.2013, 21:57 |
|
| |
ВитГо | Дата: Вторник, 26.02.2013, 22:01 | Сообщение # 381 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (Sergi) Думаю что сохранение регистра DCMI_DR в память с инкрементом пройдет максимум за 6 тактов без DMA (у меня так получилось на F100). Это 32МГц при 192 тактовой или 2 канала 8бит по 64МГц или 1 с 128 МГц. DCMI медленнее. 4*2=8 тактов или 24 МГц и 48 и 96 соответственно. Если DMA работает за 7, то основное место задержки DCMI. И все будет работать правильно.
как то сложно написал.. в даташите на DCMI написано: скорость работы не более sysclk\2.5 больше думать не нужно.. еще идет про 54 msps - но поскольку камень гонется то думаю на эту цифру сильно внимания можно не обращать..
дополнительно, я уже писал что цифра sysclk\2.5 - это для захватов 12 и 14 бит ! то есть 32 бита заполняются за 2 такта захвата DCMI ! если же у нас будет 8ми битный режим - то возможно частоту захвата удасться увеличить, так как даже при увеличении частоты захвата DCMI - запись в память будет производиться с той же частотой что и при 12 или 14 бит...
в общем что будет тормозить DMA или DCMI предлагаю не задумываться :-) - они успеют :-)
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Вторник, 26.02.2013, 22:16 | Сообщение # 382 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Все правильно. Я хотел сказать что упаковка 8 бит в 32 в DCMI_DR пройдет за 2 такта * 4 байта =8 тактов. А это по 2 отсчета на 2 канала. То есть возможность захвата 2х каналов на скорости f/4! ИЛИ f/5 при 2,5 такта DCMI. Пока упакуются новые данные DMA все вычитает и сохранит в память.
Сообщение отредактировал Sergi - Вторник, 26.02.2013, 22:19 |
|
| |
ВитГо | Дата: Вторник, 26.02.2013, 22:34 | Сообщение # 383 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну да.. где то так... даже если f\5 то от 240 мгц останеться 48 мгц на каждый из двух каналов...
имхо за глаза... :-)
блин, нужно что-то решить с аналоговой частью, чтобы мне хотя бы уже начать разбираться с софтом.. сейчас главное накидать каркас, на который уже можно писать софт..
нужна схема упрощенного аналога... чтобы был маленький... придумай а? ЦАП возьму аппаратный (на 1 канал есть свободный у контроллера помоему) я так понимаю нужен генератор двуполярного напряжения (почему нельзя использовать искусственную среднюю точку я не понял) и операционники работающие в обоих полярностях.. кстати, а как тогда работает АЦП ? у него тоже должно быть двуполярное напряжение ?
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Вторник, 26.02.2013, 22:53 | Сообщение # 384 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| Разные ацп по разному питаются. ад9283 специально для портативных приборов и питание одно 3в. У него диф вход, но может работать с однополярным сигналом. Второй вход внутри подключен к делителю на 3 (около 1в). Если на первый подать 1в+-0,5в получим код от 0 до 255. Вобще то в приборах принято вход и выход привязывать к земле (корпусу) для экранизации и минимизации токов смещения. Для опытов можно входной делитель подключить через конденсатор, или как в твоем первом посте.
Вот потому я делаю из двух плат. Можно экспериментальную простенькую схему забацать, а потом в разъем пристегнуть настоящую. А на цифровой плате сделать вход анализатора и можно писать софт.
Сообщение отредактировал Sergi - Вторник, 26.02.2013, 22:59 |
|
| |
ВитГо | Дата: Среда, 27.02.2013, 09:44 | Сообщение # 385 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| вопрос на засыпку: ты делал компоненты для CPC1035 и NC7SB3157 ?
можешь мне скинуть?
кстати а для управления CPC1035 транзисторный ключ нужно использовать или ты напрямую на контроллер повесить хочешь?
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 27.02.2013, 10:55 | Сообщение # 386 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| а если в эту схему http://vg.ucoz.ru/_fr/0/0615859.jpg поставить ad9283 ?
а на вход делитель на cpc1035n ?
какие недостатки ?
на VRef завести с ШИМ или DAC напряжение для смещения...
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 27.02.2013, 18:13 | Сообщение # 387 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| кстати а насколько допустимо использовать ICL7660 (MAX1044) для получения отрицательного напряжения -5 вольт для питания операционников ?
вроде бы по даташиту подключение предельно простое...
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 27.02.2013, 21:04 | Сообщение # 388 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Sergi, напиши мне аську свою что ли.. а то иногда нужно оперативно что нить спросить - а тебя на сайте нет
Виталий (аka ВитГо)
|
|
| |
ВитГо | Дата: Среда, 27.02.2013, 21:12 | Сообщение # 389 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Кстати, вопрос на засыпку: а зачем нам во входной цепи регулировка усиления входного сигнала ? разве входного делителя будет мало ?
Виталий (аka ВитГо)
|
|
| |
Sergi | Дата: Среда, 27.02.2013, 21:35 | Сообщение # 390 |
Подполковник
Группа: Проверенные
Сообщений: 540
Статус: Offline
| NC7SB3157 это тоже самое что и 74LVC1G3157GV. Есть в библиотеках. CPC1035 рисовал сам. Как отдельный элемент добавить? Всю библу выкладываю. Ему достаточно 2ма для открытия, можно питать через резистор и напрямую и через буфер,регистр.
Если в схему поставить ad9283 понадобится одно питание 2.7-3.3в, можно обойтись одним оу включенным инвертором. На +вход оу подать напряжение смещения от DAC или ШИМ. Только при анализе учесть инверсию сигнала. Например так: Uвх=(255-Uвх (это код в цифре))*Кус.
Для питания оу желательно симметричное напряжение. Например +-3в. Для 74LVC1G3157GV максимальное напряжение питания 5.6в. Я поставил источник +2.8 и инвертор -2.8. Ток потребления от источника зависит от нагрузки оу. При нагрузке 200 ом и амплитуде 0.6в ток будет 3ма. По даташиту max может выдать до 10 ма при 3в. Достаточно для двух оу.
|
|
| |
|