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



Teraz jest 30 lis 2024, o 11:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 31 sty 2013, o 16:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Poczytałem tematy SunRiver`a o sterowaniu SunDuino przy pomocy RS232 i aplikacji na komputerze.

Jako, że z C++ miałem mało styczności, jednak miałem jakieś podstawy C# postanowiłem stworzyć podobny program.

Instalacja środowiska programistycznego jest już opisana w tym temacie:
http://forum.atnel.pl/topic95.html

Mam darmowy (akademicki) dostęp do pełnej wersji oprogramowania Visual Studio 2012. I właśnie w tym środowisku piszę. Jednak w naszym przypadku raczej nie będzie różnicy w pisaniu programu. W Visual Express 2010 też spokojnie można tworzyć w C#.
Właściwie nie ma dużych różnic pomiędzy C++ a C#. Zresztą każdy kto porówna kody zobaczy o co chodzi.

Nie jest to poradnik, tylko pokazanie możliwości i przykładowy program.
Jeśli ktoś się zainteresuje napisaniem własnego programu służę pomocą.

**************** ATMEGA
Zacznę od wsadu na Atmegę 16 taktowaną 8MHz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak widać kod jest prościutki, zawiera jedynie inicjalizację USART oraz odebranie danych i odesłanie ich w niezmienionej formie.
Nie będę się rozwodził co służy do czego. Kilka komentarzy jest w programie, reszta elegancko opisana w książkach P. Mirka ;)


****************************** VISUAL STUDIO
Teraz przechodzimy do okienek :)

W sposób podany TUTAJdodajemy kolejne przyciski, opisy i textboxy.
Trzeba pamiętać o dodaniu Timer oraz SerialPort z Components (jest to opisane w powyższym linku, nie różni się niczym tworzenie formy dla C# i C++).
U mnie gotowa forma wygląda tak:
Obrazek

Opiszę funkcje zaczynając od góry:
- w okienko SEND wpisuje się ciąg znaków do wysłania
- przycisk wyślij (który przy braku połączenia jest nieaktywny) wysyła podany ciąg znaków
... - można również wysłać wpisane znaki wpisując tekst oraz naciskając ENTER
- okienko podpisane jako RECEIVE pokazuje odebrane znaki (w przypadku naszego programu na atmedze będzie to echo wysłanych danych)
- checkbox +CLR każe nie dodawać kolejne znaki do odebranych, tylko przed odebraniem znaków czyści bufor odebranych danych (niżej zobaczycie jak to zrobiłem - ile programistów tyle sposobów)
- przycisk WŁĄCZ służy do wysyłania ciągu START oraz STOP do urządzenia, może to służyć do startowania jakiejś funkcji w urządzeniu (np. włącza diodę LED) --- w naszym przypadku nie robi nic, START/STOP zostanie odesłany do komputera.
- grupa RS232 Setup służy do wybrania portu COM z okienka Port: oraz do włączenia/wyłączenia komunikacji.

Główny plik w którym dokonywałem jakichkolwiek zmian wygląda tak:
Obrazek
Jak widać wszystko jest pięknie zamknięte w REGIONACH, przez co kod jest bardzo przejrzysty.

Jest może trochę chaos, ale to tylko pozory :P

Na początek trzeba wiedzieć, gdzie kryje się obsługa portu rs232. Czyli której biblioteki użyć.
Wszystkie potrzebne informacje znajdziemy dosyć dobrze opisane na stronach M$. Obsługa COM jest tutaj:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

Bibliotekę należy dodać na końcu wszystkich standardowych bibliotek w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Myśl, że reszta kodu jest na tyle dobrze opisana w komentarzach, że po prostu wkleję go tutaj:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ten kod może posłużyć spokojnie do zrobienia dowolnej aplikacji korzystającej z RS232.
- Może to być włączanie poszczególnych pinów przez wciskanie odpowiednich przycisków (które mogą zmieniać kolor zależnie od tego czy pin jest włączony czy wyłączony).
- Może to być odbieranie dowolnych danych (jak prosty woltomierz zrobiony przez SunRiver) - zresztą w C# banalnie można dane z adc wyświetlić na diagramie (biblioteka Chart). - trochę więcej pisania kodu związanego z parsowaniem danych. Wystarczy poczytać trochę tutaj: http://social.msdn.microsoft.com/Search/en-US?query=C%23%20chart&ac=8
- Można obsługiwać wychylenie serw (ramię robota? :)).

wymieniać można bez końca... wszystko rozbija się o zrozumienie mechanizmu działania połączenia przez USART (RS232).


Tutaj znajduje się pełny projekt z visual studio 2012:
https://dl.dropbox.com/u/412268/Elektronika/atnel_forum/Projekty/Visual%20Studio/rs232%20test.zip

W paczce znajduje się też gotowy program (w rs232test -> bin -> Release -> rs232 test.exe).

Na koniec dodam jeszcze krótki filmik prezentujący działanie programu:


Najważniejszą sprawę zostawiłem na koniec!
Program w tym momencie jest napisany banalnie, nie zawiera obsługi błędów. Więc jeśli coś pójdzie nie tak to się po prostu wykrzaczy!
Najprostszy przykład -> wpiszcie jako port COM taki jakiego nie macie w komputerze, wyskoczy brzydki błąd!
Dlatego zalecam zapoznanie się z TRY/CATCH. Nie jest to trudne ale wymaga kilku dodatkowych linijek kodu, który już i tak może sprawiać pewne problemy.

Pozdrawiam i miłej zabawy życzę! :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 16:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

no i brawo :)
kolego

a jak chcesz to masz tu jeszcze w C# zabawę z servem :)

topic93.html

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 16:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2012
Posty: 778
Pomógł: 9

Doman bardzo fajny projekt, ale zmień filmik na YouTube na publiczny, bo jest na prywatny :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 16:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

osa1313: Nie wiem czemu poleciał jako prywatny :P już zmienione :) dzięki :)
SurRiver: widziałem :) bardzo fajny projekt :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 17:14 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27315
Lokalizacja: Szczecin
Pomógł: 1041

sam będę musiał looknąć w te źródełka - eeeeeh tylko tego czasu zawsze brak ;)

fajny kawałek roboty ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 19:32 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

O widzisz!

Sam ostatnio mam zamiar zrobić sobie taki programik...Ale w Javie. Masz może jakieś fajne sprawdzone poradniki do komunikacji RS-232 - PC przez aplikacje w Javie? Bo na necie jest pełno ale konkretów jak zwykle brak :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2013, o 19:45 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Kolego kiclaw tutaj(http://www.gmmobile.pl/index.php?option ... a&Itemid=5) masz bardzo fajnie opisany RS232 w Javie(Środowisko Netbeans) w oparciu o biblioteki RXTX. Jak czas pozwoli to sam się nią zainteresuję...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2014, o 18:59 
Offline
Nowy

Dołączył(a): 10 lut 2014
Posty: 1
Pomógł: 0

Tworząc własny terminal chciałem wykorzystać Twój program, ale w ogóle nie reaguje na odbiór i przesył danych. Program na avr działa, sprawdzony z innym terminalem. Mam Visual Studio 2008 i Framework 3.5, czy to może być przyczyna?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2014, o 19:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

gengerenge napisał(a):
Tworząc własny terminal chciałem wykorzystać Twój program, ale w ogóle nie reaguje na odbiór i przesył danych. Program na avr działa, sprawdzony z innym terminalem. Mam Visual Studio 2008 i Framework 3.5, czy to może być przyczyna?


zobacz to:

topic5520.html

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 kwi 2017, o 14:06 
Offline
Nowy

Dołączył(a): 19 kwi 2017
Posty: 3
Pomógł: 0

Witam,
zacząłem używać klasy SerialPort i mam kłopot w takim prostym programie


Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Do drukarki dolatują obcięte dane, zawsze brakuje kilka końcowych znaków.
Ale jeśli wykomentuję zamykanie portu

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to działa dobrze. Jednak to obejście jest nie do przyjęcia.

Chyba coś nie tak z opróżnianiem bufora.

Co zrobić żeby dane nie były obcinane?

===================
Rozwiązanie: przed port.close() dałem 100ms zwłoki "czynnej", takiej z Application.DoEvents() i działa.
Wygląda na to że system operacyjny zamykał port zanim dane opuściły bufor.
Czas 20ms to za mało, 50ms wystarcza, dałem 100ms.
Może to zresztą zależeć od wielkości bufora i ilości danych.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2017, o 17:45 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO