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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> прием данных из АЦП в ПК по USB
jur
сообщение Mar 14 2008, 07:45
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(SancheSZ @ Mar 12 2008, 22:02) *
Konst_777, опишу проект подробнее.
...
Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом.

У меня похожий проект (только передаются 8-разрядные данные АЦП, пачками по 512 байт). Я пробовал два варианта: Slave FIFO (применялась микросхема CY7C680001) и GPIF (это уже на CY7C680013A). Для режима Slave FIFO задал длительность импульса SLWR равной 80 нсек с периодом 160 нсек. При этом получается, что передача 256 16-разрядных слов занимает около 41 мксек. Предельная скорость в районе 12 МБайт/сек. Для меня в общем-то приемлемо, но запаса по скорости не остается. А это плохо.

Поэтому я остановился на режиме GPIF. Дело в том, что в этом режиме можно получить заметно бОльшую скорость передачи данных. Мы обсуждали вопрос предельного быстродействия передачи данных с помощью этой микросхемы в Винде вот в этом топике (см. скриншоты постов #49 и #50). Можно достичь предельной скорости порядка 40+ МБайт/сек.

Цитата(SancheSZ @ Mar 12 2008, 22:02) *
На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.

Только нужно тщательно организовать прием данных. Во-первых, по всей видимости однозначно следует принимать данные в отдельном потоке (IMHO, тут вообще без вариантов). Во-вторых, для сброса данных на диск следует вдумчиво организовать буферирование принятых данных (возможно, следует сделать два/четыре здоровых буфера в несколько сотен килобайт, или даже порядка мегабайтов).

Цитата(SancheSZ @ Mar 12 2008, 22:02) *
Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на FX2, какой режим применять и тд...

Для режима Slave FIFO нужно использовать SLWR, адрес (номер) FIFO и, наверное, этого достаточно. Для режима GPIF в общем-то все то же самое, только используются линии CTLx. Например я использую CTL0 в качестве сигнала RD#, а CTL1 в качестве OE#. Для квитирования (проверки готовности) можно использовать линии RDYx. Но я поступил проще: применил линию порта ввода микросхемы CY7C680013A, которая опрашивает готовность и программно запускает очередной цикл считывания блока данных. Передача одного блока (512 байт) ПЛИС->CY7C680013A занимает что-то порядка 8.5 мксек (я выбрал частоту интерфейса 30 MHz, т.к. мне этого достаточно за глаза. Но можно и 48 MHz, тогда скорость пропорционально возрастет). В моем проекте блоки следуют один за другим с периодом от ~35 до ~300 мксек. Если у тебя данные идут непрерывным потоком, то, наверное, следует все же применить линию RDYx. Но в любом случае получить скорость 10-15 МБайт/сек можно лёгко.


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Mar 14 2008, 19:10
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(AndreyS @ Mar 12 2008, 23:43) *
Если все же об аппаратном, то как все таки оно организовано, да еще и с сохранением таких скоростей??? (двухпортовая ОЗУ в разрыв между АЦп и cypress???)

Между АЦП и FX2LP как правило ставят FPGA. Подключите к FPGA динамическую память и получите FIFO такого объема, какого захотите. Мало? Подключите к FPGA жесткий диск. И все это будет FIFO. То есть, способ организации данных по типу Первый зашел, Первый вышел.

Цитата(SancheSZ @ Mar 13 2008, 00:02) *
Konst_777, опишу проект подробнее...

Похоже, что jur уже ответил на Ваши вопросы.
Go to the top of the page
 
+Quote Post
SancheSZ
сообщение Mar 14 2008, 19:52
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 27-02-08
Пользователь №: 35 422



Вот, нашел то, что надо. smile.gif

http://lea.hamradio.si/~s57uuu/uuusb/simplead.png

Человек подключает два 8-разрядных АЦП.
Подробнее: http://lea.hamradio.si/~s57uuu/uuusb/index.htm

Использует Slave FIFO в асинхронном варианте (только SLWR).

Там внизу есть раздел Software и соответствующая ссылка, по которой описывается програмная сторона вопроса - правда под Linux.


Насколько я понимаю программирование контроллера сводится к задаию значений некоторых регистров?

И еще: как я понял код загружается в RAM контроллера по USB, после чего девайс перезагружается. Вот собственно каким образом код загружается? Это должна делать моя программа? Нужен ли в таком случае EEPROM?
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Mar 15 2008, 06:42
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Вот, нашел то, что надо. smile.gif

Ой, боюсь то, что не надо sad.gif . Вряд ли Вы получите работающий модуль.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Человек подключает два 8-разрядных АЦП.

Это его проблемы.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Использует Slave FIFO в асинхронном варианте (только SLWR).

И, соответственно, скорость обмена до 15 Мбайт/сек, а Вам нужно 20 Мбайт/сек.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
Насколько я понимаю программирование контроллера сводится к задаию значений некоторых регистров?

Но datasheet и EZ-USB® Technical Reference Manual все равно прочитать нужно.

Цитата(SancheSZ @ Mar 14 2008, 23:52) *
И еще: как я понял код загружается в RAM контроллера по USB, после чего девайс перезагружается. Вот собственно каким образом код загружается? Это должна делать моя программа? Нужен ли в таком случае EEPROM?

Если Вы будете подключать к компьютеру одновременно только одно устройство с VID=04B4 и PID=8613 ("Cypress EZ-USB FX2LP - EEPROM missing"), то можно не устанавливать EEPROM на плату. Драйвер CyUSB.sys может загружать скипт, содержащий программу для FX2LP из файла на диске. Эта возможность описана в документе "CyUSB.chm" раздел "Modifying CyUSB.INF" подраздел "4. Execute a saved script of commands at driver load time".
Но, все равно, на Вашем модуле должна быть EEPROM, правильно подключенная к контроллеру FX2LP (Э3 и PCB должны содержать EEPROM). Иначе Вы рискуете оказаться перед необходимостью повторной разработки модуля.
Go to the top of the page
 
+Quote Post
SancheSZ
сообщение Mar 15 2008, 07:19
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 27-02-08
Пользователь №: 35 422



Цитата(Konst_777 @ Mar 15 2008, 09:42) *
И, соответственно, скорость обмена до 15 Мбайт/сек, а Вам нужно 20 Мбайт/сек.


Это понятно. Возможно мне и этой скорости хватит, а простота реализации подкупает smile.gif.

На самом деле буду очень благодарен, если расскажете, что таке GPIF, с чем его едят, чем он лучше и почему быстрее...

Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере.

Цитата(Konst_777 @ Mar 15 2008, 09:42) *
Если Вы будете подключать к компьютеру одновременно только одно устройство с VID=04B4 и PID=8613 ("Cypress EZ-USB FX2LP - EEPROM missing"), то можно не устанавливать EEPROM на плату.

Но, все равно, на Вашем модуле должна быть EEPROM, правильно подключенная к контроллеру FX2LP (Э3 и PCB должны содержать EEPROM). Иначе Вы рискуете оказаться перед необходимостью повторной разработки модуля.


Эти 2 высказываия немного протеворечат друг другу. Да, я осознаю, что без EEPROM я не смогуподключить 2 таких контроллера одновременно. Но в принципе, работать будет, если просто поставить вместо EEPROM подтягивающие резисторы? Т.е. кроме идентификации устройтва стандартными кодами и необходимости грузить прошивку с компа других ограничений не будет?


Еще такой вопрос... Есть у меня платка тут одна со 128-pin cy7c86013 распаянным. Хотел с ней поигратся (типа завести с помощью сайпресовской панели прмер bulkloop). Тык вот, устройство (EEPROM missing - там резисторы вместо него) нормально подключается к компу, ставлю драйвер cyUSB, панель его видит. Загружаю пример bulkloop.hex в конроллер, вроде загружается (ну там видно как много текста бежит). Но после загрузки нажимаю GetPipeInfo - ничего не выводит... С чем может быть это связано? У меня есть схема этой платы, но выложить ее не могу. Много пинов контроллера заведены на ПЛИС, конфигурация в которой затерта неизвестно чем (и чего там должно быть у меня нету). Может ли прична быть в ПЛИС, т.е. какие критичные для контроллера пины нужно проверить?
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Mar 17 2008, 18:58
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(SancheSZ @ Mar 15 2008, 11:19) *
На самом деле буду очень благодарен, если расскажете, что таке GPIF, с чем его едят, чем он лучше и почему быстрее...

Знаю, что есть GPIF Designer, даже запускал его, но в чем суть не понял. Можно ли соорудить такой простой протокол, как в той ссылке, что я давал в предыдущем посте? Т.е. чтоб по некому сигналу (там он назван clk) в FIFO загружались новые 16 бит данных? Но чтобы работало быстрее, чем в том примере.

Выберите АЦП и рассмотрим на конкретном примере. Вот только, на этой неделе у меня не будет времени. Но может быть еще кто-нибудь даст ответы на Ваши вопросы и критические замечания на мои ответы. smile.gif

Цитата(SancheSZ @ Mar 15 2008, 11:19) *
Эти 2 высказываия немного протеворечат друг другу. Да, я осознаю, что без EEPROM я не смогуподключить 2 таких контроллера одновременно. Но в принципе, работать будет, если просто поставить вместо EEPROM подтягивающие резисторы? Т.е. кроме идентификации устройтва стандартными кодами и необходимости грузить прошивку с компа других ограничений не будет?

Работать будет, других ограничений не будет.

Цитата(SancheSZ @ Mar 15 2008, 11:19) *
Еще такой вопрос... Есть у меня платка тут одна со 128-pin cy7c86013 распаянным. Хотел с ней поигратся (типа завести с помощью сайпресовской панели прмер bulkloop). Тык вот, устройство (EEPROM missing - там резисторы вместо него) нормально подключается к компу, ставлю драйвер cyUSB, панель его видит. Загружаю пример bulkloop.hex в конроллер, вроде загружается (ну там видно как много текста бежит). Но после загрузки нажимаю GetPipeInfo - ничего не выводит... С чем может быть это связано? У меня есть схема этой платы, но выложить ее не могу. Много пинов контроллера заведены на ПЛИС, конфигурация в которой затерта неизвестно чем (и чего там должно быть у меня нету). Может ли прична быть в ПЛИС, т.е. какие критичные для контроллера пины нужно проверить?

Попробуйте этот пример. Он предназначен именно для FX2 (cy7c68013). Если заработает, сравните тексты исходников.
Прикрепленные файлы
Прикрепленный файл  bulkloop_FX2.rar ( 77.72 килобайт ) Кол-во скачиваний: 2910
 
Go to the top of the page
 
+Quote Post
maxit
сообщение Mar 19 2008, 07:31
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 8-01-08
Пользователь №: 33 893



Цитата(SancheSZ @ Mar 12 2008, 23:02) *
Konst_777, опишу проект подробнее.

Значится так. Все затевается для считывания данных с ПЗС матрицы. Матрица будет тактироваться ПЛИСиной (т.е. ПЛИС будет вырабатывать тактовые импульсы вертикального и горизонтального сдвига в ПЗС). С выхода ПЗС аналоговый сигнал идет на абстрактный 10-битный АЦП. Дык вот, хотелось бы завести эти 10 бит на FX2 и подать на FX2 еще какой-нибудь сигнал с ПЛИС, который бы говорил о готовности данных, т.е. давался синхронно с изменением данных на выходе ПЗС (и АЦП соответственно).

Т.е. обмен оносторонний (АЦП->компьютер), темп обмена задается ПЛИСом.

На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.

Вот собственно вопрос в том как все это организовать: какие и сколько сигналов нужно подать на FX2, какой режим применять и тд...



если входной сигнал высокой частоты нельзя ли спектр сигнала перенести в область низких частот а потом преобразовать АЦП
Go to the top of the page
 
+Quote Post
SancheSZ
сообщение Apr 15 2008, 06:30
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 27-02-08
Пользователь №: 35 422



Цитата(Konst_777 @ Mar 17 2008, 22:58) *
Выберите АЦП и рассмотрим на конкретном примере. Вот только, на этой неделе у меня не будет времени. Но может быть еще кто-нибудь даст ответы на Ваши вопросы и критические замечания на мои ответы. smile.gif


Ну если не сложно, давайте рассмотрим подключение к CY7C68013A-56PVXC АЦП AD9203.

Цитата(Konst_777 @ Mar 17 2008, 22:58) *
Попробуйте этот пример. Он предназначен именно для FX2 (cy7c68013). Если заработает, сравните тексты исходников.


Спасибо! Пример нормально завелся. Буду копать исходики.
Go to the top of the page
 
+Quote Post
-=HermiT=-
сообщение Apr 16 2008, 05:35
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 29-11-05
Из: Belarus
Пользователь №: 11 540



Цитата(SancheSZ @ Mar 12 2008, 23:02) *
На компьютере приложение будет в цикле проверять приход новых данных и сбрасывать их на диск.


У меня такой вопрос: каким образом c компьютера можно проверять заполнены ли IN буферы в микросхеме CY7C68013?
Go to the top of the page
 
+Quote Post
-=HermiT=-
сообщение Apr 17 2008, 07:07
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 29-11-05
Из: Belarus
Пользователь №: 11 540



Решил сделать так: в буфер EP6 записываю статус FIFOFULL для буфера EP8 и обновляю этот статус после каждого прочтения буфера EP6. Через буфер EP8 передаю сами данные.

Не знаю есть ли другой способ. Наверное, можно использовать биты STALL.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Apr 17 2008, 08:58
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(-=HermiT=- @ Apr 16 2008, 09:35) *
У меня такой вопрос: каким образом c компьютера можно проверять заполнены ли IN буферы в микросхеме CY7C68013?

А зачем оно Вам надо??? Сделайте съем данных с FX2 в отдельном потоке и крутите в цикле, таймаут выберите соответствующий Вашему потоку данных...
Go to the top of the page
 
+Quote Post
-=HermiT=-
сообщение Apr 17 2008, 09:20
Сообщение #27


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 29-11-05
Из: Belarus
Пользователь №: 11 540



Цитата(-Al- @ Apr 17 2008, 11:58) *
А зачем оно Вам надо??? Сделайте съем данных с FX2 в отдельном потоке и крутите в цикле, таймаут выберите соответствующий Вашему потоку данных...


Спасибо за ответ. Я не знал, что так можно сделать.
Хотя, похоже, буду делать, как описал, т.к. данные на выходе устройства могут вообще не появиться.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Apr 17 2008, 10:53
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(-=HermiT=- @ Apr 17 2008, 13:20) *
Спасибо за ответ. Я не знал, что так можно сделать.
Хотя, похоже, буду делать, как описал, т.к. данные на выходе устройства могут вообще не появиться.

Не делайте этого, ибо - глупость smile.gif Сделайте лучше так, как я предложил. XferData блокирующая функция, она будет ожидать события: или прием указанного количества данных или таймаут, вот и поставьте её в цикле в отдельном потоке! Не надо выдумывать велосипед ;)
Go to the top of the page
 
+Quote Post
-=HermiT=-
сообщение Apr 18 2008, 06:36
Сообщение #29


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 29-11-05
Из: Belarus
Пользователь №: 11 540



http://www.efo.ru/doc/Cypress/Cypress.pl?2524 - полезная ссылка
Go to the top of the page
 
+Quote Post
-=HermiT=-
сообщение Apr 18 2008, 08:06
Сообщение #30


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 29-11-05
Из: Belarus
Пользователь №: 11 540



Цитата(-Al- @ Apr 17 2008, 13:53) *
Не делайте этого, ибо - глупость smile.gif Сделайте лучше так, как я предложил. XferData блокирующая функция, она будет ожидать события: или прием указанного количества данных или таймаут, вот и поставьте её в цикле в отдельном потоке! Не надо выдумывать велосипед ;)

У меня еще такой вопрос. Смогу ли я отсылать с компьютера новые данные, если другой поток в это время пытается получать данные с этого же устройства (устройство данные выдать не может, т.к. их еще нет)?

Вроде, сам уже нашел ответ: маленький таймаут надо задать
Go to the top of the page
 
+Quote Post

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

 


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


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