RS485, niechciany bajt o wartości zero na początku

Witam uprzejmie.

Na obrazku przedstawiam przebiegi transmisji RS485 zrealizowanej przez mój układ.

formatting link
logiczne (dolny obrazek) podłączone był bezpośrednio do nóżek mikrokontrolera ATmega16. Sonda analogowa (górny obrazek) była podłączona do zacisków A i B magistrali RS485. Obydwa przebiegi (obrazek górny i dolny) zdjęto oddzielnie (przy dwóch różnych transmisjach, ale z identycznymi danymi) -- układ ma separację galwaniczną.

Parametry transmisji: 19200 8N1 Układ posiada separację galwaniczną (3 transoptory dla: odbioru, nadawania, zmiany kierunku). Na wejściach diody Schottky SA16C. Zastosowano układ MAX485ECPA. Mikrokontroler ATmega16. Kabel LAPPKABEL UNITRONIC BUS LD 2x2x0,22 o długości 85 metrów, zwinięty w krąg. Na zaciskach A i B magistrali RS485 założono rezystory 120om, w obu urządzeniach. Podłączono linie A, B i C. Ekran wisi w powietrzu.

Układ działa w ten sposób, że wysyła 83 bajty, a następnie czeka na odbiór (odbiera 8 bajtów). Na przebiegach pokazano moment, gdy wysyłanie kończy się i następuje odbiór danych. Nadawanie danych przebiega prawidłowo (zdalny odbiornik otrzymuje prawidłowo dane, z prawidłową sumą kontrolną).

Problem polega na tym, że odbiornik na początku odbiera niepożądany bajt o wartości 0 (zero), po którym następuje dopiero właściwy ciąg bajtów, rzeczywiście nadany przez zdalny nadajnik.

Na podstawie przedstawionych przebiegów, wydaje mi się, że jest pewna zależność między zmianą nadawania na odbiór, a pojawieniem się stanu niskiego na linii odbioru (co powoduje pojawienie się niechcianego bajtu o wartości zero). Robiłem próbę polegającą na tym, że wprowadziłem pewną zwłokę po otrzymaniu ostatniego bajtu a zmianą nadawania na odbiór -- wtedy też zmianie sygnału przełączającego nadawanie na odbiór towarzyszyło pojawienie się w tym samym monecie stanu niskiego na linii odbiornika. Zatem można mieć chyba pewność, że przełączenie nadajnika na odbiór w jakiś sposób wpływa na linię odbiornika, co jest niekorzystne i powoduje problemy.

Proszę o pomoc w tej sprawie.

Robbo

Reply to
Robbo
Loading thread data ...

EKSPERYMENT 1:

Zrobiłem taki eksperyment, że w pętli nieskończonej raz ustawiam a raz zeruję linię PD2 mikrokontrolera ATmega16. Linia ta steruje wejściami DE-RE/ (przełączanie między nadawaniem a odbieraniem) układu MAX485ECPA Na oscyloskopie obserwowałem generowany przeze mnie na linii PD2 przebieg prostokątny. Identyczny przebieg prostokątny występował na linii PD0 (odbiór danych).

Po wyjęciu układu MAX485ECPA z podstawki, pozostał tylko generowany przeze mnie przebieg na PD2, natomiast przebieg wcześniej występujący na PD0 zniknął.

EKSPERYMENT 2: Przewody kabla transmisji danych podpięte są tylko do jednego urządzenia. Z drugiej strony kabel wisi w powietrzu. Kabel ma 85metrów, jest zwinięty w krąg. Problem nie występuje. Sterowanie przełączaniem nadajnik-odbiornik nie wpływa na stan linii odbiorczej mierzonej na nóżce PD0 mikrokontrolera ATmega.

Dołączam rezystor 120om do przewodów A i B po drugiej stronie (po tej stronie, która wisi w powietrzu). Problem pojawia się. Sterowanie przełączaniem nadajnik-odbiornik powoduje, że taki sam przebieg pojawia się na nóżce PD0 mikrokontrolera ATmega. Dołożenie rezystora 120om po stronie urządzeina nie zmienia sytuacji.

?
Reply to
Robbo

EKSPERYMENT 1:

Zrobiłem taki eksperyment, że w pętli nieskończonej raz ustawiam a raz zeruję linię PD2 mikrokontrolera ATmega16. Linia ta steruje wejściami DE-RE/ (przełączanie między nadawaniem a odbieraniem) układu MAX485ECPA Na oscyloskopie obserwowałem generowany przeze mnie na linii PD2 przebieg prostokątny. Identyczny przebieg prostokątny występował na linii PD0 (odbiór danych).

Po wyjęciu układu MAX485ECPA z podstawki, pozostał tylko generowany przeze mnie przebieg na PD2, natomiast przebieg wcześniej występujący na PD0 zniknął.

EKSPERYMENT 2: Przewody kabla transmisji danych podpięte są tylko do jednego urządzenia. Z drugiej strony kabel wisi w powietrzu. Kabel ma 85metrów, jest zwinięty w krąg. Problem nie występuje. Sterowanie przełączaniem nadajnik-odbiornik nie wpływa na stan linii odbiorczej mierzonej na nóżce PD0 mikrokontrolera ATmega.

Dołączam rezystor 120om do przewodów A i B po drugiej stronie (po tej stronie, która wisi w powietrzu). Problem pojawia się. Sterowanie przełączaniem nadajnik-odbiornik powoduje, że taki sam przebieg pojawia się na nóżce PD0 mikrokontrolera ATmega. Dołożenie rezystora 120om po stronie urządzeina nie zmienia sytuacji.

?
Reply to
Robbo

Schemat:

formatting link

Reply to
Robbo

W dniu 2015-10-11 o 15:41, Robbo pisze:

Podciągnij A do V0, a B do GND0 poprzez rezystory 5kOhm. Wtedy po wyłączeniu nadawania linia przejdzie w stan odpowiadający 1, będący stanem nieaktywnym na UART.

Reply to
Mario

Dziękuję za radę. Dziś będę to sprawdzał.

Tak na marginesie, zrobiłem jeszcze jeden eksperyment. Odłączyłem całkowicie kabel od zacisków A, B, C. Włączyłem urządzenie. Urządzenie zainicjowało LCD i USART, ale nie prowadzi żadnej transmisji i nie steruje wyjściami. Oscyloskopem z analizatorem logicznym obserwuję sygnały na nóżkach PD0 (odbiór), PD1 (wysyłanie), PD2 (przełączanie nadajnik/odbiornik) mikrokontrolera ATmega16. Początkowo PD2 jest w stanie niskim, PD1 i PD0 są w stanie wysokim. Przykładam rezystor 120om do zacisków A i B -- powoduje to pojawienie się stanu niskiego na PD0 (odbiór).

Reply to
Robbo

Pierwsza próba z tymi rezystorami (przy czym miałem coś rzędu 500om) nie powiodła się. Otrzymywałem błędy ramki (frame error). Muszę jeszcze pokombinować.

-----

Sprawdziłem inne egzemplarze MAXa.

Z ostatnio zakupionych MAX485ECPA na 2 jest źle, na 4 jest dobrze. Mam jakiś MAX487, na którym jest źle. Mam zwykły MAX485, na którym jest źle.

Źle: przełączenie z nadawania na odbiór powoduje pojawienie się sygnału niskiego na linii odbioru mikrokontrolera, mimo tego że jeszcze zdalny nadajnik nie nadaje. Dobrze: przełączenie z nadawania na odbiór nie wpływa na sygnał linii odbioru mikrokontrolera -- pozostaje on w stanie wysokim do czasu, aż zdalny nadajnik zacznie nadawać dane.

Teraz się zastanawiam, czy te układy są rzeczywiście uszkodzone, czy mój układ ma problemy, żeby pracować poprawnie. Czy z Waszego doświadczenia wynika, że z MAXami bywają tego typu problemy, czy raczej szukać przyczyn u siebie?

Reply to
Robbo

W dniu 2015-10-11 o 23:13, Robbo pisze:

Dziwne, że podłączenie rezystorów nie pomogło. W przypadku MAX485 zazwyczaj pomaga. Może odwrotnie podłączyłeś. Jak nie pomogło 5k można zmniejszyć do 3k. Fakt, że MAXy stwarzają problemy. Lepiej dać SN75176.

Reply to
Mario

Użytkownik "Robbo" snipped-for-privacy@gmail.com napisał w wiadomości news:561a4112$0$27508$ snipped-for-privacy@news.neostrada.pl...

Sprawdź w karcie katalogowej, czy ten scalak gwarantuje że na wyjściu odbiornika jest 1 jak między A i B jest 0. Jak nie gwarantuje to wszystko jasne. P.G.

Reply to
Piotr Gałka

Użytkownik "Robbo" snipped-for-privacy@gmail.com napisał w wiadomości news:561ad0df$0$8383$ snipped-for-privacy@news.neostrada.pl...

Nie jestem pewien i nie chce mi się sprawdzać, ale wygląda mi na to, że nie przeczytałeś kart katalogowych tych scalaków. Przypuszczam, że one nie gwarantują 1-ki na wyjściu gdy A=B więc zachowują się zgodnie ze specyfikacją. P.G.

Reply to
Piotr Gałka

Chciałem dopytać, czy przy rezystorach pullup i pulldown rzędu 5k, stosuje się jeszcze terminatory 120om? Bo wydaje mi się, że przy stosowaniu terminatorów 120om, możliwe wartości rezystorów pullup i pulldown muszą być mniejsze niż 750om. Pullup i pulldown 5k może być tylko bez terminatorów

120om(?)

R.

Reply to
Robbo

Użytkownik "Robbo" snipped-for-privacy@gmail.com napisał w wiadomości news:561b7ee2$0$619$ snipped-for-privacy@news.neostrada.pl...

Masz rację. Aby na 120om było co najmniej 200mV potrzeba 1,6666mA. Jeśli do "rozciągania" użyjesz 5V to suma rezystorów (razem z tym 120om) powinna być nie większa niż 3k. Zakładam "rozciąganie" każdego z rezystorów 120 om osobno, na obu końcach kabla. Jakby się chciało zrobić to z jednej strony to trzeba uwzględnić rezystancję kabla i uzyskanie 200mV po drugiej stronie będzie wymagało więcej jak 200mV po stronie z rezystorami. P.G.

Reply to
Piotr Gałka

Napisano tam "The receiver input has a fail-safe feature that guarantees a logic-high output if the input is open circuit." Jeśli dobrze rozumiem, to układ powinien działać prawidłowo bez konieczności stosowania rezystorów podciągających(?)

R.

Reply to
Robbo

Choć z drugiej strony open circuit to nie to samo do idle bus condition.

Reply to
Robbo

Użytkownik "Robbo" snipped-for-privacy@gmail.com napisał w wiadomości news:561b8cb1$0$27520$ snipped-for-privacy@news.neostrada.pl...

To oznacza, że gwarantuje 1-kę jeśli pracujesz bez rezystorów 120om na końcach linii. Da się przy odpowiednio niskiej prędkości w stosunku do długości kabla. Są też scalaki, które mają fail-safe zarówno przy rozwarciu jak i przy zwarciu linii. P.G.

Reply to
Piotr Gałka

Tak. To się nazwa niekiedy "true fail-safe for bus-idle condition". Szukam takiego scalaka od kilku godzin. Dobrze, jakby był przewlekany DIP8, zasilanie 5V, zabezpieczenie +15kV, true fail-safe. No i jeszcze przydałoby się, żeby dało się to gdzieś kupić ;) Na razie nie mam rezultatów tych poszukiwań.

R.

Reply to
Robbo

No chyba, że SN65HVD485EP firmy Texas Instruments.

Reply to
Robbo

Użytkownik "Robbo" snipped-for-privacy@gmail.com napisał w wiadomości news:561bb292$0$27514$ snipped-for-privacy@news.neostrada.pl...

Ja stosuję SN65HVD3082 ale nie wiem czy to jest w DIPie. Chyba jakieś MAX z numerkami typu 3082 też były. P.G.

Reply to
Piotr Gałka

przewlekany DIP8,

Można też wyjść z lat 80 i stosować drivery 3.3V np ltc1480, który sam wew. podciąga do 1 gdy A i B wiszą lub A-B=0.

Reply to
Marek

A masz idealnie synchronizowany nadajnik i odbiornik? Jeśli nie ma podciągów (zew. lub w driverze) to gdy kończysz nadawanie i przechodzisz na odbiór a druga strona nie zdąży jeszcze przełączyć się na nadawanie to przez ta chwilę linie "wiszą" bo oba układy są chwilowo w stanie wys. imp.

Reply to
Marek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.