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

atmega128 RX USART - atmega128 RS485 za niski poziom sygnału

wojtekr 11 Mar 2013 10:56 6282 30
REKLAMA
  • #1 12045242
    wojtekr
    Poziom 15  
    Witam,

    mam następujący układ:

    płytka z atmega128 i ENC28J60
    połączenie db15 (taśma 15-sto żyłowa) z płytka z 16x rs485
    połączenie RS485 z płytką z atmega32.

    Z serwera www jest inicjowana transmisja do ENC28J60, m128 za pomocą SPI (Ffreq/2 18432000) komunikuje się z ENC28J60, pobiera dane ustawia odpowiedni RS485 za pomocą zatrzasku 74HC595 i wysyła dane i przestawia się na odbiór.
    Slave odbiera dane i odpowiada.

    Wszystko jest ok jak jest zwarty TX slave'a z RX mastera. Jednak przy RS485 sygnał na RX mastera jest zbyt niski aby uC go poprawnie zinterpretował.
    Wyłączenie obsługi ENC28J60 eliminuje ten problem.

    Pytanie brzmi co może powodować takie zjawisko?
    Jakie jeszcze informacje powinienem zamieścić abyście mogli mi pomóc?
    Poza transmisja na liniach RE/DE wystepuje sygnał zegara SPI, czy to może przeszkadzać?. (oscylogram II CH2)

    Poniżej sygnał nadawany i odbierany:

    atmega128 RX USART - atmega128 RS485 za niski poziom sygnału

    Sygnał RE/DE podczas transmisji (nadawanie niewidoczne- RE/DE Hi).

    atmega128 RX USART - atmega128 RS485 za niski poziom sygnału

    Schemat płytki RS485 ze złączem DB15

    atmega128 RX USART - atmega128 RS485 za niski poziom sygnału
    atmega128 RX USART - atmega128 RS485 za niski poziom sygnału
  • REKLAMA
  • #2 12049172
    aju_cor
    Poziom 12  
    Witam!

    Stawiam na błędne sterowanie buforami.

    Najprawdopodobniej w jednym momencie masz wysterowane co najmniej 2 odbiorniki RS485 i dochodzi do konfliktu poziomów.

    Proponuję odpiąć wszystkie RS485 prócz jednego i testować, albo po prostu podglądnąć analizatorem wszystkie wyjścia buforów...

    Pozdrawiam!
    Sławek
  • #3 12049326
    kamyczek
    Poziom 38  
    Wystarczy że w tym samym czasie pracują dwa nadajniki , i jest problem . Możliwe że po takiej sytuacji któryś z układów zostanie uszkodzony i zwiera linię transmisyjną . Kolejnym problemem jest nieprawidłowe sterowanie sygnałem nadawanie odbiór .
  • REKLAMA
  • #4 12051828
    wojtekr
    Poziom 15  
    Dzięki za podpowiedzi. Sterowanie zatrzaskiem jest na pewno prawidłowe, w jednym momencie wysterowany jest tylko jeden z dwóch AD485- sprawdziłem.

    Dzisiaj zobaczyłem, że na płytce z wlutowanym tylko jednym zatrzaskiem i podłączonymi do niego tylko dwoma AD485 bez żadnych diód, R120 i innych rezystorów ze schematu działa

    Dodano po 6 [minuty]:

    Czy te rezystory 1k z linii AB do masy i Vcc mogły to powodować?
  • #5 12052492
    aju_cor
    Poziom 12  
    Rezystory polaryzujące linie A i B wraz z terminatorem 120R ustalają właściwe poziomy dla transmisji RS485. Wartości rezystorów polaryzujących (z wyliczeń) powinna być z zakresu ok 750R - 470R. Zależne jest to od terminatora a on z kolei zależny jest od impedancji charakterystycznej przewodu (standardowo 120R).

    Dla niskich prędkości transmisji nie ma potrzeby stosowania terminatora, wtedy wartości R polaryzujących powinna być większa.

    Sprawdź czy masz poprawną polaryzację tzn linia A powinna być podciągnięta do +5V zaś B do GND.

    Tak czy siak czuję, że źle sterujesz zatrzaskami :)

    Pozdrawiam!
    Sławek
  • #6 12052580
    wojtekr
    Poziom 15  
    Wybrałem AD485 ze względu na odporność na ESD. Ale w nocie nie mogę się doczytać nic na temat wartości rezystorów, a co do polaryzujących to nota w ogóle milczy.

    Jak je wyliczyć?

    Co do sterowania zatrzaskami to co może być źle, ten śmietnik poza czasem transmisji? Faktycznie nie powinien być ale nie wiem jak go wyelimininować, poza tym jest poza czasem transmisji RS232.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    CH2
    https://obrazki.elektroda.pl/5418400400_1362995083.png

    Polaryzacja prawidłowa
  • #7 12053226
    aju_cor
    Poziom 12  
    Witam!

    1. Co do doboru rezystorów @ RS485 - szukaj po "biasing resistors"
    (jeżeli nie stosujesz długiej magistrali RS485, na razie olej te rezystory łącznie z terminatorem 120R - nie montuj ich)

    2. Jak wyeliminować ewentualny wpływ sygnałów SCL/SDA - widzę, że masz wyprowadzony sygnał OE (u Ciebie G) - ustaw stan wysokiej impedancji na zatrzaskach na czas transmisji po I2C. Sposób wymaga podciągnięcia wyjść '595 tak aby w momencie wystąpienia wysokiej impedancji wszystkie drivery RS485 były w odbiorze...

    Pozdrawiam!
  • REKLAMA
  • #8 12053313
    wojtekr
    Poziom 15  
    Czyli wszystkie AD485 na 0 (odbiór) i OE na HI?
    potem na czas transmisji RS OE Low i 1 na konkretnym AD485?
  • #9 12053689
    aju_cor
    Poziom 12  
    Wg mnie powinno to wyglądać następująco:
    - linia sterująca kierunkiem (/RE DE) każdego drivera podciągnięta do gnd jakimś większym oporem (powiedzmy >= 10k)
    - w momencie podania na OE zatrzasku stanu H, automatycznie każdy driver RS485 powinien automatycznie przejść na odbiór. W tym stanie realizujesz komunikację z innymi peryferiami po i2c.
    - gdy chcesz prześć do transmisji po rs485 wystarczy OE = L. Od tego momentu sterujesz '595 po staremu.

    Pamiętaj, że linie SDA/SCL masz na innych scalakach, zadbaj oto aby od tej strony również nie doszło do kolizji podczas gadania po rs :). Może się zdarzyć, że
    gadasz po rs i jednocześnie odpowiada twój kontroler ethernet zakłócając sterowanie zatrzaskami...

    Jak pisałem wcześniej - podłącz analizator stanów i przekonaj się czy wszytsko działa ok.

    W sumie współdzielenie linii na RS i I2C jest trochę nieszczęśliwym rozwiązaniem...

    Pozdrawiam!
  • #10 12053877
    wojtekr
    Poziom 15  
    A co to znaczy szybka transmisja przy odległościach rzędu do 100m? Czy 57600 to szybko?
  • #11 12057401
    aju_cor
    Poziom 12  
    Nie jest to zawrotna prędkość, ale w przemysłówce raczej nie stosuje się większych prędkości od 115200.

    Jak poszukasz to znajdziesz wykres zależności długości kabla od prędkości dla RS485. Gdzieś to ostatnio widziałem - nie pamiętam już gdzie.

    Z doświadczeń wiem że w RS485 zazwyczaj jest lepiej niż podaje dokumentacja :)

    Pozdrawiam!
    Sławek
  • #12 12059749
    wojtekr
    Poziom 15  
    Mam jeszcze jeden problem, tym razem z TWI.

    Każda wersja konfiguracji zapętla mi na while (!(TWCR&(1<<TWINT)));

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    poniżej wersja na maksa okrojona- również wisząca.
  • #13 12066707
    wojtekr
    Poziom 15  
    udało mi się zdiagnozować problem:

    podłączenie większej liczby AD485 niż 2 szt powoduje degradacje sygnału RX RS232'a

    ale nie mam pojęcia czy to normalne i jak temu przeciwdziałać
  • #14 12067170
    aju_cor
    Poziom 12  
    Witam!
    Przeanalizuj powyższe posty i szukaj problemu w sterowaniu kierunkiem danych @ driverach RS485. Jednym słowem wszystko sprowadza się do zatrzasków...

    Pozdrawiam!
    Sławek
  • #15 12067451
    kamyczek
    Poziom 38  
    Masz odwrócony sygnał na wyjściu nadawanie odbiór ADM485 i w tym samym czasie masz kilka nadajników czyli źle sterujesz sygnałem aktywności nadawanie odbiór ADM485. W stanie normalnym na wyjściu RE i DE masz mieć logiczne zero dopiero podczas nadawania w nadajniku ma zimienić się stan na 1 zostać nadana transmisja i po niej sygnał wrócić na 0 logiczne .
  • #16 12068398
    wojtekr
    Poziom 15  
    kamyczek napisz proszę co jest źle, na drugim oscylogramie CH1 to odbiór a nie nadawanie i ono jest przy stanie niskim na RE i DE. Może nieprecyzyjnie napisałem nad oscylogramem:

    Sygnał RE/DE podczas transmisji (nadawanie niewidoczne- RE/DE Hi).

    Miałem na myśli, że jest pomiar sygnału sterującego RE/DE i RX z UART'a a nie TX. Czyli HI n RE DE (nadawanie sygnał niewidoczny) i LOW RE DE sygnał widoczny ale ze zbyt niskim poziomem.

    Wszyscy piszecie o nieprawidłowym sterowaniu zatrzaskami, pomierzyłem to i mam tak jak na zdjęciach, podczas nadawania HI (reszta zatrzasków LOW) i odbierania wszystkie zatrzaski LOW.

    Problemu nie ma przy dwóch AD485, wszystko działa. Kłopot jest jak dolutuje trzeci (na dowolnej pozycji). Sterowanie zatrzaskami jest ok, HI jest tylko na jednym nigdy na dwóch naraz.
  • #17 12068449
    kamyczek
    Poziom 38  
    Terminatory 120 om masz przy każdym układzie ? Jeśli tak to tu leży problem (ma zostać tylko 2 na końcach magistrali , to samo z rezystorami które polaryzują linię mają zostać tylko przy jednym układzie !)
  • #18 12068489
    wojtekr
    Poziom 15  
    Ten układ zakłada możliwość pracy z 16 szt AD485 (po stronie mastera) więc terminatorów musi być tyle ile układów tak samo z R podciągającymi. Do każdego AD485 są podłączone urządzenia i najdalsze będzie miało terminator. Czyli znowu 16 najdalszych ma terminatory.

    Obecnie działa to na 3 układach po stronie mastera i jednym podpiętym do (dowolnego) jednego z trzech masterowych i jest terminowane.

    Jeżeli są dwa po stronie mastera (załączony schemat dotyczy właśnie układ mastera) to sygnał RX jest degradowany. Wylutowanie jednego i pozostawienie dowolnych dwóch powoduje, że wszystko jest ok..
    Chyba powinienem to narysować, ale na razie nie mam czym.
  • #19 12069527
    kamyczek
    Poziom 38  
    wojtekr napisał:
    Ten układ zakłada możliwość pracy z 16 szt AD485 (po stronie mastera) więc terminatorów musi być tyle ile układów tak samo z R podciągającymi. Do każdego AD485 są podłączone urządzenia i najdalsze będzie miało terminator. Czyli znowu 16 najdalszych ma terminatory.

    Obecnie działa to na 3 układach po stronie mastera i jednym podpiętym do (dowolnego) jednego z trzech masterowych i jest terminowane.



    Ciekawa teoria ale nota układu ADM485 strona 12 (fig 30) pokazuje jak to ma wyglądać terminatory są na końcach magistrali , polaryzacja może być w jednym miejscu i jej zadania jest proste polaryzacja linii przy braku układu master załatwaia problem stanów nieustalonych generujących śmieci na układach odbiorników .
  • #20 12069728
    wojtekr
    Poziom 15  
    I tak właśnie jest. Zerknij przyjacielu na schemat na początku wątku. To jest schemat układu 16 szt AD485, którymi steruje MASTER. Do tego podłączam na razie JEDNEGO slave'a do dowolnego układu AD485 po stronie mastera i działa jeżeli na płytce jest nie więcej niż 2 układy AD485.

    Ta sama sytuacja gdy zwiększam ilość slave'ow- działa wszytsko ok ale do momentu nieprzekroczenia 2 szt. AD485 po stronie mastera.

    TO JEST 16 NIEZALEŻNYCH magistrali RS485 sterowanych dwoma zatrzaskami i jednym UART'em dlatego MUSZĄ mieć 16 par terminatorów i 16 (32?) pary polaryzacyjnych.
  • #21 12069933
    kamyczek
    Poziom 38  
    I tak to właśnie jest jak się łączy 16 wyjść z układu ADM485 razem .... To nie ma prawa działać w takiej formie . Połączyłeś wyjścia z układu ADM485 razem dlatego nie ma prawa to działać poprawnie . Minimalną zmianą jaka jest potrzebna to dodanie układu multipleksera podłączającego tylko wybrane wyjście R układu ADM485 do RX w procesorze lub dodanie w szeregu między każdym R ADM a RX procesora diody katodą do wyprowadzenia nr 1 układu ADM485 i podciągnięcie przez rezystor 1K do +5V wyprowadzenia rx procesora ale w tym przypadku jeśli na kilku magistralach pojawią się sygnały dostaniemy "wypadkową" na Rx.
  • #22 12069972
    wojtekr
    Poziom 15  
    I wygląda na to, że to jest odpowiedź na mój problem. Ciężko było się dogadać ale rozumiem, że potwierdzasz moje obserwacje na temat ilości połączonych wyjść RX?

    A czemu tak się dzieje tylko przy RX, przy nadawaniu nie ma tego problemu?
    I czym możan by multipleksować RX TX Uarta?
  • #23 12070003
    kamyczek
    Poziom 38  
    Wyprowadzenie R układu ADM485 jest wyjściem i łączysz 32 wyjścia , a w przypadku TX wyjściem jest procesor a wejściami są ADM485 więc w jedną stronę masz wyjście i 32 wejścia co jest układem poprawnym ale sytuacja odwrotna jest po stronie odbiorczej procesora masz 1 wejście i 32 wyjścia !!!
  • REKLAMA
  • #24 12070010
    wojtekr
    Poziom 15  
    kumam, a czym to multipleksować?

    A dać diody zaporowo do innych AD?
  • Pomocny post
    #25 12070101
    kamyczek
    Poziom 38  
    Przykładem może być układ TTL 74150 . Lub tak jak napisałem połączenie z diodami zmieniające działanie wyjść na zbliżoną do wyjść "OC" diody powodują że aktywnym stanem który będzie dominujący to stan niski na dowolnym ADM , jednak takie rozwiązanie ma wady jeśli nastąpi zwarcie wymuszające zero na jednym ADM reszta milknie ... Diody trzeba dać przy każdym ADM485 połączonym wspólnie z jednym RX.
  • #26 12070915
    wojtekr
    Poziom 15  
    Z diodami (4148) w ogóle nie działa ale nie rozumiem czemu, to znaczy nie działają te AD, które maja diody na RX- kierunek bankowo dobry. Dioda nie taka?
  • #27 12070987
    kamyczek
    Poziom 38  
    Rezystor podciągający przy mikrokontrolerze jest ? Dioda paskiem do ADM485 powinno działać . Trzeba tylko zmierzyć jaki jest stan na końcówce R układu ADM w stanie spoczynku jeśli 1 logiczna dioda do ADM i rezystor przy procesorze podciągający do +5V wartość można przetestować np 10K . Jeśli w stanie spoczynku na adm jest zero logiczne dioda odwrotnie i rezystor do GND. Dioda BAT85 będzie mniejszy spadek napięcia i powinno działać. Z oscyloskopu wynika że na ADM jest stan H więc dioda powinna być paskiem do ADM a przy RX procesora rezystor podciągający do +5V być może trzeba dobrać jego wartość z zakresu 1k-100k aby prawidłowo nie zniekształcało przebiegu na uarcie .
  • #28 12071123
    wojtekr
    Poziom 15  
    Wielkie dzięki, działa.

    Teraz jest około 3.7V z R 100k i diodą shotky'ego MBRS140. Musze kupić te BAT85. Jaki ona ma spadek napięcia? To jest parametr forward voltage (420mV)? Jeżeli tak to napięcie powinno się podnieść do około 4V?
  • #29 12071166
    kamyczek
    Poziom 38  
    Tu problem jest w rozpoznaniu zera logicznego bo to jest mniej niż 0,8V i na krzemowej diodzie jest na granicy przy diodach typu BAT85 i podobnych spadek jest mniejszy i układ powinien działać już prawidłowo.Jedynka logiczna nie stanowi problemu bo jest więcej niż 2V ( progi TTL)
  • #30 12072271
    wojtekr
    Poziom 15  
    Czy stosuje się jakieś rezystory na wejściach AB? Czy sygnał RS485 żywcem podłącza się do wejść A i B AD485?

    I czy parametr Vf to starty napięcia na diodzie?
REKLAMA