Skocz do zawartości

MAX485 i Raspberry Pi


cyryllo

Pomocna odpowiedź

Kupiłem układ MAX485, który planowałem podpiąć do maliny pod uart. Powinienem był zakupić układ MAX3485 na 3,3v. Wiem że można wykorzystać MAX485 zmniejszając z 5V na 3,3V tylko właśnie nie wiem jak to zrobić tzn jak to podłączyć. mam diody zenera i rezystory.

Link do komentarza
Share on other sites

Hm, trudna odpowiedź.

Dlaczego? Bo zdania są podzielone. Większość tutoriali do Maliny twierdzi, że piny I/O tego komputerka nie są odporne na 5V na wejściu i do pewnego czasu nie miałem powodów, by w to nie wierzyć. Jest to założenie bezpieczniejsze i jeśli chcesz być absolutnie z tym zgodny to:

- zasilasz swój MAX485 z 5V bo inaczej nie można - producent nie przewiduje dla tego układu zasilania innego niż 5V

- wszystkie 3 linie w kierunku od Maliny do MAXa niczego nie potrzebują po drodze, bo stan wysoki Maliny to 3V a minimalnie MAX potrzebuje 2V

- odbiornik MAXa czyli jedyne wejście do Maliny puszczasz przez dwa oporniki robiące dzielnik (nie wierzę, że to piszę) np. 2k/3k zmniejszający napięcie do bezpiecznych 3V ale jest to rozwiązanie najprostsze i najgorsze. Lepszym rozwiązaniem jest chociaż jedna bramka (bufor) zmieniająca standard 5V na 3V.

Jednak niedawno przeczytałem to:

http://tansi.info/rp/interfacing5v.html

i zmierzyłem to samo co autor. Rzeczywiście interfejs I/O Maliny nie ma diod zabezpieczających od linii I/O do zasilania 3.3V a to wskazuje na odporność na 5V. Nadal napięcia wyjściowe są oczywiście 3V ale sprzężenie do układu zasilanego z 5V powinno być bezbolesne - jak na rysunku: wystarczy szeregowy opornik 1k dla bezpieczeństwa .

Co wybierasz? 😐

Link do komentarza
Share on other sites

Użyłem jak pisałeś. Teraz kwestia połączenia bo niby coś wysyła i nie odbiera jak ustawić komunikacje kierunki za pomocą pinów Gdzieś czytałem że można użyć układu 555 do sterowania kierunkiem transmisji.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Chce komunikować się z urządzenie poprzez rs485 mam złącze usb<>rs485 i na nim wszystko działa ale chciał bym spróbować połączyć się za pomocą pinów z maliny uart i odczytywać rejestry z płytki. Kupiłem układ max485 ale najwidoczniej nie wiem jak go podłączyć do maliny aby była komunikacja.

Link do komentarza
Share on other sites

To po pierwsze napisz, czy używasz tego interfejsu w formie 2- czy 4-drutowej (+masa rzecz jasna) czyli half- czy full-dupleks.

http://elektronikab2b.pl/technika/3404-czym-jest-rs-485-#.UpEuydJWzTo

W tej pierwszej masz tylko jedną wspólną dla wszystkich węzłów magistralę szeregową na której wszyscy maja prawo nadawać i odbierać. Ta wersja wymaga sterowania nadajnikiem tak, by włączać go tylko wtedy gdy Twój węzeł nadaje. Przez pozostały czas nadajnik musi pozostawać wyłączony, by ktoś inny mógł nadawać. Musisz zatem - jako minimum - sterować linią DE: stan wysoki załącza nadajnik. Przed wysłaniem czegokolwiek np. przed początkiem pierwszego wysyłanego znaku ew. ramki danych musisz zrobić DE=1 a po zakończeniu wysyłania ostatniego znaku DE=0. Odbiornik (sterowany sygnałem /RE) jest rzeczą wtórną. Może być cały czas włączony (i wtedy odbierasz to co sam nadajesz i od razu możesz to wyrzucać do kosza) albo możesz go włączać naprzemiennie z nadajnikiem. Wtedy najprościej zewrzeć DE z /RE i wtedy stanem wysokim nadajesz a niskim odbierasz.

W wersji 4-drutowej nadajnik możesz mieć zawsze włączony i wtedy jego dwa druty są przeznaczone wyłącznie dla niego a reszta węzłów tylko tam słucha. Twój odbiornik z kolei - także zawsze włączony - słucha z innych 2 drutów to co wysyłają nadajniki pozostałych węzłów.

Widzisz różnicę?

To jak masz?

Jeżeli już wiesz jak to działa, to przypomnij sobie jak i czy sterowałeś kierunkiem transmisji w wersji USB-RS485. To samo musisz zrobić w Malinie. Albo podepniesz sygnały sterujące nadajnikiem (i ew. odbiornikiem MAXa) na sztywno do stanów aktywnych (Vcc i GND) w wersji 4-przewodowej, albo musisz machać przynajmniej jednym pinem GPIO podłączonym do wejścia DE MAXa w wersji 2-kabelkowej.

Link do komentarza
Share on other sites

Używam dwóch żył A i B od strony płytki do sterowania centralnym ogrzewaniem z.

Podłączyłem ją do raspberry pi do portu uart do RX i TX (z rezystorami 1Kohm) oraz do 5V i GND.

Re i DE podłączyłem do pinu i ustawiłem go na włączony dając napięcie na nim.

I moje pytanie czy jest jakaś możliwość sterowaniem kierunków przesyłaniem danych?

Czyli muszę w mojej aplikacji przy wysyłaniu włączać pin dla RE i DE i jak oczekuje to wyłączać pin?

Co do usb-rs485 nie musiałem martwić się o kierunek przepływu. Bo sam najwidoczniej konwerter wykrywał ruch i przekierowywał go.

Edit:

Znalazłem układ, który powinien sterować RE i DE automatycznie

Ale niestety nie działa jak powinien. Chciał bym aby komunikacja była w dwóch kierunkach.

Link do komentarza
Share on other sites

Ojej, przepraszam, tak to jest gdy się patrzy tylko na główną stronę Forum. Twój temat spadł z pierwszego miejsca i proszę, zniknął mi z oczu.

Acha, czyli masz magistralę 2-przewodową. Nie zrozumiałem tego motywu z rezystorami 1k do GND i +5V. Po której stronie je podłączyłeś? Do pinów RXD, TXD czy po stronie różnicowej? Jak? Pisząc takie rzeczy musisz podawać pełny schemat albo wyczerpujący opis, bo możliwości zrobienia tego jest wiele a właśnie od takich szczegółów będzie zależało czy to zadziała czy nie.

Jeżeli RE i DE są zwarte i podłączone do pinu Maliny to właśnie to jest sterowaniem kierunkiem transmisji. Stan niski - odbierasz, bo na RE jest stan aktywny - zero. Stan wysoki - nadajesz, bo na DE jest stan aktywny - jedynka.

To nie konwerter wykrywał ruch tylko prawdopodobnie driver programowy tego urządzenia. Popatrz, RS485 wymyślono dawno temu po to, by zapewnić sobie poprawne transmisje na odległości wieluset metrów w środowiskach przemysłowych. Dzięki czemu to tak dobrze działa i stało się na lata standardem z zakresie prędkości do kilkuset kb/s? Bo jest różnicowe, bo węzły są (a przynajmniej powinny być) dopasowane impedancyjnie do kabla (skrętki), bo odbiorniki są bardzo odporne na napięcie wspólne (od -7 do +12V) a jednocześnie dość czułe na napięcie różnicowe. Wszystkie te zalety dają znać o sobie wtedy, gdy nadajnik steruje kablem. Jeżeli żaden węzeł nie nadaje, w skrętce napięcie różnicowe zaczyna być równe zero i wtedy odbiorniki głupieją. Dlatego sterowanie nadawaniem czyli odblokowywanie nadajnika jest tak ważne. Teoretycznie możesz zrobić układ z tranzystorkiem pokazany przez Ciebie na schemacie ale czy zastanawiałeś jak on działa? Zobacz, on włącza nadajnik tylko wtedy, gdy chcesz nadać stan niski. W przypadku nadawania stanu wysokiego nadajnik jest odpięty od kabla. Co wtedy widzi odbiornik? I tego nie umiem Ci powiedzieć bo biedny autor już o tym nie pomyślał i nie narysował. Takie sterowanie nadajnikiem jest żałosne. Tak, zadziała gdy linie różnicowe rozsymetryzujesz np. opornikami (i tego zabrakło na schemacie) ale jest to rozwiązanie o odporności nie lepszej niż zwykły drut I/O pociągnięty z Maliny wprost do urządzenia - beznadzieja.

Decydując się na 2-przewodową magistralę RS485 niejako "w pakiecie" dostajesz problem sterowania nadajnikiem. No niestety, musisz napisać kawałek kodu, który załącza nadajnik przed wysłaniem pierwszego bajtu jakiejś ramki danych a wyłącza go po zakończeniu nadawania ostatniego bajtu. Niektóre UARTy w mikrokontrolerach mają specjalne piny sterujące zewnętrznym nadajnikiem RS485 ale o ile zdążyłem się zorientować Malina nie ma takiego trybu pracy (choć ma dwa piny tzw. sprzętowego sterowania przepływem - tylko trzeb a je włączyć).

Rzeczywiście, dla opornych lub leniwych istnieją rozwiązania typu przerzutnik monostabilny np. 74HC123 lub nieśmiertelne 555, które widząc zmiany stanu linii TXD załączają DE i trzymają tak długo aż linia TXD się "uspokoi" ale one - z definicji - przedłużają czas pracy nadajnika co najmniej jeszcze o jeden znak po zakończeniu nadawania co może mieć nieprzyjemne skutki gdy druga strona zaczyna nadawać od razu po odebraniu Twojego ostatniego znaku.

Musisz sam podjąć decyzję jak to zrobisz. Minęło kilka dni, napisz do czego doszedłeś przez ten czas. Jeżeli jest to urządzenie hobbystyczne i nigdy nie wyjdzie poza ramy Twojego pokoju, możesz stosować jakieś uproszczone formy sterowania nadawaniem ale robiąc coś dla ludzi nie możesz sobie pozwolić na taką chałę.

Link do komentarza
Share on other sites

cyryllo, konwerter sam wykrywał, bo pewnie wykorzystywał linie do sterowania przepływem znane z interfejsu RS232. Dziwię się, że Malina ich nie ma. I właśnie sprawdziłem, że ma sygnał RTS, który powinno się dać ustawić aby automatycznie mogło być użyte do sterowania przepływem.

Link do komentarza
Share on other sites

No własnie tego nie jestem pewien. To znaczy tak, dwie linie sterowania przepływem malinowy UART ma i można je włączyć bo domyślnie są zablokowane, ale czy RTS można wprost użyć do włączania nadajnika - tego już nie wiem.

Różne interfejsy różnie tą linią sterują a jej pierwotnym przeznaczeneim było Request-to-Send czyli żądanie chęci nadawania, potwierdzane przez Clear-to-Send z urządzenia po drugiej stronie kabelka. No i RTS był zgłaszany dopóki miałeś dane do wysłania, ale gdy już ich brakowało, był natychmiast wycofywany - co miało miejsce tuż po rozpoczęciu nadawania ostatniego znaku ramki. W takiej konfiguracji RTS nie pokrywa ostatniego znaku i w RS485 nie będzie on nadawany na magistralę. O ile pamiętam, np. STM32 mają specjalny tryb jednej z linii, specjalnie przeznaczony do sterowania zewnętrznym nadajnikiem. W AVR trzeba to robić programowo ale tak, by mieć pewność, że ostatni znak z bufora nadajnika się wysłał - trzeba sprawdzać bit UDRE a nie TXC itd.

Jak jest w Malinie? Tego nie udało mi się jednoznacznie potwierdzić, dlatego o użyciu sprzętowego RTS wypowiadam się ostrożnie. Czy mógłby ktoś na szybko sprawdzić to doświadczalnie? Jeżeli nie działa to tak, jak wymaga tego nadajnik RS485, to trzeba wykorzystać jedną z linii I/O sterowaną programowo a wtedy to już wszystko jedno którą.

Link do komentarza
Share on other sites

Kupiłem układ Max3485 na 3,3v. Podłączyłem wg schematu wyżej i widzę tylko że wysyła dane ale odebrać ich już nie potrafi :/

Chciał bym aby transmisja była wykrywana i automatycznie puszczała.

Pinów GPIO do sterowania kierunkiem wolał bym nie używać bo już prawie wszystkie mam zajęte.

@OldSkull mógł byś rozwinąć temat RTS w malinie? jakieś źródło?

edit:

Znalazłem to http://www.raspberrypi.org/phpBB3/viewtopic.php?f=44&t=37203

i

http://elinux.org/RPi_Low-level_peripherals#C_2

Ustawiłem RTS na pinie 31 i podłączyłem do DE na układzie.

Zaś RO podłączyłem przez rezystor do pinu GND na malinie

Podłączyłem i mam tylko zapis :/ Nie mogę odczytać rejestrów , ale zapisać do rejestrów mogę.

Czy CTS tez musi być podłączony? i ew. jak go podłączyć do układu.

Wydaje mi się że RTS nie steruje dobrze DE, czy on nie jest tylko do modemów?

Link do komentarza
Share on other sites

Przydałby Ci się oscyloskop do sprawdzenia co się dzieje na liniach RX i RTS w momencie, kiedy malina nadaje i nie nadaje. Możliwe, że zmienia stan RTS na cały czas, kiedy otwierasz port do nadawania.

Link do komentarza
Share on other sites

Cyryllo, po przeczytaniu ostatniego Twojego postu mam nieodparte wrażenie, że robisz kompletnie przypadkowe ruchy niczego nie rozumiejąc ani z tego co robisz, ani z tego co tutaj piszemy. Naprawdę podłączyłeś nowo objawiony RTS do wejścia DI transceivera? A RO dałeś przez rezystor do masy? Albo to:

"Podłączyłem i mam tylko zapis :/ Nie mogę odczytać rejestrów "

A co ma wspólnego Twoje bezsensowne podłączanie transceivera RS485 do odczytów i zapisów rejestrów Maliny? Weź się chłopie ogarnij, przeczytaj jakiś porządny artykuł o RS485 - jeśli nasze posty do Ciebie nie trafiają i zacznij pisać z sensem. Sam Ci jakieś wskazałem, z sieci pewnie umiesz korzystać więc zacznij choćby od Wikipedii czy coś? Inna sprawa, czy rozumiesz co czytasz?? Przecież wiedzy na ten temat jest mnóstwo, dla początkujących i dla profesjonalistów robiących takie sieci dla przemysłu. Wybierz coś, obejrzyj rysunki, zastanów się choćby 5 minut i może Cię olśni, może przyjdzie taki moment że zrozumiesz, tak! Już wiem! Ale byłem głupi, to takie proste! Naprawdę szczerze Ci tego życzę, bo jak do tej pory Twoje zmagania z tym problemem wygladają jak próba wyciągania banana z podełka z małym otworem. Nie ogarniasz tej technologii.

To jeszcze raz (ostatni):

Typowy dwuprzewodowy transceiver RS485 zapakowany w obudowę 8-wyprowadzeniową - wszystko jedno czy 3- czy 5-woltowy, ma dwa druty od strony linii przesyłowej i 4 od strony procesora. Masa i zasilanie dopełniają do 8. Oto lista z numerami pinów (gdyby się okazało, że posługujesz się innymi nazwami) wraz z wyprowadzeniami komputera/UARTa do których je podpinasz. Zaznaczyłem też kierunki sygnałów:

RO (pin 1) -> dane odbierane: wychodzą do RXD UARTa,
/RE (pin 2) <- najczęściej stałe zero (GND) lub sterowany przez jakieś I/O lub zwarty do DE,
DE (pin 3) <- to jest sterowanie nadawaniem czyli przekazywaniem na magistralę RS485 tego co wypuszcza UART, to może być RTS albo jakiś inny pin I/O sterowany programowo albo jakiś sprytny układzik, który będzie automatyczne odblokowywał nadajnik gdy wychodzi znak z TXD UARTa,
DI (pin 4) <- dane nadawane: przychodzą z TXD UARTa.

Czy masz jeszcze jakieś wątpliwości? Co tu może nie działać? Cała strona postów o takiej bzdurze: 4 druty a jeśli połączysz /RE z DE to nawet trzy - naprawdę jesteś w stanie zrobić to źle? Mam nadzieję, ze się tylko uczysz na własne potrzeby i nie robisz tego urządzenia na zlecenie i to jeszcze za pieniądze a Ty miej nadzieję, że zleceniodawca tej pracy nigdy tutaj nie zajrzy bo się załamie.

Plus moje osobiste post scriptum:

Śledząc takie wątki czasem dochodzę do wniosku, że tak jak z oczywistych powodów nie każdy może być muzykiem, tak może istnieją również jakieś naturalne bariery przez które nie każdy może być elektronikiem, matematykiem, czy cieślą, nie wiem. Co o tym myślisz?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.