Programowanie mikroprocesorów ( mikrokontrolerów )

Komunikacja RS232 z mikrokontrolerem

Aby komunikowac się aplikacją napisaną w Visual Studio lub dowolnym innym środowisku programistycznym z mikrokontrolerem należy wybrać sobie dogodny protokół komunikacyjny. Ja wybrałem na początek stary sprawdzony protokół RS232 wykorzystując przejściówkę USB na RS232 do połączenia się z układem mikrokontrolera. Aby nawiązać taką komunikacje z układem mikrokontrolera należy oprogramować interface obsługi portu RS232 w naszej aplikacji co postaram się przedstawić poniżej.

Pierwszym krokiem jest dodanie komponentu obsługi portu szeregowego do naszej aplikacji. Komponent który nas interesuje o nazwie "Serial Port" znajdziemy po prawej stronie w zasobniku Toolbox. Wyciągamy go w pole naszego Form tak jak zwykły button. Zostanie on dodany poniżej naszego Forma.

 Po kliknięciu na dodany komponent po prawej stronie w oknie "Properties" pojawią nam się opcje oraz parametry pracy jakie możemy skonfigurować sobie wstępnie do pracy z naszym układem mikroprocesorowym (rysunek poniżej). W parametrach tych znajdziemy między innymi (opisze tylko te przezemnie używane):

  • Name - możemy nadać sobie dowolną nazwę tak żęby było nam wygodniej używać jej później w aplikacji
  • Modifiers - modyfikator klasy określający czy parametr ten będzie miał właściwości Private czy Public (dostępność)
  • BaudRate - prędkość transmisji
  • DataBits - ilość bitów danych
  • DiscardNull - ignorowanie znaku Null w transmisji
  • DTREnable - Określenie czy linia DTR złacza RS ma być aktywna czy nie aktywna
  • Handshake - Określenie sposobu transmisji czy ma wymagać potwierdzenia za pomocą protokołu Handshake
  • Parity - Określenie ilości bitów parzystości
  • PortName - Nazwa portu w systemie windows do którego komponent aplikacji będzie się odwoływał i za pomocą którego będzie próbował się komunikować. nazwę tą mżna znaleźć w "Device MAnager" (menadzer urządzeń) w systemie windows jak na rysunku poniżej.
  • ReadBufferSize - określenie wielkości bufora odczytu danych
  • ReadTimeout - Określenie maksymalnego czasu odczytu ramki
  • RTSEnabled - Określenie czy linia RTS portu RS jest aktywna czy nieaktywna
  • StopBits - określenie ilości bitów stopu
  • WriteBufferSize - Określenie wielkości bufora danych wysyłanych
  • WriteTimeout - Określenie maksymalnego czasu wysyłania ramki

 Po określeniu parametrów transmisji możemy przejsć do kolejnego etapu programowania. Powyższe parametry można sparametryzowac tak żęby można je było zmieniać z poziomu aplikacji na zasadzie wybory z listy lub zaznaczenia odpowiednich opcji przy doborze prędkości transmisji lub nazwy portu jednak tą funkcjonalność opiszę przy innej okazji, tutaj postaram się przedstawić najprostrzy sposó uruchomienia trasmisji przez port szeregowy.

Dodajmy do naszego Forma jakiś button. za pomocą tego buttona będziemy otwierać port aktywując go i przygotowując do wysyłania i dobierania danych. Aby to uczynić należy kliknąć dwukrotnie na dodany button i w akcji button1_Click dodać komendę otwarcia naszego wcześniej dodanego portu. Poniżej przedstawiono komendę otwierajacą port. ( serialPort1.Open(); ) oczywiście jeśli zmieniliśmy nazwę portu na swoją komenda będzie wyglądała nieco inaczej zamiast serialPort1 będziemy musieli wpisać nazwę naszego komponentu do obsługi RS który wcześniej dodaliśmy.

Powyższy sposób pozwoli nam otworzyć port komunikacyjny jednak nie daje nam żadnej odpowiedzi czy wszystko przebiegło pomyślnie. Ponieważ w komputerze aplikacje mogą korzystać z portów szeregowych a i mogliśmy popełnić pomyłkę w nazwie portu systemowego wpisanego w naszą aplikacje tak więc warto pokusić się o kilka doatkowych linijek kodu przedstawionych poniżej umożliwiających nam diagnostykę czy otwierany przez nas port został otwarty proawidłowo. Poniżej przedstawiam bardziej skomplikowany sposób otwierania portu buttonem1.

w pierwszej linijce kodu "if (!serialPort1.IsOpen)" sprawdzamy czy port COM któy chcemy otworzyć nie jest juz twarty przez inną aplikacje lub czy nie jest używany. Jeśli jest warnek w nawiasie nie jest spełniony i aplikacja przechodzi do sekcji else warunku "MessageBox.Show("port jest w użyciu");" wyświetlając nam na ekranie boxa z informacja że port który chcieliśmy otworzyć jest używany. Jeśli port jest nieużywany i zamknięty wówczas warunek IF jest spełniony i aplikacja przechodzi do wykonywania poleceń zawartych w tym warunku a mianowicie do komendy "serialPort1.Open();" która otwiera nasz port komunikacyjny następnie wyświetla boxa z informacją że port został otwary i w kolejnej linijce kodu "button1.Enabled = false;" deaktywuje przycisk 1 który właśnie kliknęliśmy aby zapobiec ponownemu kliknięciu.

Wynik prawidłowego otwarcia portu jest następujący jak na rysunku poniżej. Przedstawiono tu box który wyskoczy w przypadku prawidłowego otwarcia portu.

 

i pokazano zdeaktywowany buton 1 po otwarciu portu. Nie da się go kliknąć ponownie.

Gdy otwarcie portu się nie powiedziedzie ujrzymy następujący bo informacyjny. Istnieje wówczas podejrzenie iż albo port który chcemy otworzyć jest już otwarty przez inną aplikację albo wpisaliśmy w konfiguracji komponentu do obsługi portu szeregowego nieprawidłową nazwę portu komunikacyjnego systemu windows.

 

C.D.N -----> Wybór portu z rozwijanej listy, wysyłanie danych do mikrokotrolera oraz odbieranie danych z mikrokontrolera

 

 

 

 





 
Wszelkie prawa zastrzeżone! Kopiowanie, powielanie i wykorzystywanie zdjęć, treści oraz jej fragmentów bez zgody autora zabronione.
© mikroprocesory.info.pl@gmail.com 2013.