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:
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:
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: Jak widać wszystko jest pięknie zamknięte w REGIONACH, przez co kod jest bardzo przejrzysty.
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).
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.
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
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?
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?
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.
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