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



Teraz jest 3 sty 2025, o 12:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 8 mar 2016, o 08:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2014
Posty: 243
Pomógł: 9

Witam

Jakiś czas temu popełniłem sterownik do mojej kotłowni oparty na platformie Arduino Mega. Wymyśliłem sobie, żeby nie bawić się w obsługę z przycisków i tworzenia menu wielopoziomowego, że zamiast tego dołożę Ethernet Shield napiszę aplikację na Windowsa i będę parametry ustawiał z komputera. Działa mi to bez problemu. Wykorzystałem rozwiązanie z Bluebooka o komunikacji UDP i parsowaniu danych. Dla przykładu jak chcę ustawić bieżący czas w module RTC to wysyłam komendę 11^2016^03^08^08^30, jak chcę ustawić powiedzmy jakieś inne parametry to np wysyłam komendę 12^5^10^20^ i to działa poprawnie. Podobnie rozwiązałem sprawę odczytu parametrów. Kiedy na komputerze chcę odczytać bieżący czas z modułu RTC w sterowniku to wysyłam komendę 21^, wówczas sterownik parsuje to jako komendę odczytu czasu i wysyła pakiet zwrotny o przykładowo następującej treści 21^2016^03^08^08^30.

Teraz postanowiłem sobie zrobić "powtarzacz" na biurko. Czyli moduł arduino uno z lcd tak by mi pokazywał aktualne parametry sterownika. Jak zamontuję ethernet shield nie ma problemu i wszystko działa. Ale ja chciałem iść krok dalej i zrobić sobie bardziej mobilną wersję wykorzystującą moduł Atnel-WiFi z płytką Air i tu pojawił się problem. Udało mi się poprawnie skonfigurować moduł WiFi. Udaje mi się wysyłać komendy RS`em, które docierają do sterownika. Komendy zwrotne są odbierane przez moduł WiFi i przekazywane do arduino i tu pojawia się problem prawdopodobnie albo ze specyfikacją arduino, albo czegoś nie wiem na temat jego konfiguracji. Otóż arduino to co odbiera z RS232 na linii RX jakoby przepisuje na linię TX. Rozumiem, że jak chcę korzystać z szeregowego monitora to takie coś musi być. To co moduł odbierze to przepisze na TX tak by komputer mógł odczytać, ale jak nie korzystam z tego to efekt jest niepożądany. Dla przykładu chcę odczytać czas. Powtarzacz wysyła komendę 21^. Sterownik odpowiada 21^2016^03^08^08^30. Powtarzacz odbiera dane od sterownika i przepisuje je na linię TX i tym samym do sterownika ponownie dociera 21^2016^03^08^08^30 ten widzi początek 21^ i z automatu odpisuje czas z modułu RTC do powtarzacza, ten przepisuje i komunikacja mi się zapętla...

Stąd moje pytanie czy ktoś wie jak rozwiązać problem komunikacji szeregowej w arduino?

_________________
http://www.ate-zbaszyn.eu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 08:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

Jeśli chcesz podejrzeć na serial monitor to, co odbierasz z wifi, to musisz utworzyć drugi rs(uart) jako softserial i tam podpiąć przejściówkę do kompa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 09:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

Nie wiem, czy dobrze zrozumiałem Twój problem, ale rozumiem, że chcesz odpytywać jeden sterownik po jednym RSie przez dwa różne urządzenia.
Ja bym spróbował dodać coś na zasadzie adresu urządzenia odpytującego. Np arduino UNO ma dar powiedzmy 02 a MEGA 01.
I teraz wysyłasz zapytanie z 02 np #02#21^ lub #01#21^ a sterownik odpowiednio odpowida z takim samym początkiem. Sterowniki odbierają wszystko ale reagują tylko na swoje kawałki.

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 09:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2014
Posty: 243
Pomógł: 9

Panowie żebyśmy się dobrze zrozumieli. Ja chcę mieć komunikację typowo UDP. Moduł Atnel-WiFi jest jak gdyby interfejsem RS232-Ethernet.
Sterownik nie chcę odpytywać po RS tylko po udp. Sterownik ma kartę ethernet i on czeka aż wleci jakiś pakiet. Jak nadejdzie to jest od razu traktowany funkcją:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak odpowiednio zinterpretuje nagłówek to podejmuje odpowiednie czynności i jeśli np zaczyna się 21^ to odsyła również po udp odpowiedź z aktualnym czasem sterownika np 21^2016^03^08^09^25^30^. W powtarzaczu również czeka podobna funkcja parsująca, która stwierdza na podstawie początku do pierwszego tokena, że przyleciał czas a nie odczyt temperatur czy aktualne nastawy. Tylko sprawa wygląda tak, że sterownik odpowiada po udp, leci to do wifi, ale z wifi to już nie jest udp tylko RS232. W powtarzaczu nie ma już:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


gdzie do odbioru stringa używam void serialEvent() {...}

Problemem jest to, że co mi wypluje WiFi na RX arduino to samo pojawia się na TX i WiFi odsyła ponownie to co otrzymał. Moduł WiFi jest sprawny to dziwne zachowanie arduino i podejrzewam, że spowodowane jest funkcjonalnością szeregowego monitora, który działa tak a nie inaczej. Myślałem tylko, że jest to problem do przeskoczenia. Ewentualnie pozostanie mi przeprogramować sterownik tak by innymi tokenami odpytywać a zupełnie innymi odpowiadać, ale problem gdzieś tam jednak pozostanie.

_________________
http://www.ate-zbaszyn.eu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 11:52 
Offline
Użytkownik

Dołączył(a): 20 lip 2015
Posty: 83
Pomógł: 6

Sprawdź może poprzez putty czy ten problem występuje, ewentualnie może masz zwarcie pomiędzy RX i TX?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 11:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

Zapodaj schemat podłączenia arduino z wifi i szeregowego monitora. Coś wprowadza echo albo coś jest źle podłączone. Dlaczego tak wnioskuję? Ano dlatego, że arduino uno do serial monitora używa pinów 0 i 1. Zakładam, że do wifi użyłeś również tych pinów. Tu właśnie może być problem.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 13:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2014
Posty: 243
Pomógł: 9

@icer_cmg - tak mam właśnie podpięte. Zatem jedynym rozwiązaniem będzie stworzenie programowego RS232 bo uno ma tylko ten jeden sprzętowy wykorzystywany także przez monitor.

Jak wrócę z pracy to sprawdzę to rozwiązanie.

_________________
http://www.ate-zbaszyn.eu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2016, o 21:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2014
Posty: 243
Pomógł: 9

Już po testach. Działa wyśmienicie. Rozwiązaniem okazało się użycie programowej emulacji portu RS232 SoftwareSerial() . Sprzętowo się zapętlało ze względu na szeregowy monitor.

Jak zawsze można na Was liczyć! Dzięki :)

_________________
http://www.ate-zbaszyn.eu



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

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