Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

rs485 problem z przełączaniem między odbiorem a nadawaniem

sparrow1 02 Lip 2008 22:50 3239 13
  • #1 02 Lip 2008 22:50
    sparrow1
    Poziom 9  

    Witam

    zaimplementowałem protokół Modbus i wykonałem 1 urządzenie master i Slave na mikroprocesorach ATMEGA32. Podczas komunikacji przez rs485 slave nie odbiera poprawnej odpowiedzi. W masterze gdy przechodzę na wysyłanie ramki to ustawiam "1" do bitu sterowania układam rs485 a gdy przechodzę do odbioru to ustawiam "0". Jezeli ustawię na stałe "1" do bitu sterowania w ukladzie odpowiednika max 485 w masterze to Slave odbiera poprawną wiadomość. Slave ma bit sterowania ustawiony na stałe na "0" (odczyt).

    Protokół jest napewno zaimplementowany poprawnie ponieważ przy użyciu rs232 wszystko działa poprawnie. Według mnie problem polega gdzieś w hardware interfejsu rs485. Niestety nie mogę zamieścić programu ponieważ jest on bardzo długi (język C).

    Poniżej przedstawiam schemat podłączenia interfejsu zarówno w Master jak i w Slave

    rs485 problem z przełączaniem między odbiorem a nadawaniem

    Proszę o pomoc

    Pozdrawiam

    0 13
  • #2 03 Lip 2008 00:04
    markosik20
    Poziom 33  

    A ile taktów (ile czasu) wcześniej przed rozpoczęciem nadawania przestawiasz ten bit?

    0
  • #3 03 Lip 2008 00:16
    kamyczek
    Poziom 34  

    Miałem podobny problem z rs 485 gdyż nie chciał on działać poprawnie wszystko rozwiązała przerwaniowa obsługa uarta ja użyłem asemblera. Wszystko działa poprawnie jeśli zadbasz o odpowiednie interwały czasowe.

    0
  • #4 03 Lip 2008 08:51
    sparrow1
    Poziom 9  

    Napewno kilkanaście taktów przed wysłaniem ponieważ ustawiam ten bit następnie jeszcze jedna zmienna, następnie wchdzę do funkcji, która wyłącza odbiornik i włącza nadajnik i dopiero wtedy nadajnik zgłasza przerwanie że jest pusty bufor.

    0
  • #5 03 Lip 2008 09:50
    kamyczek
    Poziom 34  

    Podepnij oscyloskop i sprawdź czy nie masz śmieci na magistrali

    0
  • #6 03 Lip 2008 10:18
    sparrow1
    Poziom 9  

    Z tym będize problem bo nie posiadam, spróbuje podpiąć komputerowy symulator oscyloskopu i zobaczę co tam się dzieje

    0
  • #7 03 Lip 2008 20:15
    markosik20
    Poziom 33  

    sparrow1 napisał:
    Napewno kilkanaście taktów przed wysłaniem ponieważ ustawiam ten bit następnie jeszcze jedna zmienna, następnie wchdzę do funkcji, która wyłącza odbiornik i włącza nadajnik i dopiero wtedy nadajnik zgłasza przerwanie że jest pusty bufor.


    Bit bitem ale czu ustawiawsz fizycznie stan na tej końcówce przed rozpoczęciem wysyłania?
    U mnie wystarczy takie coś:
    Code:
    RS485_NADAWANIE; //ustawienie w tryb nadawania
    
    UDR=*"*"; ..rozpoczecie transmisji

    0
  • #8 04 Lip 2008 01:08
    sparrow1
    Poziom 9  

    Ustawiam stan wysoki przy wysylaniu oraz niski przy odbieraniu.

    0
  • #9 29 Sie 2008 11:16
    DmZ
    Poziom 17  

    widzialem pewien patent na ep. w konwerterze rs232/485 uzyto ne555. reagowal na pojawienie sie danych od uarta i ustawial automatycznie nadawanie na 485. nie robilem tego w praktyce, ale podobno dziala.

    0
  • #10 26 Sie 2015 19:53
    Sylwek07
    Poziom 11  

    Czy ktoś sobie poradził z tym problemem? Wiem że przyczyna tkwi w czasach przełączania. Trzeba wiedzieć w którym dokładnie momencie przełączyć MX485. Albo MAX485 wysyła jakieś śmieci podczas przełączania które zakłócają transmisję. Ja mam w Bascomie podobny problem, udaje mi się przesyłać jedynie bajty z pewnego zakresu wartości. Próbowałem już z instrukcjami Waitms, odczytywaniem bitu w rejestrze TXCIE i TXC który określa kiedy bufor nadawczy jest już pusty. Kiedy nie przełączam kierunku wszystko jest OK.

    0
  • #11 26 Sie 2015 20:05
    373522
    Użytkownik usunął konto  
  • #12 27 Sie 2015 09:22
    Sylwek07
    Poziom 11  

    Wielkie dzięki niveasoft nie wiedziałem o tej instrukcji. Jednak w moim przypadku problem nie został rozwiązany. Ja używam SN65176 który jest zamiennikiem MAX485 i okazuje się że on w momencie przełączania generuje jakąś szpilkę która przez odbiornik jest traktowana jak odebranie bajtu o wartości 0.

    0
  • #13 27 Sie 2015 09:41
    373522
    Użytkownik usunął konto  
  • #14 27 Sie 2015 09:58
    Sylwek07
    Poziom 11  

    Problem już został rozwiązany. Okazało się że użyłem dwóch rezystorów 680R podciągających linie A i B do VCC i GND i podciągnąłem A i B w nieodpowiednią stronę. Linia A powinna być podciągnięta do VCC. W EP wyczytałem że zapewniają one prawidłowe stany logiczne kiedy wszystkie konwertery RS485 są przełączane w odbiór. Kiedy nie było potrzeby zmieniać kierunku wszystko było OK, dopiero w momencie kiedy trzeba było zmienić kierunek to pojawiała się szpilka która wynikała ze zmiany poziomów napięć.

    0
  Szukaj w 5mln produktów