logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sterowanie portem USB w C++ Builder do odczytu danych z matrycy CCD

marek_haj 08 Kwi 2003 15:51 3627 22
  • #1 181055
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    Witam, przejrzalem dokladnie wpisy w calym forum dotyczace oprogramowania portu USB i mimo wszysto nie znalazlem odpowiedzi na moje pytanie. :cry:
    Tak wiec chyba moge je zadac publicznie: problem jest taki ze potrzebuje mozliwosci sterowania (tzn. wysylani i odczytu ) danych z portu USB, najlepiej w predkosci 12Mb/s. Musze niestety odczytywac dane z matrycy CCD a przeslanie 600kB danych przez RS lub LPT trwa niemilosiernie dlugo. Zasanawialem sie wiec czy moze ktos z obecnych zajmowal sie czys takim jak pisanie oprogramowania kontrolujacego portu USB, najlepuiej pod Builderem C++, niemneij jednak bylbyb wdzieczny za jakiekolwiek cenne uwagi.
    Dziekuje serdecznie i pozdrawiam
    Marek
  • #2 181091
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Najpierw musisz mieć procesor który ma moduł USB. Producenci dostarczają z reguły oprócz pełnej dokumentacji jakieś przykładowe programy jak to obsłużyć.
    PS transmisja 600kB zajmuje
    COM 115kb/s ~10kB/s 60sek
    LPT 1,5Mb/s ~100kB/s 6sek
    USB 12Mb/s ~1MB/s poniżej sekundy
  • #3 181099
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    dzieki za odpowiedz
    caly problem polega na tym ze operaja sie one zwykle na jednostce 8051 a mam straszny uraz do tego procesora (4 lata elektroniki na studiach z tluczeniem procka na rozne strony). Slyszalem ze Philips podobno ma cos konkurencyjnego, co nie wymaga programowania tylko prostego wstawienia, podlaczenia kwarcu, zlacza i paru elementow biernych. Niestety nie udalo mi sie jak na razie namierzyc tego ukladu.
    Nie mnie jednak, bez wzgledu na posiadany procek (o to si ebede martwil nieco pozniej) chcialbym wiedziec jakie sa mozliwosci sterowania stransmisja po USB z poziomu WIndy.
    Dziekuje serdecznie i pozdrawiam
    Marek
  • #4 181105
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    A na jakich procesorach piszesz?
    Są układy fmy FTDI ale dużej prędkości nie da się z nich wycisnąć, nie są drogi (http://www.propox.com/mmusb232_page_pl.htm są tam gotowe moduły ale też w któreś zakładce są ceny)
    Są też układy podpinane do magistrali adresowej chyba właśnie te Philipsa ale o ile wiem Philis ich już nie produkuje, ale za to produkuje ja Nation Semiconductors w nieco ulepszonej wersji.
  • #5 181116
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    Witam ponownie
    do tej pory siedze glownie w wiekszych ATmelach typu 90AT8035 itp. Wiem ze to lamerstwo ale po bataliach z rejstrami 8051 to wydaje sie zbawieniem. Znalazlem wlasnie na stronie Philipsa dosc ciekay uklad ISP1581, wydaje sie byc sterownikiem do USB, z tego co przelotnie przejrzalem karte katalogowa mozna go podpiac pod dowolny uP po stornie odbiorczej.
    Pozostaje jednak kwestia oprogramowania tego od strony Windy 8O czyli napisaie jakiegos chrzanionego sterownika czy jak. Do LPTa znalazlem fajnego dlla na sieci, podpina sie go pod system i jest pelny dostep do portu zapomoca paru polecen.
    W przypadku softu dostarczanego z plytkami tesotywmi firmy FTDI, to orpogramowanie jest juz wysokiego poziomu, zalezy mi na bezposrednim dostepie do zasobow USB na tym polega wlasnie problem ze wszedzie spotykam tylko napis "oprogramowanie portu USB jest niezmiernie trudne dlatego sie tym nie bedziemy zajmowac" :? jednym slowem mam sobie dac siana i kupowac juz cos gotowego ? Chyba nie na tym polega zabawa w elektronike moim zdaniem
    Dzieki i pozdrawiam
    MArek
  • #6 181117
    Flora
    Poziom 12  
    Posty: 42
    Ocena: 5
    Może zainteresuje cię układ FT232BM / FT245BM firmy FTDI (http://www.ftdichip.com/). Firma ta udostępnia sterowniki do większości systemów oraz źródła programów.
  • #7 181119
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    Witam
    sprawdzalem parametry tego ukladu, wyciaga maxymalnie 1Mb/s czyli okolo 128kB/s, niestety do odczytu matrycy CCD jest to z 10 razy za wolno, musze dokonywac odczytu przynajmniej z raz na sekunde a nie co 10 sekund. :cry:
    Ale z ciakawosci zapytam sie:) Masz moze jakies doswiadczenie z tymi ukladami?? Tak osobiscie
    Pozdrawiam
    Marek
  • #8 181125
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    To wszystko zależy jak "głęboko" chcesz się komunikować z modułem USB. Wszystkie standardowe układy są przystosowane do transmisji strumienia danych (bo transmisja pojedynczych danych jest nieefektywna). Producenci z reguły dostarczają gotowe sterowniki(pamiętaj że KAŻDE urządzenie USB jest urządzeniem w systemie operacyjnym i wymaga drivera). Napisanie samemu całego kodu drivera to całkiem niezły temat na magisterską prace dyplomową. (oczywiście microsoft może Ci dostarczyć odpowiednią literature za odpowiednią cene). Nie wiem czy to gra warta świeczki.
  • #9 181135
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    :) Az takim masochista nie jestem. Wystarczylo mi kiedys walki do pisania driverow do karty pomiarowej. Zjadlo to rok czasu i skonczylo sie tym ze okazalo sie ze grosze moglem to kupic.
    Chodzi mi bardziej o wykorzystanie struktur standardowych Windy do przeproawadzania transmisji po USB. Cos jak outport(), inport() itp. Z oczywisytch wzgledow te rozkazy nie dzialaja w odniesieu do USB.
    Znalazlem jakies sterowniki na stronie http://www.ftdichip.com/FTD2XXDriver.htm
    ponoc jest to driver dll-owy do portu USB, wyglada jednak ze jest przeznaczony wybitnie do wspolpracy z ukladami tej i tylko tej firmy. :cry:
    Znajac zycie z innymi rozwiazaniami wspolraca okaze sie mierna lub zerowa.
    Pozdrawiam
    MArek
  • #10 181153
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Co do praktyki to programowałem procesory Cyphress i z tego co mi wiadomo wyrabiają one te 12Mb/s. Mają one wbudowaną kolejke FIFO i bufor na cały pakiet. Mogą przesyłać dane w trybie izochronicznym, ale osobiście miałem problemy z synchronizacją z odbieranymi danymi. Projekt miał włąśnie służyć do kamery termowizyjnej ale został przerwany.
  • #11 181163
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    Rozumiem
    wiec moze z innej strony sie wziac za ten problem. Kupic gotowa kamere internetowa, wywali z niej cala optyke bo odleglosc fokalna mi zupelnie nie odpowiada i korzystac z gotowego ukladu optycznego, nastepnie podlaczyc to wszystko do kompa i sciagnac zdjecia z gotowego ukladu. 8O
    Pozostaje jeden problem, kazdy producent dostarcza swoje wlasne oprogramowanie do sciagania fotek z kamerki. Chcialbym pominac koniecznosc korzystania z zewntetrznych programow i ladowac dane bezposrednio do swojego programu. Czy w takim przypadku jestes w stanie mi cokolwiek podpowiedziec jak sie do tego dobrac??
    Pozdrawiam
    Marek
  • #12 181169
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Do kamer na scalakach OV511 (kamera) i STV0680 (kamera z aparatem) są dostępne kody źródłowe programów pod system LINUX. Dla systemu Windows natomiast po zainstalowaniu sterowników, urządzenie "kamera" oprócz tego że jest to jest możliwość pobierania od niego danych poprzez interfejs programowy Microsoft Video (czy coś takiego).
    PS wydaje mi się że te scalaki wymagają konkretnego typu sensora do którego wymagania dotyczą sygnałów sterujących.
  • #13 181338
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    A moze widziales cos na temat matrycy LM9617? Poza pdf.em nie moge nigdzie nic znalezc na jej temat. Idealnie nadawalaby sie do mojego rozwiazania, czarnobiala, szybka, 12bitowe dane, cud miod orzeszki jednym slowem.
    A mozna wiedziec na jakich kamerach czy matrycach CCD sie bawiles??
    Pozdrawiam
    Marek
  • #14 181494
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Ja miałem zrobić tylko samą komunikacje bo reszta była już zrobiona przez kogoś w ramach pracy dyplomowej (więc nawet nie wyciągne szczegółów)
    TZN LM9617 masz taką czy masz układ do nie? A wogóle to co to jest to co Ty projektujesz? Masz już wybrane jakieś układy
  • #15 181512
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    LM9617 juz mam niestety i na razie wszystkie proby odpalenia matrycy i jej odczytania skonczyly sie maly fiaskiem.
    To co projektuje to uklad do obserwacji sekcji wiazek swiatlowodowych, potrzebne to bratu do dyplomowki, uklad ma w zalozaeniu analizowac w czasie rzecywistym spadek intensywnosci promieniowania, wyniki prezentowac na ekranie komputera itp. Sciagnalem matryce LM9617 bo wygladala na prosta w obsludze, jestem w stanie ja odczytac ale nie mam pewnosci czy robie to dobrze, poczatkowo mialem komunikacje robic na RS232, ale okazalo sie ze jest za wolno, LPT tez opada, wiec zostalo USB.
    W ostatnim akcie rozpaczy moge wykorzystac na chama kamere internetowa i dlatego sie o to pytalem. Kontrole nad matryca ma sprawososc 90AT8035
    i tak to wyglada historia i uzasadnienie moich pytan ;)
    Pozdrawiam
    Marek
  • #16 181551
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38662
    Pomógł: 3162
    Ocena: 6409
    elektryk napisał:

    LPT 1,5Mb/s ~100kB/s 6sek

    LPT w trybie ECP ma 2,5Mbps, czyli ~320kBps (czyli ok 2sek).
  • #17 181644
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Zastanawiam się jak to ma się ten pomiar dokonywać? Z jaką częstotliwością masz odczytywać matryce (jak szybkie to jest zjawisko)? A może zrobić sygnał composited video i puścić przez karte telewizyjną (po odpowienim skalibrowaniu mogłoby być nawet nieźle)?
  • #18 181894
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    Witam ponownei w piekny poranek:)
    Co do ECP to proby przekroczenia magicznego 2Mb skonczyly sie fiaskiem, wyciagnalem jedynei 1.7 - 1.8 i to w porywach wiec ciut za wolno jednakwina sprzetu to chyba nie jest (PIV, nowa plyta ASUS B533-PE, 1.5G ramu).
    W odpowiedzi na post sz. p. Elektryka. Pomiar dokonuje sie w nastepujacym trybie. Przy braku zjawiska (brak wprowazdania naprezenia do wlokien pomiarowych), zdejmuje pierwsza klatke, wyliczam rozklad jasnosci, transformate rozkladu, tworze jeszcze pare podstawowych rozkladow typu gestoscv jasnosci oraz gestosci zmian jasnoci. Nastepnie chce odczytywac obraz co sekunde (byloby super) lub czesciej (zupelnie super). nastepnie na odczytanym obrazie odkonywac tych samych operacji i w czasie rzeczywistym podawac to wszystko na ekran. Czestotliwosc odczytu ma zalezec od mocy obliczeniowej komputera, nie pisze tego pod P166 tylko raczej pod PIII i wzwyz. Matryca LM9617 ma to do siebie ze pozwala na odczyt do 30fps, a poza tym moge ja przelaczyc w tryb windowingu, kiedy odczytuje tylko i wylacznie oznaczon eokno a nie calosc matrycy co zonacza 5 -6ktorna oszczednosc czasu bo po co mam przesylac infromacje o pixelach ktorych wogole nie uzywam. Sygnal video tylko mi skomplikuje sprawe z dwoch powodow - mala rozdzielczosc (musze miec mic 640x480, wlokno swiatlowodowema jednak te tylko 125mikrometrow), poza tym nie potrzebny mi ciagly strumien danych bo nie zdaze go obrobic na biezaco, algorytm jest troszke czasochlonny (3.5milisekundy na moim PIV)
    Mam nadzieje ze sie to wyjasnilo
    Pozdrawiam serdecznie
    MArek
  • #19 182316
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    1.8MB bym uznał za wartość bardzo dobrą, w połączeniu z okienkowaniem to umożliwia zejście do kilku obrazów na sekunde. Jeśli nie nadążasz z obliczeniami to po co mieć szybką transmisje. Zawsze możesz buforować dane w zewnętrznej pamięci.
  • #20 182650
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    niby tak :)
    a tak na marginesie, na temat matrycy
    uklad jest zasilany napieciem 3.3V. Procesor dziala niestety na 5V, nie orientujesz sie moze czy taka roznica poziomow napiec wplywa jakos na dzialanie ukladu elektronicznego? Probowalem zapisac cos do EEPROMU w matrycy (po kolei do wszystkich rejestrow zeby nie bylo mozliwosci ze zapisuje do rejestry READ ONLY) ale odczytu juz nie mozna bylo przeprowadzic tzn dostawalem z magistrali same jakies losowe liczby, tak na marginesie matryca korzysta z I2C. Podniesienie napiecia do 5V na matrycy niewiele pomoglo. Dziwna sprawa jest wogole z jej adresem na szynie. W pdf.ie wyraznie napisali ze adres to 102 (0110011), tymczasem mi wykrywa ja na adresie 76 (0110100) i w gruncie rzeczy nie wiem z czym to moze byc zwiazane.
    Znasz moze jakies forum lub namiary na osobe ktora sie orientuje w czym moze byc problem?
    Problem w tym ze jezeli nie mam mozliwosi zapisu do rejestro matrycy to nie mam praktycznie dostepu do jakichkolwiek funkcji poza trybem snapshot.
    Pozdrawiam
    MArek
  • #21 182737
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Z tym adresem to dziwna sprawa, a próbujesz odczytać z tego odpowiedniego? Co do napięć to może być problem bo w dokumentacji jest napisane że do pracy musi być poniżej 3.6V ale maxymalne to 5.5V tyle że tamto może powodować szybsze zużycie. Wydaje mi się że jeśliby sygnały wyjsciowe z przetwornika podpiąć do procka to te 3V by wystarczyły jako jedynka logiczna. Natomiast jeśliby na pinach weściowycj porobić dzielniki napięcia to by też możnabyło sterować z 5V. Problem np jest z szyną danych I2C bo ona jest 2kierunkowa. Jak nadal interesuje Cię temat USB to jest procesor firmy TI TUSBxxxx który pracuje na napięcie 3.3V (jest to 51 z 8kB wewnętrznego RAM i pamięcią programu w zewnętrznym EEPROMie I2C, przepisywaną do RAM po resecie) {swoją drogą to bardzo "nie miła" kostka do zastosowań amatorskich bo obudowa TQFP i zasilanie 3.3V} Poszukam jeszcze w sieci może coś znajde.
    PS ile kosztuje taki sensor, tak rząd wielkości
  • #22 183062
    marek_haj
    Poziom 13  
    Posty: 125
    Ocena: 1
    witam ponownie
    z braku laku moge sie bawic w dwukierunkowa optoizolacje na i2C bo przeciez dwukierunkowy jest tylko sygnal sda, sclk idzie w jedna strone, wied zuzyje raptem dwa transoptory. Pasmo maja znaczne (do 100MHz wiec nie powinny mi znieksztacac zbocza sygnalu).
    Co do adresow probowalem zapisu juz chyba na wszystkich mozliwych adresach poczynajac od 2 (wiem ze to glupota bo ponizej 100 sa adresy masterow ale konczyly mi sie juz pomysly) do 254, dalej nie mozna przeciez. Zero odzewu jakiegokowiel. Podejrzewam ze sygnal zwrotny z matrycy na SDA (3.3V) jest za niski dla procka do prawidlowego rozpoznania. Dzis moze jak znajde chilwe pomiedzy robota to zmajstruje dwa transoptory i sie zobaczy czy to cos moze da.
    Co do procka, obudowa moza niemila ale jak wlutowalem procek sygnalowy DSP w obudowe z cos okolo 200 nozkami to chyba przeylbym i ten. Druga sprawa ze to 51ka i mam juz gesua skorke. Jezeli uda sie odpalic matryce i pracowac w trybie okienkowym, w zupelnosci zadowloe sie czyms tak prymitywynym jak ten uklad z fdchips. Wczoraj posiedzialem troche z olowkiem i kartka papieru i jak uda sie wlaczyc tryb okienkowy moge spokojnie bawic sie na poziomie 1Mb/s.
    Aha co do ceny LM9617, wysyla to jedynei jedna firma w Niemczech, za cene okolo 67€, ale dokladnie musialbym znalezc adres i Ci podac jak chcesz bo juz tam dawno nie zagladalem. Paczka przyszla fakt ze pozno ale ldanie zapakowana i w folii antystaycznej. Wiec nazekac nie mozna. Gdyby to jeszcze zaczelo mi chodzic to juz wogole bylbym happy.
    Pozdrawiam serdecznie i dziekuje za posty ´
    MArek
  • #23 454389
    fantom
    Poziom 31  
    Posty: 1649
    Pomógł: 108
    Ocena: 41
    W kilku postach juz o tym pisalem wiec pisze jeszcze raz.Procesor Cypress CY7C68013 z usb 2.0.Niestety dla ciebie jest to '51 ale przeciez mozna napisac kod w C i nie bedziesz sie nawet tykal rejstrow.Aby sie do tego dostac z poziomu windy najprosciej jest zrobic tak aby twoje urzadzenie emulowalo urzadzenie interfejsu HID i wowczas w WinAPI sa gotowe funkcje do oslugi takiego urzadzeniu z poziomu uzytkownika korzystajace ze sterownika urzadzen HID.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu sterowania portem USB w środowisku C++ Builder w celu szybkiego odczytu danych z matrycy CCD, szczególnie modelu LM9617, wykorzystywanej do analizy wiązek światłowodowych. Autor potrzebuje transmisji danych z prędkością około 12 Mb/s, gdyż tradycyjne interfejsy RS232 i LPT są zbyt wolne do przesyłania około 600 kB danych na sekundę. Poruszono kwestie wyboru odpowiedniego procesora z modułem USB, wskazując na układy takie jak Philips ISP1581, FTDI FT232BM/FT245BM oraz Cypress CY7C68013 USB 2.0. Zwrócono uwagę na trudności w pisaniu własnych sterowników USB pod Windows, sugerując wykorzystanie gotowych sterowników i emulację urządzenia HID dla łatwiejszej obsługi. Omówiono także problemy z kompatybilnością napięć (3.3V vs 5V) i komunikacją I2C z matrycą LM9617, w tym niezgodności adresów i konieczność stosowania optoizolacji. Alternatywnie rozważano użycie gotowej kamery internetowej z układami OV511 i STV0680, które mają dostępne kody źródłowe pod Linux oraz interfejs Microsoft Video pod Windows. Wskazano, że transmisja USB jest zoptymalizowana do przesyłania strumieni danych, a pisanie własnych sterowników to skomplikowane zadanie. Ostatecznie rekomendowano wykorzystanie procesora Cypress CY7C68013 z emulacją HID oraz gotowych sterowników, co umożliwia łatwą integrację z aplikacją Windows bez konieczności pisania niskopoziomowego kodu.
Wygenerowane przez model językowy.
REKLAMA