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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> FTDI FT232R BitBangMode, Непрерывная запись в порт и считывание
Dmitriy_V
сообщение Aug 30 2006, 20:45
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Необходимо осуществить непрерывный вывод информации с определенной частотой.
Для этой цели использовался BitBangMode микросхемы FT232R.
Однако после вызова процедуры FT_WRITE программа зависает до полного вывода данных.
При этом возникают две серьезные проблемы:
1. невозможно проводить промежуточные вычисления с полученными данными.
2. после полного вывода данных возникает промежуток между окончанием
предыдущего и началом следующего вызова функции FT_WRITE.

Можно ли для данной микросхемы решить эти проблемы?

Сообщение отредактировал Dmitriy_V - Aug 30 2006, 20:46
Go to the top of the page
 
+Quote Post
Alexsys
сообщение Aug 31 2006, 07:45
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 8-08-06
Из: Москва
Пользователь №: 19 398



Если я правильно понял, тут нужно функцию обмена выносить в отдельный поток. Тогда основная программа подвисать не будет.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 31 2006, 08:05
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Dmitriy_V @ Aug 31 2006, 00:45) *
Необходимо осуществить непрерывный вывод информации с определенной частотой.
Для этой цели использовался BitBangMode микросхемы FT232R.
Однако после вызова процедуры FT_WRITE программа зависает до полного вывода данных.


Этот вопрос меня тоже интересует. Я еще не пробовал этот режим, поэтому у меня вот такой вопрос - если управлять битами, то на переключение каждого бита пойдет отделтная посылка по USB или это будет уложено в какие то пакеты?
И как я вижу, концом работы с битами является выход из процедуры. Что при этом происходит? Программа ждет ответа от микросхемы?
Сколько времени идет переключение одним битом, и сколько, допустим, восемью?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Dmitriy_V
сообщение Aug 31 2006, 20:33
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Цитата(Alexsys @ Aug 31 2006, 11:45) *
Если я правильно понял, тут нужно функцию обмена выносить в отдельный поток. Тогда основная программа подвисать не будет.


Возможно, это сможет помочь с зависанием программы,
однако проблему непрерывной выдачи информации, к сожалению не решает.

Остается промежуток времени между окончанием обработки последнего вызова процедуры и
началом следующего. К тому же появляется проблема с определением окончания действия вызываемой процедуры.
Go to the top of the page
 
+Quote Post
Dmitriy_V
сообщение Aug 31 2006, 20:52
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Цитата
Этот вопрос меня тоже интересует. Я еще не пробовал этот режим, поэтому у меня вот такой вопрос - если управлять битами, то на переключение каждого бита пойдет отделтная посылка по USB или это будет уложено в какие то пакеты?


Вся информация посылается пакетами в буфер микросхемы. Каждый пакет состоит из байтов, номер бита в байте соответствует номеру вывода, а значение требуемому состоянию. При этом выводы микросхемы настроенные на прием данных автоматически игнорируют информацию на передачу.

Цитата
И как я вижу, концом работы с битами является выход из процедуры. Что при этом происходит? Программа ждет ответа от микросхемы?


Программа ждет окончание передачи и выводит какое количество байтов было передано.
В связи с этим и мучаюсь. По описанию я понял ,что процедура WRITE просто переписывает данные из буфера программы в буфер драйвера, который в свою очередь пересылает данные небольшими пакетами в устройство. Однако поскольку для завершения процедуры требуется вывести количество переданных байтов, то драйвер ждет окончания передачи.

Цитата
Сколько времени идет переключение одним битом, и сколько, допустим, восемью?


Данные пересылаются байтами, поэтому одинаковое. (могу ошибаться)

Сообщение отредактировал Dmitriy_V - Aug 31 2006, 20:56
Go to the top of the page
 
+Quote Post
Alexsys
сообщение Sep 1 2006, 06:44
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 8-08-06
Из: Москва
Пользователь №: 19 398



Цитата(Dmitriy_V @ Sep 1 2006, 00:33) *
Остается промежуток времени между окончанием обработки последнего вызова процедуры и
началом следующего. К тому же появляется проблема с определением окончания действия вызываемой процедуры.


Мне кажется в многозадачной ОС этот промежуток времени полностью устранить не удастся. А момент окончания процедуры можно отслеживать с помощью глобальной переменной или события.
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 1 2006, 08:00
Сообщение #7


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



у FTDI есть еще одна серьезная проблема с bit bang!!!
дело в том что между выводами бит у них бывает пауза до нескольких ms!! причем это не связано с задержками в USB данные уходят в одном пакете! и даже внутри 2 выводов бывают задержки для теста выводил в USB по 2 байта что бы получать одиночный импульс и задержка на 500 ms!
данные всегда уходили в одном USB пакете! прроверял так вот длина этого импульса часто бывала несколько ms! хотя бауд рейт стоял что бы импульс был 1 микросекунда!
Второй этап делал на максимальном баудрейте вывод как обычный UART так вот там эти два байта выдвигались всегда без задержки!!! Так что у них где то в логике пробелмы!
наблюдал это и в FT232BM и в FT232RL sad.gif

Сообщение отредактировал KRS - Sep 1 2006, 08:29
Go to the top of the page
 
+Quote Post
Dmitriy_V
сообщение Sep 1 2006, 10:11
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Цитата
Мне кажется в многозадачной ОС этот промежуток времени полностью устранить не удастся. А момент окончания процедуры можно отслеживать с помощью глобальной переменной или события.


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

Т.к. обмен между программой и устройством происходит через драйвер, то в случае, когда программа записывает данные, они должны добавляться в конец очереди на передачу. При этом переключение между отдельными задачами не влияет на равномерность вывода.

К сожалению, данная логика не работает с FT232R


Цитата(KRS @ Sep 1 2006, 12:00) *
у FTDI есть еще одна серьезная проблема с bit bang!!!
дело в том что между выводами бит у них бывает пауза до нескольких ms!! причем это не связано с задержками в USB данные уходят в одном пакете! и даже внутри 2 выводов бывают задержки для теста выводил в USB по 2 байта что бы получать одиночный импульс и задержка на 500 ms!
данные всегда уходили в одном USB пакете! прроверял так вот длина этого импульса часто бывала несколько ms! хотя бауд рейт стоял что бы импульс был 1 микросекунда!
Второй этап делал на максимальном баудрейте вывод как обычный UART так вот там эти два байта выдвигались всегда без задержки!!! Так что у них где то в логике пробелмы!
наблюдал это и в FT232BM и в FT232RL sad.gif


Спасибо, попробую посмотреть данные баги на своем устройстве.

Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался
для параллельного вывода данных.

И еще, при сбоях в выдаче сигналы #WR на выходе микросхемы тоже сбоит или выводится с постоянной частотой?

Сообщение отредактировал Dmitriy_V - Sep 1 2006, 10:11
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 1 2006, 11:32
Сообщение #9


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Dmitriy_V @ Sep 1 2006, 14:11) *
Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался
для параллельного вывода данных.


Так она тоже может работать в обычном режиме (просто там не сдвиговый регистр, а парралельный выход и от баудрейта кстати не зависит, весь пакет можно быстро считать! RXF появляется через каждые 80ns пока есть данные.
Мы использовали и FT245BM и FT245RL с атмлом!

А вот в битбанг режиме у FT245RL те же проблемы (просто сделана возможность апгрейда атмела через нее и на ней делается spi! так вот там те же задержки иногда возникают! хотя данные 100% в одной посылке по USB идут.

Я вот думал С2 интерфейс для силабсов сделать на FT232RL (там получатеся и UART и SPI можно) а вот С2 никак из за этой задержки там клоки нельзя вниз опускать на милисекунды sad.gif
Go to the top of the page
 
+Quote Post
Dmitriy_V
сообщение Sep 1 2006, 23:40
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Цитата(KRS @ Sep 1 2006, 15:32) *
Цитата(Dmitriy_V @ Sep 1 2006, 14:11) *

Интересно, в FT245R есть описанные проблемы или нет, он ведь изначально проектировался
для параллельного вывода данных.


Так она тоже может работать в обычном режиме (просто там не сдвиговый регистр, а парралельный выход и от баудрейта кстати не зависит, весь пакет можно быстро считать! RXF появляется через каждые 80ns пока есть данные.
Мы использовали и FT245BM и FT245RL с атмлом!

А вот в битбанг режиме у FT245RL те же проблемы (просто сделана возможность апгрейда атмела через нее и на ней делается spi! так вот там те же задержки иногда возникают! хотя данные 100% в одной посылке по USB идут.

Я вот думал С2 интерфейс для силабсов сделать на FT232RL (там получатеся и UART и SPI можно) а вот С2 никак из за этой задержки там клоки нельзя вниз опускать на милисекунды sad.gif


Для Bit Bang можно выводить сигналы RDn и WRn как для параллельного порта.
При этом они идут с частотой битрейта или нет?
Go to the top of the page
 
+Quote Post
Седой
сообщение Sep 3 2006, 14:41
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата
Необходимо осуществить непрерывный вывод информации с определенной частотой.
Для этой цели использовался BitBangMode микросхемы FT232R.


Если непрерывность и частота критичны, то правильное решение:

1. МК с USB ( USB на борту или внешний контроллер USB).
2. Программа в МK - буферизация данных.
3. Драйвер - буферизация данных.
PS. На FTDI и CP210x проблему не решить.


Если непрерывность и частота не критичны, то можно и на FTDI:

1. Создание отдельного потока , в котором работает в цикле FT_WRITE, с буфером данных.
2. Из основной программы передавать этому потоку данные асинхронно, не дожидаясь окончания их обработки потоком.
3. Организовать механизм асинхронных сообщений потока в основную программу о своем состоянии ( передача закончена, буфер полный, буфер пустой и т.д)
PS. Задача довольно тривиальна, если знать и уметь пользоваться механизмами межпоточного взаимодействия в Windows.
Go to the top of the page
 
+Quote Post
Dmitriy_V
сообщение Sep 4 2006, 09:54
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Цитата(Седой @ Sep 3 2006, 18:41) *
Если непрерывность и частота критичны, то правильное решение:

1. МК с USB ( USB на борту или внешний контроллер USB).
2. Программа в МK - буферизация данных.
3. Драйвер - буферизация данных.
PS. На FTDI и CP210x проблему не решить.


Какой дешевый микроконтроллер посоветуешь для этой цели?

Цитата(Седой @ Sep 3 2006, 18:41) *
Если непрерывность и частота не критичны, то можно и на FTDI:

1. Создание отдельного потока , в котором работает в цикле FT_WRITE, с буфером данных.
2. Из основной программы передавать этому потоку данные асинхронно, не дожидаясь окончания их обработки потоком.
3. Организовать механизм асинхронных сообщений потока в основную программу о своем состоянии ( передача закончена, буфер полный, буфер пустой и т.д)
PS. Задача довольно тривиальна, если знать и уметь пользоваться механизмами межпоточного взаимодействия в Windows.


Есть какие-нибудь дельные ссылки по данной тематике?
Go to the top of the page
 
+Quote Post
Седой
сообщение Sep 4 2006, 12:00
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата
Какой дешевый микроконтроллер посоветуешь для этой цели?

Сымые дешевые с USB на борту для такой задачи и большой серии - микроконтроллеры Holtek http://www.holtek.com/English/docum/uc/46xb50.htm

Еще есть PIC18 - http://www.microchip.com/ParamChartSearch/...n&pageId=74

Если брать внешний USB - то PDIUSBD12 от Филипса http://www.nxp.com/pip/PDIUSBD12.html плюс МК по желанию.

А самым оптимальным наверное взять С8051F326/7 от Silabs http://www.silabs.com/tgwWebApp/public/web...cumentation.htm


Цитата
Есть какие-нибудь дельные ссылки по данной тематике?

Советую почитать Рихтера http://club.shelek.com/download.php?id=239
Ну, а самая дельная ссылка http://msdn.microsoft.com/library/
раздел Win32 and COM Development->System Services-> DLL,Processes and Threads->SDK Documentation -> Synchonization

Сообщение отредактировал Седой - Sep 4 2006, 12:05
Go to the top of the page
 
+Quote Post
Dmitriy_V
сообщение Sep 8 2006, 10:25
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217



Цитата(Седой @ Sep 4 2006, 16:00) *
А самым оптимальным наверное взять С8051F326/7 от Silabs http://www.silabs.com/tgwWebApp/public/web...cumentation.htm


А он работает с USBXpress или нет?
Есть какие-нибудь сайты с исходниками в Keil для программирования данного микроконтроллера или лучше С8051F320 там вроде буфер чтения/записи побольше?

Еще нашел USB осциллограф на микросхеме С8051F320 Березка эл. компоненты можно ли его использовать в качестве отладочной платы?
Go to the top of the page
 
+Quote Post
Седой
сообщение Sep 8 2006, 14:34
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата
А он работает с USBXpress или нет?
Есть какие-нибудь сайты с исходниками в Keil для программирования данного микроконтроллера или лучше С8051F320 там вроде буфер чтения/записи побольше?


Работает с версии 2.4. Только что скачал версию 2.42, там есть. Исходники есть на Silabe. Все, что поставляется вместе к Kit, есть на сайте (кроме железа).

Возможно 320 и лучше, но для вашей задачи достаточно и 326/327.
Для начала работы лучше купить кит C8051F326DK http://www.silabs.com/tgwWebApp/public/web...C8051F326DK.htm
(покупали в ЭФО http://www.efo.ru/doc/Silabs/price.pl#131 117 у.е.)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:02
Рейтинг@Mail.ru


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