Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 kwi 2024, o 21:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 2 sty 2019, o 19:08 
Offline
Użytkownik

Dołączył(a): 08 lut 2014
Posty: 25
Pomógł: 0

Witam serdecznie.

Napisałem w C na Atmega32 program który wysyła dane po RS232 do PC gdy tylko dostanie znak 'a', i tu wszystko działa;
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oglądnąłem parę odcinków programowania w C++ Builder6 i postanowiłem przetwarzać dane na PC i oczywiście je wyświetlać.
Po długiej walce w końcu UC zaczął gadać z PC po RS232 i to bardzo dobrze, oto kod C++
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

No i wszystko działa dobrze gdy COM ustawiony w programie PC jest zgodny z moją przejściówką , ale używam przejściówki FT232RL i przy zmianie komputera zmienia się COM(więc nie mogę na stałe ustawić nr.COM-a) więc chcę testować porty COM aby nie trza było go wybierać. Niestety jeśli już uda mi się otworzyć port COM(oczywiście jakiś inny niż ten od AVR) to już próba odczytu funkcją "ReadFile" ( aby np sprawdzić czy dane mam od AVR) kończy się brakiem odpowiedzi programu,
Bufor read pusty i program stoi.Dodam że pokazany listing C++ jest testowy i tak się bawię, zmienię np nr COM i sprawdzam co się dzieje, Jestem nowicjuszem w tej materii, więc proszę o pomoc, jak mogę sobie z tym problemem poradzić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2019, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

steter napisał(a):
No i wszystko działa dobrze gdy COM ustawiony w programie PC jest zgodny z moją przejściówką
Port COM związany jest z hardwarem (dokładnie to sterownikami, które go obsługują). Więc nie możesz sobie otwierać innego portu niż ten przypisany do sprzętu. Jak nie masz dodatkowych fizycznych portów COM albo kolejnej przejściówki lub skonfigurowanego profilu SPP w bluetooth to nie otworzysz innego portu.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2019, o 22:01 
Offline
Użytkownik

Dołączył(a): 08 lut 2014
Posty: 25
Pomógł: 0

Zamysł miałem taki;
Mam funkcję SetCommState(hNumPort,&dcd) która zwraca TRUE po prawidłowym podłączeniu się do portu COM lub FALSE gdy nie uda się podłaczyć,
Myślę więc - w pętli While() po kolei spróbuję się podłączać do np;15-stu COM-ów, jeśli w końcu funkcja zwróci TRUE to zostanie mi wysłać znak 'a' do AVR aby za chwilę odebrać spodziewane się dane z AVR (bo tak mam napisane nadawanie w AVR) i w ten sposób odfiltruję pożądany COM. Problemem jest użycie funkcji ReadFile(hNumPort,IpBuffor_read,10,&RS_ile,0) ponieważ jeśli jej użyję(aby sprawdzić odebrane dane), a bufor odbiorczy nie jest zapełniony, to funkcja jak by czeka w nieskończoność na dane i blokuje program, nie wiem jak opuścić tą funkcję (np. po jakimś krytycznym czasie) aby kontynuować sprawdzanie portów.
Jako ciekawostkę w menadżerze urządzeń widzę aktywny COM4 (to nie moja przejściówka) i mogę się do niej podłączyć i nawet wysłać dane, a już np. próba odczytu z COM4 ,zatrzymuje program. (przypuszczam że nic nie przylatuje do bufora odbiorczego) , robiąc testy na mojej przejściówce wystarczyło że w Atmedze za komentowałem nadawanie po RS232 i program w PC zachowywał się dokładnie tak samo przy próbie użyciu funkcji ReadFile(hNumPort,IpBuffor_read,10,&RS_ile,0).

Jeszcze muszę dużo poczytać, a najlepiej namówić P.Mirka do napisania książki o C++ (ale tak łopatologicznie tłumacząc na przykładach jak AVR-y) aby można było zrozumieć :idea:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2019, o 22:19 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Popatrz na komponenty Mirka do Delphi/C++ buildera. Nakręcił do nich różne filmiki. Np. MkUsbDetector



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2019, o 08:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1148
Lokalizacja: Kraków
Pomógł: 93

Możesz spróbować odczytać z rejestru windowsa dane każdego urządzenia widzianego jako port COM. Możesz sprawdzać numery VID i PID dla każdego portu.
Prawdopodobnie dla FT232RL wartość VID to 0403 a PID to 6001. Ale to musiałbyś sobie sprawdzić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2019, o 19:22 
Offline
Użytkownik

Dołączył(a): 08 lut 2014
Posty: 25
Pomógł: 0

Szanowni koledzy, dziś w poszukiwaniu rozwiązania mojego problemu, znalazłem podobny temat i przeczytałem "Tutaj masz kody źródłowe (C#,C++,Delphi) , jak korzystać z chip-ów FTDI : http://www.ftdichip.com/Projects/CodeExamples.htm" pobrałem więc program testowy do C++ Builder wprost ze strony producenta układu z którego korzystam (że też wcześniej na to nie wpadłem), skompilowałem go i uruchomiłem, po uruchomieniu zobaczyłem przyjazny program do testowania przejściówek i to w dodatku do edycji, jest tak mały że może uda mi się go zrozumieć.:)

Tak więc dziękuję za pomoc i zainteresowaniem tematem,
Serdecznie pozdrawiam ludzi którym się chce pomagać. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO