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

Jak połączyć 80 układów AVR ATtiny12 z RS485? Maksymalna ilość urządzeń?

tszczesn 30 Sty 2006 23:13 4750 7
  • #1 2239537
    tszczesn
    Specjalista - oldradio
    Posty: 2495
    Pomógł: 383
    Ocena: 184
    Potrzebuje połączyć ze sobą aż 80 sztuk układów z porcesorem AVR najchętniej jakimś 8-nogowym, np. ATtiny12, (odległośc maksymalna kilkanaście metrów), które mają przekazywać dane do centralnego komputera. Myślę, żeby zrobić to wykorzystując magistralę RS485, i to mam dwa pytania:

    1) Jaka jest maksymalna ilość urządzeń dla tej magistrali? Wg. różnych źródeł jest to albo 32, albo 255 - która wartość jest prawdziwa? (prędkość transmisji może być bardzo wolna, to nie jest istotne)

    2) Czy jest jakas gotowa biblioteka do AVR (najchętniej w asemblerze lub ew. C) obsługująca protokół RS485? Bo szybki googling nic takiego mi nie znalazł.
  • Pomocny post
    #2 2239679
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Standard przemysłowo oznacza do 32 urządzeń, ale ile zadziała więcej to nikt nie da gwarancji

    Biblioteka do samego RS485 nie jest potrzebna bo to jedynie warstwa fizyczny, do obsługi protokołu warstwy logicznej (np modbus albo profibus) to nie wiem.
  • Pomocny post
    #3 2239897
    zby

    Poziom 15  
    Posty: 65
    Pomógł: 12
    Ocena: 2
    Ilość ta jest zależna od obciążenia jakie wnosi dołączony do magistrali układ i jest zależny od typu począwszy od 32, 128, 256. Innym parametrem jest maksymalna prędkość i tu są kostki i na 250kHz i 2M.
    Ja stosuje z powodzeniem tanie 75LBC176 z około 70 urządzeniami na linii przy prędkości 2400B i przy dużo większych odległościach niż potrzebujesz. Taką transmisje możesz na małym 8-pinowym AVR zrobić programowo, ale każdy procesor będzie musiał mieć ustawiony w trakcie programowania inny adres. Jeśli zastosujesz kwarc to zostanie tylko 1 wolny pin (przy programowaniu wysokonapięciowym) lub gdy wewnętrzny RC to mogą się pojawić problemy ze stabilnością.
    Konto firmowe:
    DU-EL Zbigniew Korpak
    Kopernika 45/1A, Gliwice, 44-117 | Strona WWW: http://www.du-el.pl/
  • #4 2239900
    tszczesn
    Specjalista - oldradio
    Posty: 2495
    Pomógł: 383
    Ocena: 184
    elektryk napisał:
    Standard przemysłowo oznacza do 32 urządzeń, ale ile zadziała więcej to nikt nie da gwarancji

    Biblioteka do samego RS485 nie jest potrzebna bo to jedynie warstwa fizyczny, do obsługi protokołu warstwy logicznej (np modbus albo profibus) to nie wiem.


    Ale ATTiny12/13 nie ma UARTa - trzeba 'ręcznie' oprogramowac nogi wejściowe i wyjścowe, na co jak się okazało nie mam za bardzo czasu. Najwyżej wezmę ATtiny2313, on co prawda więksy jest ale UARTa ma. Protokół wyższego poziomu jest mniej potrzebny, bo układy są proste, mają tylko dawać jeden bajt danych w odpowiedzi na jeden bajt przychodzący (adres) - tu żadnej filozofii nie trzeba.

    BTW. Impedancja wejściowa RS485 to 12kΩ, tak? Czy można zasymulować te 80 odbiorników oporkiem 150Ω wpiętym do jednego (testowego) urządzenia? Bo nie chcę robić 80 układów tylko po to, żeby się przekonac, że to nie działa :) Niestety z magistralą RS485 nie mam jeszcze większych doświadczeń i nie wiem jakie ma 'narowy'. W najgorszym razie podzielę te 80 sztuk na trzy oddzielne łańcuchy.

    Dodano po 9 [minuty]:

    zby napisał:
    Ilość ta jest zależna od obciążenia jakie wnosi dołączony do magistrali układ i jest zależny od typu począwszy od 32, 128, 256. Innym parametrem jest maksymalna prędkość i tu są kostki i na 250kHz i 2M.
    Ja stosuje z powodzeniem tanie 75LBC176 z około 70 urządzeniami na linii przy prędkości 2400B i przy dużo większych odległościach niż potrzebujesz. Taką transmisje możesz na małym 8-pinowym AVR zrobić programowo, ale każdy procesor będzie musiał mieć ustawiony w trakcie programowania inny adres. Jeśli zastosujesz kwarc to zostanie tylko 1 wolny pin (przy programowaniu wysokonapięciowym) lub gdy wewnętrzny RC to mogą się pojawić problemy ze stabilnością.


    Dzięki - spróbuję tak zrobić, 2400B to i tak dużo za dużo niż mi wystarczy. Szkoda, że wewnętrzny oscylator jest tak niestabily - jedna noga to za mało, muszę mieć trzy (no, dwie z kombinowaniem), widzę, że muszę i tak użyć większego scalaka, co ma swój plus (wbudowany UART).

    I jeszcze jedno dodatjkowe pytanko: Zasadniczo RS485 nie powinna być rozgałęziona, ale czy przy tak niewielkich prędkościach (1200 - 2400B) i odległosciach jedno czy dwupoziomowe drzewko ma szansę poważnie zepsuć transmisję? Bo zapene znacznie mi to ułatwi prowadzenie kabla z magistralą. Na wejściowej nodze scalaka zastosowalbym filtr tłumiący ew. odbicia, choć ich amplituda i czas trwania powinny być znikowme.
  • #5 2240780
    zby

    Poziom 15  
    Posty: 65
    Pomógł: 12
    Ocena: 2
    To zobacz taką moją starą propozycje http://www.lcd.strony.pl/uklad_akwizycji_danych.htm
    Obecnie stosuje jeszcze rezystory 10R szeregowo do A i B, a jako stabilizator to przy większej ilości urządzeń proponuje najzwyklejszy tranzystor z zenerką (o ile stabilność nie jest wymagana) bo taki układ jest najbardziej oszczędny a 75LBC176 czy inne i tak posiadają zabezpieczenie przeciwzwarciowe do linii A i B. Na pewno nie stosuj takich stabilizatorów jak LM2931-5.0 lub podobnych bo możesz mieć problem z zatrzaskiwaniem się zasilania, ponieważ ten przykładowy przy około 6,5 V potrafi nagle pobierać 25mA - nie pamiętam teraz nawy tego parametru.
    Oczywiście wszystko dotyczy się przypadku zasilania tych czujek przez linie komunikacyjną.
    Jeśli chodzi o różne układy rozgałęzien to przy tych prędkościach ja nie miałem żadnych problemów, dotyczy to także terminatorów które stosowałem tylko po to aby zlikwidować indukujące się w linii zakłócenia.
    Konto firmowe:
    DU-EL Zbigniew Korpak
    Kopernika 45/1A, Gliwice, 44-117 | Strona WWW: http://www.du-el.pl/
  • #6 2241823
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    tszczesn napisał:
    Protokół wyższego poziomu jest mniej potrzebny, bo układy są proste, mają tylko dawać jeden bajt danych w odpowiedzi na jeden bajt przychodzący (adres) - tu żadnej filozofii nie trzeba.
    Właśnie to co opisujesz jest już protokołem "wyższym", dodatkowo musisz przewidzieć to że układy wysyłają pakiety z sumami kontrolnymi (bo jak przypadkiem się włączą dwa to odbierasz sieczke), to że jak nie będzie odpowiedzi to trzeba coś zrobić, np wysłać drugi raz albo włączyć alarm że jest coś uszkodzone. Do tego musisz mieć przestrzeń adresową i w każdym pakiecie dobrze mieć napisane kto i do kogo coś wysyła. Przydaje się też jakiś bajt startu dla ramki. No i taki prosty projekt zaczyna się komplikować ;)
  • #7 2241932
    zby

    Poziom 15  
    Posty: 65
    Pomógł: 12
    Ocena: 2
    Ja jeszce podpowiem od siebie, że stosuje po włączeniu nadajnika MASTERa cisze z wymuszeniem stanu 1 (dotyczy sprzętowego RS) przez okres nieco dłuższy niż czas nadawania 1 bajtu z bitem startu i stopu. Sprawdziłem to praktycznie, że przy dużej liczbie układów SLAVE na linii przy takim sterowaniu zmniejsza się ilość błędów jakie mogą się pojawić i to głównie z powodu nierówności rezystancji połączenia A, B spowodowanych dużą ilością kontaktów, kiepskim kablem czy zakłóceniom jakie mogą się indukować w linii tuż przed włączeniem nadajnika MASTERa. Dzięki temu układy lepiej dekodują bit startu.
    Konto firmowe:
    DU-EL Zbigniew Korpak
    Kopernika 45/1A, Gliwice, 44-117 | Strona WWW: http://www.du-el.pl/
  • #8 2242865
    tszczesn
    Specjalista - oldradio
    Posty: 2495
    Pomógł: 383
    Ocena: 184
    To jeszcze jedno pytanie mam. Kupiłem programator ZL2PRG, podpinany do portu równoległego. I wszytsko fajnie, ale AVR Studio użyć go nie chce, tak jest dostępne tylko STK500 (podłączane do COMa), a ZL2PRG to STK200. Jest jakaś wtyczka do Studio która mi to udostępni w tym kombajnie? Bo tak jest wygodniej niż HEXa przekazywać do innego programu - np. PonyProg.

Podsumowanie tematu

LABEL_AI_GENERATED
Magistrala RS485 standardowo obsługuje do 32 urządzeń, jednak w praktyce możliwe jest podłączenie większej liczby, nawet do około 70 przy odpowiednim doborze układów i niskiej prędkości transmisji (np. 2400 baudów). Maksymalna liczba urządzeń zależy od obciążenia magistrali i typu zastosowanych transceiverów. Przykładowo, układy 75LBC176 pozwalają na stabilną pracę z około 70 urządzeniami na linii na większych odległościach. Układy AVR ATtiny12 nie posiadają wbudowanego UART, co wymaga programowej obsługi linii komunikacyjnych, co jest czasochłonne; alternatywnie można użyć ATtiny2313 z wbudowanym UART. Protokół RS485 to warstwa fizyczna, więc do obsługi protokołu wyższego poziomu (np. Modbus) potrzebne jest dodatkowe oprogramowanie. Przy projektowaniu komunikacji należy uwzględnić adresowanie urządzeń, sumy kontrolne, potwierdzenia odbioru i obsługę błędów. W praktyce stosuje się rezystory szeregowe (np. 10 Ω) na liniach A i B oraz stabilizację z użyciem tranzystora i diody Zenera, unikając stabilizatorów takich jak LM2931 ze względu na problemy z zasilaniem. Przy dużej liczbie urządzeń na magistrali warto wymusić stan wysoki na linii MASTERa po nadawaniu bajtu, co zmniejsza błędy wynikające z nierówności rezystancji i zakłóceń. Testowanie obciążenia magistrali można przeprowadzić symulując odbiorniki rezystorami 150 Ω. Programatory ZL2PRG (STK200) nie są natywnie wspierane w AVR Studio, które preferuje STK500 (COM), co wymaga użycia alternatywnych narzędzi lub wtyczek.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA