Skocz do zawartości
trojanekk07

Przesył zmiennych po rs 485

Pomocna odpowiedź

Witam, mam do zrobienia projekt, którego składową częścią jest założenie, że jedno arduino UNO ma przesyłać dane, które zbierają podłączone do niego czujniki po i2c ( m.in. Waveshare BME280, Czujnik pyłu GP2Y1010AU0F i Grove - ICM20600+AK09918 9DoF) do drugiego Arduino UNO jako slave'a. 

Posiadam dwa takie moduły  https://abc-rc.pl/product-pol-11781-Konwerter-UART-TTL-RS485-MAX485-Arduino.html

Próbuje przeanalizować kod z tego poradnika: https://circuitdigest.com/microcontroller-projects/rs485-serial-communication-between-arduino-uno-and-arduino-nano
, jednakże nie rozumiem w jaki sposób mógłbym posiadając już dane pobrane z i2c w masterze zapisane w zmiennej przekazać przez ten protokół.

Proszę o wybaczenie, jeśli to jest strasznie banalna sprawa, mi sprawia to trudność.

Z góry dziękuję.

Udostępnij ten post


Link to post
Share on other sites

@trojanekk07 witam na forum 🙂

21 godzin temu, trojanekk07 napisał:

jednakże nie rozumiem w jaki sposób mógłbym posiadając już dane pobrane z i2c w masterze zapisane w zmiennej przekazać przez ten protokół.

Na czym dokładnie utknąłeś, udało Ci się uruchomić jakiś program? Na czym dokładnie polega problem? Nie wiesz jak to zrealizować od strony programistycznej czy nie wiesz jak podejść do zadania od strony algorytmicznej?

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za odpowiedź 🙂

Przyjmijmy, że mam już oprogramowane I podłączone w.w. czujniki. Dane przez nie zbierane są standardowo wyprowadzone do zmiennych określonych przez własne biblioteki. Połączenie modułów rs-485 rozumiem, że jak w instrukcji z linku w poście rozpoczynającym? Nie rozumiem co miałbym zmienić żeby te zmienne zostały przekazane przez ten protokół zamiast tak jak w przykładach tego typu stany potencjometru itp. 

Udostępnij ten post


Link to post
Share on other sites
16 minut temu, trojanekk07 napisał:

Dane przez nie zbierane są standardowo wyprowadzone do zmiennych określonych przez własne biblioteki.

Najprościej odczytywać w pętli te wszystkie informacji i wysyłać przez RS-485. Nie ma tutaj żadnego złotego środka. Musisz samodzielnie napisać coś co będzie pobierało odebrane dane i wysyłało je dalej. Od Ciebie zależy jak i kiedy będą wysyłane dane przez RSa. Najlepiej takie dane będzie jednak opakować w ramkę np. z bajtami startu/stopu + suma kontrolna, bo inaczej na pewno część przesłanych danych będzie fałszywa.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Widzę, że muszę jeszcze dużo zrozumieć i przestudiować. Nie rozumiem jak miałbym to opanować w ramkę i jak ma wyglądać sam sposób wysyłania po tym protokole. 

Czy byłbyś w stanie polecić jakieś linki\poradniki z których mógłbym coś wywnioskować żebym nie błądził ucząc się rzeczy, które są na tą chwilę niepotrzebne? 

Udostępnij ten post


Link to post
Share on other sites

Jeśli ma to być podłączone do istniejącej już instalacji gdzie trzeba się dopasować do poziomów napięć to masz takie scalaki: https://datasheets.maximintegrated.com/en/ds/MAX14938-MAX14939.pdf

schemat podłączenia figure 11.

a jeśli chcesz po prostu uzyskać komunikację między płytkami to użyj UARTa bezpośrednio. Nie potrzebujesz żadnego konwertera jeśli obie płytki działają na tym samym napięciu. Wystarczy połączyć masy oraz wyjście i wejście uarta z jednej płytki z wejściem i wyjściem drugiej płytki a do samej komunikacji może być biblioteka arduino. Warto przy tej okazji zajrzeć do datasheetu od atmegi.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za wypowiedzi, z racji tego, że niedługo zaczynam urlop i wyjeżdżam, będę próbował i weryfikował wszystko dopiero po powrocie.

Mam jeszcze pytanie związane z moim drugim projektem, nieco podobnym, być może błahe. 
W jego skład wchodzą: 
- Po I2C: Waveshare BME280, Grove - ICM20600+AK09918 9DoF,  DataLogger Shield V1.0 RTC DS1307 z czytnikiem kart SD ( SD akurat po przez SPI), Wyświetlacz 4x20)

Gdy jest już napisany program i wszystko jest dobrze, podłączając kolejne czujniki na linie i2c to po podłączeniu wszystkich RTC zaczyna wariować, tracić komunikacje lub wyrzucać krzaczki.

Problemem nie jest kwestia kodu, iż na test biorąc kod przykładowy dla RTC, w którym nie są nawet ujęte pozostałe czujniki to po podłączeniu do i2c wszystkich dzieje się to samo.

Czy jest to kwestia braku rezystorów podciągających na linii?

 

Udostępnij ten post


Link to post
Share on other sites
19 minut temu, trojanekk07 napisał:

Czy jest to kwestia braku rezystorów podciągających na linii?

Próbowałeś sprawdzić czy mamy to zrobić za Ciebie?

Tak przy okazji - z czego zasilasz te czujniki/wyświetlacze/cośtamjeszcze i ile to żre prądu (w amperach)?

Udostępnij ten post


Link to post
Share on other sites

Pytałem wstępnie, takie jest moje podejrzenie, czekam na przesyłkę z nimi, gdyż w mojej okolicy nie można dostać ich od ręki. 

Na tą chwilę zasilam przez USB, według danych producentów czujników nie powinno sumarycznie przekraczać 40 mA.

Udostępnij ten post


Link to post
Share on other sites
2 minuty temu, trojanekk07 napisał:

nie powinno sumarycznie przekraczać 40 mA

Mów mi wuju. Same ledy wyświetlacza według datasheeta ssą o rząd wielkości więcej.

Udostępnij ten post


Link to post
Share on other sites

Faktycznie jest to w okolicy 80mA dla ekranu, przepraszam.

Mimo to posiadam zasilacz 1,5A i nie podłączając ekranu a jedynie pozostałe czujniki problem jest ten sam, a co ciekawe dotyczy tylko RTC z shielda. Reszta czujników daje prawidłowe odczyty.

RTC po podłączeniu któregoś z kolei czujnika pod I2c pokazuje "165-165-2165 165:165:0" i wyrzuca błąd komunikat błędu na przewodach,.

Udostępnij ten post


Link to post
Share on other sites

Komunikacja przez pokazany moduł różni się od zwykłego "Serial.println(jakieśwysylanedane)" tylko tym, że gdy nadajesz musisz ustawić dodatkowo stan na pinie podłączony do DE i RE (mogą być zwarte razem). Są też układy, które automatycznie przełączają kierunek przesyłania danych i wtedy to nie różni się niczym. Musisz umieć odebrać dane, poznać które literki to cyfry, zamienić je na liczbę, przypisać do zmiennych w odbiorniku i już. Można to zrobić w formie struktury i zamiast przesyłać tekst przesłać dane binarne w formie całego bloku.

Przykład do parsowania danych tekstowych na UART jest np. tu: 

 

Przykłady ze strukturami są często używane w komunikacji radiowej z modułem NRF24l01 i zamiast print jest write, co przesyłasz z jakiej komórki pamięci i ile bajtów - poszło. 

Udostępnij ten post


Link to post
Share on other sites

Po przerwie wracam do problemu pokazywania wyżej wymienionych głupot przez DS1307.

- Po I2C: Waveshare BME280, Grove - ICM20600+AK09918 9DoF,  DataLogger Shield V1.0 RTC DS1307

Sam w sobie zegar plus jeden losowy z obu modułów działa dobrze, jednakże gdy podłączam kolejny momentalnie traci komunikacje z zegarem.
Zasilanie z zasilacza, napięcie na SDA,SCL - 5,025V oraz rezystory podciągające 4,7k na liniach. 
Sprawdzane na programie przykładowym dla zegara z różnych bibliotek z tym samym rezultatem. W jednym po podłączeniu kolejnego modułu podczas działania działa do wyłączenia okna monitoru po czym całkowicie traci komunikacje i zapamiętany czas. W reszcie po prostu od razu wyrzuca błąd o złym podłączeniu/braku komunikacji.

Bateria w zegarze włożona - 2,995V.
Sprawdzane na dwóch UNO i jednym Mega.

Udostępnij ten post


Link to post
Share on other sites

Może korzystasz z gotowych modułów Arduino, każdy ma już swoje rezystory podciągające, Ty dokładasz jeszcze swoje. Moduły jak BME280 też często są przystosowane do komunikacji na poziomie 5V, bo są dla Arduino, jak im dokładasz konwerter to pogarszasz zamiast polepszać. Ale sam musisz to stwierdzić, sprzedawcy często podają, że jest 3.3V i najczęściej to zadziała zarówno po 5V jak i na 3.3, ale nie musi. Długość połączeń też ma znaczenie, typowo I2C to jest połączenie "wewnątrzpudełkowe", kilkanaście cm.

Udostępnij ten post


Link to post
Share on other sites

Wszystko jest zasilane 5v, gdyż wszystkie wyżej wymienione moduły są do tego przystosowane. Bez rezystorów podciągających sytuacja ma się dokladnie tak samo. Zastosowałem je tylko dla sprawdzenia dlaczego występuje tylko problem, ale nic to nie polepsza. 

Udostępnij ten post


Link to post
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!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć 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...