Skocz do zawartości

[Programowanie] Port szeregowy i interfejs USART czyli komunikacja mikrokontrolera z komputerem


GAndaLF

Pomocna odpowiedź

Przeczytałem cały Twój artykuł i muszę powiedzieć, że tytuł: [Programowanie] Port szeregowy i interfejs USART czyli komunikacja mikrokontrolera z komputerem. nie odzwierciedla głównego tematu tego artykułu, którym jest:

Jednak głównym tematem będzie stworzenie aplikacji na komputer PC mogącej za pomocą portu szeregowego komunikować się z mikrokontrolerem wykorzystującym właśnie USART

Dopisek [Programowanie] też tutaj niczego nie zmienia, a tylko wprowadza zamieszanie 😉

Dodatkowo, jeżeli chodzi już o samo Visual Studio, to warto zwrócić uwagę na to, że programy w nim napisane nie są w pełni przenoszalne na inne komputery, które nie mają wgranego środowiska Visual Studio, ani frameworków. Nawet, gdy dołączysz potrzebne biblioteki dynamiczne .dll do Twojego programu.

Z drugiej jednak strony artykuł ten może spowodować, że więcej osób będzie mogła zacząć przygodę z C++ na PC 🙂

Dzięki!

Link do komentarza
Share on other sites

Początkowo myślałem, żeby artykuł obejmował więcej zagadnień. Ale w trakcie pisania zdałem sobie sprawę, że lepiej będzie go podzielić. W aktualnej wersji rzeczywiście jest to głównie artykuł o Visual Studio i przykładowym programie wykorzystującym Serial Port. A to dlatego, że jednak dużo osób może nie znać tego środowiska. Wyjaśnienia, które starałem się skracać jak tylko mogłem, i tak rozrosły się do sporych rozmiarów. Ale to chyba dobrze, bo jak ktoś umie programować to mu ten artykuł tak naprawdę nie potrzebny. Może jak dojdzie druga część to tytuł nie będzie Cię tak kuł w oczy.

Link do komentarza
Share on other sites

Tzn. ja właśnie wróciłem z pracy i mogę być trochę teges.. niedysponowany, ale mnie szczerze zdezorientował już sam wstęp ?

Jednak głównym tematem będzie stworzenie aplikacji na komputer PC mogącej za pomocą portu szeregowego komunikować się z mikrokontrolerem wykorzystującym właśnie USART. Takie rozwiązanie umożliwia nie tylko przesyłanie danych za pomocą RS232 ale również przez USB i konwerter FT232, bluetooth, IrDA i inne interfejsy używające wirtualnego portu COM.

Tzn. przykład jest na klasycznym Hardwer RS232, czy na przelotce USB<>RS232 ?

Dla czego pytam ?

Otóż akurat dzisiaj dotarła wreszcie do mnie płytka PICDuino, czy ARDUINO na procesorze PIC18F2550, który to właśnie ma w/na sobie 2 możliwości komunikacji:

A. klasyczne rozwiązanie z ARDUINO, czyli konwerter USB<>RS232 na FT232.

B. Sprzętowy port USB1.1/2.0 wbudowany w procesor PIC18F2550.

Na początek fajnie jak bym umiał sobie napisać aplikację na konwerterek USB<>RS232, ale tak naprawdę to problem w moim przypadku jest taki że brak artykułów, łopatologicznie tłumaczących jak obsłużyć sobie czyste USB niż RS232.

Cóż RS232 to raczej gatunek, który Darwinowsko mówiąc uchował się jeszcze jako tako tylko w stacjonarnych PC-teach, w laptopach już go nie ma, a jak jest to w postaci kart PCMICA, które po rozgryzieniu Chipu który w nich siedzi i tak okazują się konwerterami USB<>RS232.

Ale art. fajny.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Testowałem ten program na FT232RL ale na kablu USB<>RS spokojnie też powinien działać. Program obsługuje to co system operacyjny widzi jako COM. Czyli wszystkie wirtualne porty obsługuje się dokładnie tak samo jak RSa.

Natomiast jeśli chodzi o obsługę czystego interfejsu USB z tego co wiem, nie ma na platformie .NET dedykowanych bibliotek microsoftu. Trzeba używać Win32 API do którego nie ma łopatologicznych tutoriali ponieważ jego obsługa sama w sobie jest trudna i trzeba spędzić dość dużo czasu żeby to zrozumieć. Mi na przykład jeszcze to się nie udało. Alternatywą są open sourcowe projekty biblioteki do obsługi USB jak naprzykład sharpusblib (http://www.icsharpcode.net/opensource/sharpusblib/) Niestety w tym wypadku też nie jestem w stanie pomóc bo nie mam doświadczenia. Z tego co się orientuje w innych popularnych środowiskach np w Javie problem braku odpowiednich bibliotek do obsługi USB też występuje.

Link do komentarza
Share on other sites

BlackJakc! Napisanie własnego stosu obsługi USB (nawet jak masz sprzętowe wejście w procku) to wyższa szkoła jazdy. Nawet zajęcie się tym tematem od strony komputera i aplikacji na nim nie jest rzeczą najłatwiejszą. a na pewno wykracza poza ramy "podstaw programowania".

Może sam RS232 w komputerach odszedł już do lamusa. Ale w dziedzinie mikroprocesorów dzięki Uartowi i łatwości jego oprogramowania i sposobu podłączenia żył będzie jeszcze długo i dobrze 🙂 A do komunikacji z komputerem na szczęście wymyślili takie przejściówki jak FT232 i podobne - niech bogi sprzyjają twórcom ich dzieciom i wnukom 🙂 A krowy ich opływają w mleko... 😋

Odnośnie samego tutka i wybranego języka programowego. No cóż. Zacznę od tego. GAndaLF za rozwinięcie tematu w części drugiej. Tyczącego się już samej komunikacji i sposobów jej budowania (ramki danych komunikacja od strony procesora - odbiór interpretacja i wysłanie danych). Wydrukuję Twoje zdjęcie A3 oprawię w ramki oświetlę w koło migającymi diodkami i co dzień rano zapalając kadzidełko będę się modlił do niego 😉

Wybór środowiska no cóż do najtrafniejszych nie należy. Jak już wspomniał "przedmówca" nie jest to najbardziej przenośnie środowisko z możliwych.

Już lepiej było by opierać przykłady o leciwe Delphi... Mimo iż większość na słowo Delphi część fanów C i pochodnych robi łeee. To atutem tego środowiska jest łatwość w nim pisania dla początkujących. Komponenty do obsługi seriala są wręcz banalne i łatwe do zrozumienia. Oczywiście nie upieram się przy Delphi. Ale argumentem może być fakt iż mimo że to język już leciwy to mimo to powstaje w nim do dziś sporo fajnych aplikacji.

Oczywiście jak nie Delphi to pomyśl nad jakimś bardziej standardowym "C".

Nie mniej wielkie dzięki za zajęcie się tym tematem. Z niecierpliwością będę czekał na ciąg dalszy i rezerwuję już arkusz papieru na wydruk zdjęcia 😉

Link do komentarza
Share on other sites

Moim zdaniem wasza awersja do Visual Studio jest trochę przesadzona. Owszem nie jest w pełni przenaszalne (?) pomiędzy komputerami. Instalacja .NET Framework jednak w dużej mierze rozwiązuje ten problem. Wybrałem to środowisko głównie ze względu na łatwość pisania programu i doskonały dostęp do dokumentacji i tutoriali. Ten język jest w internecie opisany po prostu doskonale i to na każdym poziomie zaawansowania. Dlatego właśnie jest moim zdaniem dobry dla początkujących. Poza tym programiści .NET są poszukiwani przez wiele firm co jest kolejnym powodem dla którego dobrze się nim zainteresować.

W moich oczach jedyną sensowną alternatywą mogła by być Java, która również posiada całkiem sporo pomocy w internecie, jest popularna wśród profesjonalnych programistów a do tego odpada problem przenośności kodu.

Link do komentarza
Share on other sites

BlackJakc! Napisanie własnego stosu obsługi USB (nawet jak masz sprzętowe wejście w procku) to wyższa szkoła jazdy. Nawet zajęcie się tym tematem od strony komputera i aplikacji na nim nie jest rzeczą najłatwiejszą. a na pewno wykracza poza ramy "podstaw programowania".

Tzn. ja w temat nie zdążyłem się jeszcze wdrążyć ten PIC18Fxx to właściwie mój pierwszy uC z USB, jaki wylądował mi na stole, ale jestem średnim optymistom i mam nadzieje że Microchip na swojej stronie ma jakiś sensowny PDF. czy nawet bibliotekę do tego.

A ja mam taką naturę wyssaną w dzieciństwie z BASICA na C64, że jak jakiś sprzet w procku mam, to jednak chciałbym go wykorzystać.

Co prawda dzisiaj wielu sie śmieje że tam metody programowania z czasów ATRAI, C64 itd. to dziś przeżytek jak dopłacając 2 zł można mieć proca z 72 MIPSami, ale już widziałem jak jednemu opadała szczena jak zobaczył działający w real time silnik Dooo-podobny na C64.

Oczywiście to kosztuje duzo pracy, ale jeden to zrobi, udostępni, to drugi spróbuje na tym też podziałać, jemu się uda znajdzie się dwóch następnych i tak z czasem, powstają coraz lepsze narzędzia i biblioteki.

EDIT.

Chyba nie jest tak źle, już znalazłem notę jak zrobić aby mój PIC18 był widziany jako FT232, czyli wirtualny COM na USB.

http://ww1.microchip.com/downloads/en/AppNotes/00956b.pdf

lub fremework

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044

Więc jest nadzieja że nawet ten tutorial pozwoli to ruszyć ?

Link do komentarza
Share on other sites

Masz rację, już zedytowałem. Na szybko kopiowałem schemat z wydawałoby się pewnej strony ale rzeczywiście takie podłączenie jest bez sensu. Poprawiłem obrazek na schemat z datasheeta.

Generalnie jest dużo układów do konwersji napięć na RS232 i różne wersje mają inne schematy połączeń więc nie wiem czy obecność tego schematu jest na pewno potrzebna bo zawsze i tak lepiej sprawdzić w datasheecie posiadanego scalaka.

Link do komentarza
Share on other sites

Kiedyś próbowałem się skomunikować i natrafiłem na coś takiego:

http://www.winapi.org/index.php?option=com_content&task=view&id=49&Itemid=30

oraz poszukałem na MSDN i np.:

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

W każdym razie: jest to dość paskudne, ale jak już będziecie mieć działajacy kod, to nie będzie problemu. WinAPI działa w każdym środowisku pod Windowsem, ja pisałem w Borland CBuilder.

Inna sprawa, że taka aplikacja potrafi zarżnąć komputer - Core2Duo pozwala na odbieranie góra kilku kB/s i to z bólami. Java będzie pewnie jeszcze wolniejsza. Pewnie pisząc w czymś lepiej optymalizujacym (np. VS) program będzie działać szybciej, ale dużej różnicy nie przewiduję, bo problemem jest pośrednictwo systemu.

Link do komentarza
Share on other sites

A po co drapać si po głowie, rozgryzać WinApi (mowa tu o początkach programującego), co może skutecznie zniechęcić. Jak można zastosować dedykowane wtyczki, które odwalają cała robotę za programistę. A aby je oprogramować wystarczy dosłownie kilka linijek kodu. Takie wtyczki są chyba na większość języków programowania.

Jak dla mnie zbędne komplikowanie sobie życia. Lepiej skupić się na samej organizacji transmisji, niż marnować cały zapał na rozgrzanie samej sztuce obsługi portu.

Link do komentarza
Share on other sites

Dedykowane wtyczki mają to do siebie, że czasami nie działają (np. te do Borlanda to jakaś kpina).

Z innych rzeczy: warto czasami w systemie w ustawieniach portu pogrzebać i m.in. zmienić rozmiar bufora na większy jeśli wysyłamy duże pakiety danych (nawet rzadko).

Link do komentarza
Share on other sites

Inna sprawa, że taka aplikacja potrafi zarżnąć komputer - Core2Duo pozwala na odbieranie góra kilku kB/s i to z bólami.

Tak się przeważnie dzieje, jak aplikacja nie korzysta z dobrodziejstw IRQ, poświęcając 60% i więcej swojego czasu na sprawdzanie programowe znaczników.

Dla tego tak lubiłem DOSa i Turbo Pascala, pisało sie w tym topornie, ale miało się pełną władzę nad tym co robi program i jak. choć z tego co wiem to w językach obiektowych, znaczy się Visual, też można tam jakoś się odwoływać bezpośrednio do portów I/O.

Wiem więcej roboty, ale USART w PC, akurat jest na tyle prosty, że jak komuś zależy i ma jeszcze w kompie starego poczciwego RSa, to gra może być warta świeczki.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.