logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Raspberry Pi i Atmega8 przez RS485 - poprawność schematu i zasilanie magistrali

mjc 09 Lis 2014 20:09 3819 9
REKLAMA
  • #1 14116580
    mjc
    Poziom 14  
    Posty: 165
    Ocena: 108
    Witam

    To moje pierwsze spotkanie z RS485 więc proszę o wyrozumiałość jeśli pytam o głupoty...
    Panuję budowę urządzenia pracującego w sieci RS485 w standardzie czteroprzewodowym. W skład układu wchodzić będzie RaspberryPi jako master oraz maksymalnie 16 układów Atmega8 pełniących rolę slave'ów. Uart w Raspbery Pi pracuje na poziomach napięć 0-3.3V a w Atmedze 0-5V z czego wynika konieczność stosowania układów MAX3485 po stronie Raspberry oraz MAX485 po stronie Atmegi. Czy będzie to prawidłowo działać? Przygotowałem ogólny schemat podłączenia jednego slave'a:Raspberry Pi i Atmega8 przez RS485 - poprawność schematu i zasilanie magistrali
    Czy schemat jest poprawny?

    Czy trzeba zasilić magistralę wg tego schematu: Raspberry Pi i Atmega8 przez RS485 - poprawność schematu i zasilanie magistrali
    Jeśli tak to czy tylko po stronie mastera? 5V czy 3.3V ?


    Dziękuję za pomoc!
  • REKLAMA
  • #2 14116697
    vonar
    Poziom 28  
    Posty: 690
    Pomógł: 151
    Ocena: 30
    Po co podłączasz niepotrzebne wyjścia odbiorników do masy? Co prawda są zablokowane, ale i tak to dziwne...

    Wstępna polaryzacja na linii wejściowej dla mastera będzie potrzebna.
  • #3 14116698
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Magistrala jako taka nie ma zasilania - potrzebujesz tylko A, B i GND. Musisz dodać rezystory polaryzują
    Natomiast twój schemat nie ma wielkiego sensu. Jeśli nadajniki 16 urządzeń slave będą na stałe odblokowane, to żadnej transmisji nie będzie. Nie prościej zrobić half-duplex? Na każdy ukłąd masz wtedy tylko jeden transceiver. A raczej nie będziesz jednocześnie nadawał i odbierał.
  • REKLAMA
  • #4 14116755
    mjc
    Poziom 14  
    Posty: 165
    Ocena: 108
    Dzięki za odpowiedzi. Nie wspomniałem o zadaniu jakie będzie realizował układ: będzie to sieć czytników kart zbliżeniowych oraz centralny kontroler z bazą MySQL na RaspberryPi. Czytnik po odczycie karty wysyła jej numer przez RS485 do raspberry pi gdzie jest sprawdzany w bazie a następnie raspberry odpowiada, czy można udzielić dostępu czy też nie. ~tmf, wydaje mi się, że czteroprzewodowy interfejs, mimo że wygeneruje większy koszt będzie łatwiej oprogramować aby uniknąć błędów. Czy należy, po stronie Atmegi podawać stan wysoki na DE w przypadku chęci nadawania?
    Co do wstępnej polaryzacji: czy wystarczy, że po stronie Raspberry podepnę przez rezystory 510 do +5V?
  • #5 14116957
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Czteroprzewodowy interfejs ma sens jeśli masz tylko dwa układy, które muszą wymieniać informacje w full-dupleksie. Tu nie ma sensu, bo przecież wszystkie urządzenia nie będą jednocześnie nadawać, prawda? Każda ATMega musi sterować nadajnikiem, w przecwnym przypadku dojdzie do kolizji. Najprościej to zrobić tak, że ATMegi buforują dane, a RPi je okresowo odpytuje i jeśli coś mają to przesyłają dane do RPi.
  • #6 14117022
    mjc
    Poziom 14  
    Posty: 165
    Ocena: 108
    Czteroprzewodoy interfejs chciałem zastosować dla tego, żeby bezkolizyjnie obsłużyć np. taką sytuację: pierwszy czytnik wysyła kod karty na magistralę, obiera to Rpi, rpi sprawdza kod w bazie i wysyła odpowiedź jednak w tym czasie ktoś przyłożył kartę do innego czytnika i w tym momencie kolejny czytnik chce coś przesłać na magistralę i dochodzi do kolizji. Wydaje mi się w tym wypadku uzasadniona decyzja o czteroprzewodowym interfejsie. Oczywiście każda atmega steruje pinem DE ale jak to będzie przy Rpi? Tam wydaje mi się, że można zostawić DE na stałe podpięte do 3.3V ?
  • REKLAMA
  • #7 14117130
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    Hehe, a co jak 2 osoby przyłożą karty do 2 czytników w tym samym czasie?
    2 TX'y się włączą i będzie co? KASZANKA na RS485!!!
  • #8 14117229
    mjc
    Poziom 14  
    Posty: 165
    Ocena: 108
    piotrva napisał:
    Hehe, a co jak 2 osoby przyłożą karty do 2 czytników w tym samym czasie?


    Wtedy Rpi odbierze śmieci z magistrali przez co nie zostanie wysłana odpowiedź. Czytnik po wysłaniu ramki odczeka pewien czas, w przypadku braku odpowiedzi (timeout) wyśle ją ponownie po losowo wygenerowanym czasie.
    Ew. tak jak ~tmf radził kod karty będzie przechowywany w urządzeniu, Rpi będzie okresowo odpytywał wszystkie slavey i slave z odczytaną kartą będzie mógł przekazać jej numer w określonym czasie. Slave'ów ma być tylko 16 więc nie powinno być problemu.
  • REKLAMA
  • #9 14117359
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    Taak, a transcivery na pewno ucieszą się z takiego stanu rzeczy ;)
    Tak się nie robi - zrób tak jak radzi @tmf a do tego wystarczy Ci half duplex i 3 kabelki jako magistrala.
  • #10 14150314
    mjc
    Poziom 14  
    Posty: 165
    Ocena: 108
    Witam ponownie!


    Napisałem program do obsługi transmisji pod raspberry pi, program do slaveów wg. zaleceń kolegów (załączenie linii DE tylko w chwili wysyłania), niestety z powodu braku czasu zmuszony byłem wykorzystać przejściówkę USB-RS485. Wszystko działa z jednym slavem jednak gdy podepnę drugi to odpowiada tylko jeden. Program w Rpi odpytuje po kolei wszystkie slave'y począwszy od adresu 0x1 do 0xA, po zapytaniu czeka 100ms na odpowiedź. Slave jeśli odbierze ramkę adresowaną "do siebie" odpowiada - w przeciwnym razie milczy. Oczywiście adresy ustawione poprawnie i program na Rpi wykrywa poprawnie adresy poszczególnych slave'ów. Dodam, że z Raspberry komunikuje się ten slave który jest później podłączony.

    Wydaje mi się, że problem leży w braku polaryzacji linii (jako slave'y na szybko wykorzystuję dwa zestawy AND-TECH EvB) a jako master jak już wspomniałem konwerter USB-RS485, coś takiego: http://electropark.pl/moduly-komunikacji/4923-konwerter-usb-rs485.html

    Proszę o poradę czy podciągać linie A do +5V przez rezystor 450-650Ω oraz przez taki sam rezystor linię B do masy ale tylko po stronie Rpi czy po stronie każdego slave'a ?

    EDIT: po rozebraniu konwertera USB-RS232 sprawdziłem, że linia A jest podciągnięta 2.2k do +5V a linie B przez 2.2k do GND

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik planuje budowę systemu komunikacji RS485 z Raspberry Pi jako master i maksymalnie 16 układami Atmega8 jako slave'ami. Wskazano na różnice napięć między UART Raspberry Pi (0-3.3V) a Atmega8 (0-5V), co wymaga zastosowania transceiverów MAX 3485 i MAX485. Dyskutowano o poprawności schematu połączeń oraz konieczności zasilania magistrali. Użytkownicy zasugerowali, że czteroprzewodowy interfejs może być nieefektywny, a lepszym rozwiązaniem byłby half-duplex, aby uniknąć kolizji w transmisji. Wskazano również na potrzebę polaryzacji linii oraz na problemy z komunikacją, gdy podłączono więcej niż jeden slave. Użytkownik zrealizował program do obsługi transmisji, jednak napotkał trudności z odpowiedziami od wielu slave'ów, co może być spowodowane brakiem polaryzacji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA