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

ATmega 8 / SN75176BP połączenie

mk1265 15 Kwi 2010 18:44 14949 53
  • #1 15 Kwi 2010 18:44
    mk1265
    Poziom 11  

    witam buduje automatyczna sieć nawadniania szklarni I mam taki oto problem otóż w czujniku wilgotności muszę do Atmegi 8 podłączyć SN75176BP i nie wiem które ich piny i gdzie połączyć chciałbym aby ten rs485 nadawał sygnał do głównego sterownika.

    0 29
  • Sklep HeluKabel
  • #2 15 Kwi 2010 19:00
    tmf
    Moderator Mikrokontrolery Projektowanie

    To nie takie proste. Zauważ, że typowo RS485 to szyna half-duplex. Czyli oprócz sterowania portem UART, musisz także sterować kierunkiem transmisji. Czyli musisz mieć jakiś sensowny protokół transmisyjny i od tego zacznij. Samo podłączenie transceiwera jest proste - piny D i R łączysz z RxD i TxD, a DE/RE do pinu IO z którego będziesz sterował kierunkiem transmisji. Zastanó się czy nie łatwiej ci będzie wykorzystać CAN.

    0
  • #3 15 Kwi 2010 19:08
    mk1265
    Poziom 11  

    mam taki oto czujnik wilgotności :
    ATmega 8 / SN75176BP połączenie
    do A i B podłączony jest czujnik rezystancyjny

    Sygnał 2 chce podłączyć do przetwornika A/C w atmega 8. Następnie ATmege chce połączyć SN75176BP i chciałbym aby to był nadajnik natomiast odbiornik znajdowałby się na początku szklarni przy głównym sterowniku nawadniania, który bedzie zbudowany z ATmega 32. Ale wlasnie mam problem z połączeniem ATmega8 i SN75176BP bo nie jestem pewien który Pin do którego

    0
  • #4 15 Kwi 2010 20:50
    tmf
    Moderator Mikrokontrolery Projektowanie

    Podłączenie tak jak na rysunku, ktory mi wysłałeś jest ok. Tylko masa transceivera musi być połączona z masą układu. Piny RE/DE warto wysterować z osobnych pinów IO, ew. zrobić tak, żeby odbiornik był zawsze włączony. Ale to zależy od protokołu transmisji.

    Dodano po 37 [sekundy]:

    Oczywiście RS485 musi mieć terminatory na końcach i musisz zapewnić właściwą polaryzację A i B w spoczynku.

    0
  • #5 15 Kwi 2010 21:22
    mk1265
    Poziom 11  

    ATmega 8 / SN75176BP połączenie
    czy to miałeś na myśli?

    i jeszcze jedno co miałeś na myśli z terminatorami na końcach i tym że muszę zapewnić właściwą polaryzację A i B w spoczynku. Tak naprawde to ten czujnik będzie cały czas włączony bo według założeń co jakąś minutę-5minut będzie sprawdzany poziom wilgotności.

    0
  • Sklep HeluKabel
  • Pomocny post
    #6 15 Kwi 2010 22:42
    tmf
    Moderator Mikrokontrolery Projektowanie

    Chodzi o to, że jeśli nic nie nadaje to linie A i B magistrali muszą być odpowiednio spolaryzowane, tak, żeby różnica napięć pomiędzy nimi była >200mV. W przeciwnym wypadku odbiornik będzie szalał. Druga rzecz - musi być terminator, żeby dopasować impedancje odbiornika do impedancji linii, inaczej będą odbicia. Szczegóły znajdziesz w dokumentacji do RS485.

    0
  • #7 15 Kwi 2010 22:57
    mk1265
    Poziom 11  

    Przepraszam że zadaje takie pytanie ale niestety na mikrokontrolerach nie znam się jeszcze za dobrze jak do tej pory mało tego mieliśmy. W jaki sposób najlepiej spolaryzować te linie. A gdzie można znaleźć ten terminator w dokumentacji bo jakoś nie mogę znaleźć i czy jeżeli w czujniku będzie on odpowiadał za nadawanie również musi być

    0
  • #8 16 Kwi 2010 00:06
    atom1477
    Poziom 43  

    Pomiędzy A i B rezystor 120R (to będzie terminator).
    Od A do VCC 470R...1k2 (to będzie rezystor polaryzujący linię).
    Od GND do B 470R...1k2 (to będzie rezystor polaryzujący linię).
    DE i RE możesz złączyć i sterować razem.
    R podciągnął bym rezystorem 1k do VCC. Zgodnie z datasheetem bez tego rezystora maxymalne napięcie na tym pinie nie przekroczy 3V. Nie wspominając o krzakach na tym pinie gdy przełączysz układ 75176 w nadawanie. Choć u Ciebie problemu (krzaków) nie będzie bo chcesz jednokierunkową transmisję.
    Przy jednokierunkowej transmisji w ogóle możesz sobie darować podłączanie linii DE i RE do mikrokontrolera. Rezystory polaryzujące i terminator też.
    Ale w odbiorniku to wszystko musi być.

    0
  • #9 16 Kwi 2010 00:47
    mk1265
    Poziom 11  

    Na wszelki wypadek dla pewności umieszczam schemat w celu upewnienia sie czy o to właśnie chodziło
    ATmega 8 / SN75176BP połączenie

    0
  • Pomocny post
    #10 16 Kwi 2010 00:51
    atom1477
    Poziom 43  

    O to.

    0
  • #11 16 Kwi 2010 00:55
    mk1265
    Poziom 11  

    a ma znaczenie jaka wartość będzie tych rezystorów polaryzujących linie A i B bo napisałeś zakres od 470... 1k2

    0
  • #12 16 Kwi 2010 01:10
    atom1477
    Poziom 43  

    Ma. Małe mocno zmniejszają impedancję linii poniżej 120R.
    Duże słabo polaryzują linie. Powyżej 1,4k polaryzacja będzie niewystarczająca.
    1k jest w sam raz.

    0
  • #13 16 Kwi 2010 01:15
    mk1265
    Poziom 11  

    Skoro 1k będzie w sam raz to takie zastosuje dzieki

    0
  • #14 21 Kwi 2010 12:25
    mk1265
    Poziom 11  

    witam czy można prosić jeszcze o sprawdzenie tego schematu
    ATmega 8 / SN75176BP połączenie
    zamieniliśmy ATmega8 na Attiny13, na schemacie jest attiny12 ale to tylko ze względu na to że w Altiumie nie było tego modelu, ale wyjścia i footprint są takie same

    0
  • Pomocny post
    #15 21 Kwi 2010 12:44
    tmf
    Moderator Mikrokontrolery Projektowanie

    Wygląda ok. Dodaj tylko kondensatory blokujące 100nF przy procesorze i transceiverze.

    0
  • #16 21 Kwi 2010 12:51
    mk1265
    Poziom 11  

    A w którym dokładnie miejscu, przy wejściu ?

    0
  • Pomocny post
    #17 21 Kwi 2010 12:54
    atom1477
    Poziom 43  

    Przy pinach VCC i GND.

    0
  • #18 16 Lis 2010 01:54
    adambehnke
    Poziom 24  

    Przepraszam że podepnę się do tematu ale także walczę z RS485. I to walczę dobre kilka miesięcy!


    A zatem moje pytania:

    1.Rozumiem że terminator muszę umieścić na początku i końcu mojej linii rs485 ?
    2.Rezystory podciągające linie A i B muszą być przy każdym istniejącym module w sieci?
    3.Rezystor podciągający RX do VCC musi znajdować się w każdym module? Zapewne tak.
    4. Czy do transmisji używam tylko dwóch żył A i B czy muszę także ekranować kabel?
    5.Czy potrzebna jest wspólna masa dla każdego modułu?
    6.Czy wszystkie moduły mogą być zasilane z tego samego zasilacza? Coś czytałem że każdy powinien mieć niezależny zasilacz ale u mnie to by była makabra.


    Kolejna sprawa:

    7. W moich modułach pod złączone piny RE/DE mam podłączone diody led dzięki którym widzę kiedy moduł udziela odpowiedzi masterowi.
    Zdarza się nagminnie że dioda miga tylko z 1:10 jasności z jaką powinna migać podczas przełączania SN75176 na nadawanie. I w tym momencie moduł zaczyna wysyłać śmieci zamiast oczekiwanej odpowiedzi i blokuje całą sieć do tego stopnia że nawet moduł master zachowuje się identycznie i także w nim zachodzi ta sama sytuacja z miganiem leda.
    Dodam że podczas takiej anomalii odłączałem taki moduł od sieci rs485 myśląc że może sieć ma za małą rezystancję i zbyt mocno obciąża moduł. Jednak po odpięciu A i B od sieci led nadal ledwo migał (mowa akurat o masterze).
    Nie wiem o co w tym chodzi.


    Generalnie mam wielki problem aby spiąć kilka moich modułów w sieć.
    Sieć ma jednego mastera i 8 sleav-ów.
    Master wysyła zapytanie w stylu : "moduł_1_raport" i moduł 1 odpowiada.

    Czy schemat poniżej jest w 100% poprawny?

    mk1265 napisał:
    ATmega 8 / SN75176BP połączenie



    Mój master wygląda tak:

    ATmega 8 / SN75176BP połączenie


    Apropo diody D1 i D2 w zasilaniu to są one tylko na schemacie. Miały być niejako zabezpieczeniem na czas podłączania wszystkiego w całość. Teraz w ich miejscu są zworki.

    Moja sieć to jedna 150 metrowa linia gdzie podłączenia modułów mam zrealizowane w ten sposób że liniia jest łączona we wtyczce każdego modułu aby zminimalizować odległość modułu od linii głównej. Chciałem uniknąć topologii gwiazdy.
    Linia jest zaterminowana rezystorem 120R na początku w masterze i na końcu linii w ostatnim module.

    Dolutowałem w masterze podciąganie linii A i B dając rezystory 470R .

    Komunikacja w sieci raz działa a 10 razy nie .Czasem wszystko chodzi kilka dni bz problemu a czasem (jak dzisiaj) , siada non stop (problem z krzaczeniem i przygaśniętymi ledami)


    Głównie chodzi mi o to aby bardziej obeznani ode mnie koledzy w temacie RS485 pomogli mi i naprowadzili mnie na przyczynę usterek. Zaczynam już się poddawać.

    Dodam fragmenty kodu z mastera i jednego sleava ( wszystkie pracują na tym samym kodzie i mają tylko przypisane różne adresy aby uniknąć "gadania" kilku na raz).


    Master:

    Konfiguracja procesora,portów i kierunku sn75176:







    Code:
    '*******************************************************************************'
    
    '******************KONFIGURACJA TYPU I PRĘDKOŚCI MIKROPROCESORA*****************'
    '*******************************************************************************'
    $regfile = "m8def.dat"
    $crystal = 8000000                                                                        'PRACUJĘ NA WEWNĘTRZNYM OSCYLATORZE SKALIBROWANYM RĘCZNIE
    Osccal = 165                                                                              'RĘCZNA KALIBRACJA OSCYLATORA WEWNĘTRZNEGO
    $hwstack = 128                                                                            ' default use 32 for the hardware stack
    $swstack = 128                                                                            ' default use 10 for the SW stack
    $framesize = 128
    $baud = 19200
    '*******************************************************************************'


    '*******************************************************************************'
    '**************************Konfiguracja Portów**********************************'
    '*******************************************************************************'
    Config Portb.0 = Input                                                                    'NC
    Config Portb.1 = Input                                                                    'NC
    Config Portb.2 = Input                                                                    'NC
    Config Portb.3 = Input                                                                    'MOSI
    Config Portb.4 = Input                                                                    'MISO
    Config Portb.5 = Input                                                                    'SCK

    Config Portc.0 = Input                                                                    'VCC TESTER
    Config Portc.1 = Output                                                                   'STATUS LED
    Config Portc.2 = Input                                                                    'TEST SWITCH
    Config Portc.3 = Input                                                                    'NC
    Config Portc.4 = Input                                                                    'NC
    Config Portc.5 = Input                                                                    'NC

    Config Portd.0 = Input                                                                    'RXD
    Config Portd.1 = Output                                                                   'TXD
    Config Portd.2 = Output                                                                   'RS485 DIR
    Config Portd.3 = Input                                                                    'NET INTERRUPT  - WYBUDZANIE ZE ŚPIĄCZKI POPRZEZ SIEĆ
    Config Portd.4 = Input                                                                    'NC
    Config Portd.5 = Input                                                                    'NC
    Config Portd.6 = Input                                                                    'NC
    Config Portd.7 = Input                                                                    'NC

    Set Portc.2                                                                               'STAN WYSOKI ABY WYKRYĆ NA PINIE NACIŚNIĘCIE SWITCHA
    '*******************************************************************************'

    '*******************************************************************************'
    '*******************************KONFIGURACJA UART*******************************'
    '*******************************************************************************'
    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin = Buffered , Size = 200 , Bytematch = 13
    Config Serialout = Buffered , Size = 55
    Config Input = Cr , Echo = Crlf

    Config Print = Portd.2 , Mode = Set                                                       ' use portd.2 for the direction
    Rs485dir Alias Portd.2
    Config Rs485dir = Output
    Rs485dir = 0                                                                              ' go to receive mode
    '*******************************************************************************'





    Pętla główna:

    Code:

    '*******************************************************************************'
    '*******************************************************************************'
    '*******************************************************************************'
    '***************************PĘTLA GŁÓWNA PROGRAMU*******************************'
    '*******************************************************************************'
    '*******************************************************************************'
    '*******************************************************************************'
    Do




    '***ODBIÓR DANYCH Z UART*******'
         If Uart_flaga = 1 Then

            Input #1 , Dane Noecho
            'Waitms 5


                   'ŻĄDANIE RAPORTU OD MASTERA'
                   If Dane = "MASTER_RAPORT" Then
                      Clear Serialout
                      Raporcik = "MASTER_VCC=" + Supply + "_IDLE=" + Str(time_net) + "_STATUS=OK_END"
                      Raporcik = Raporcik + "_CRC=" + Str(checksum(raporcik))
                      Raporcik = Raporcik + "_TK"
                      Print #1 , Raporcik ; Chr(13) ;
                      Waitms 10
                   End If

                   'RESTART MASTERA'
                   If Dane = "MASTER_RESTART" Then

                      Clear Serialout
                      Print #1 , "MASTER_RESTART FIRMWARE" ; Chr(13);
                      Gosub Restart

                   End If

                   'RESTART CAŁEJ SIECI
                   If Dane = "NET_RESTART" Then Gosub Restart


                   'START SIECI RS485'
                   If Dane = "RS485_START" Then

                      Aex = Sender( "MASTER_START RS485")
                      Net = 1                                                                 'START SIECI
                      Time_net = 0

                   End If

                   'STOP SIECI RS485'
                   If Dane = "RS485_STOP" Then

                      Aex = Sender( "MASTER_STOP RS485")
                      Net = 0                                                                 'START SIECI
                      Time_net = 500                                                          '50 SEKUND DO AUTOMATYCZNEGO WZNOWIENIA STARTU SIECI

                   End If


            Uart_flaga = 0
            Clear Serialin
            Clear Serialout
            Dane = ""

         End If
    '**********'



    If Flaga(1) = 1 And Net = 1 Then

                 If Trx(3) = 0 Then Aex = Sender( "GSM_RAPORT")                               '*****X1***GSM
                 If Trx(3) = 1 Then Aex = Sender( "GSM_I_CALLS")                              '*****X2***GSM
                 If Trx(3) = 2 Then Aex = Sender( "POWER_RAPORT")                             '*****X3***ZASILACZ
                 If Trx(3) = 3 Then Aex = Sender( "GARAZ_RAPORT")                             '*****X4***GARAZ_RAPORT
                 If Trx(3) = 4 Then Aex = Sender( "GSM_RECEIVED_SMS")                         '*****X5***GSM_ODEBRANY SMS
                 If Trx(3) = 5 Then Aex = Sender( "GSM_SALDO")                                '*****X10****GSM SALDO
                 If Trx(3) = 6 Then Aex = Sender( "BAROMETR_RAPORT")                          '*****X11****BAROMETR INFO
                 If Trx(3) = 7 Then Aex = Sender( "TEMP_RAPORT")                              '*****X12****MODUŁ TEMPERATUROWY - INFO
                 If Trx(3) = 8 Then Aex = Sender( "KOMINEK_RAPORT")                           '*****X13****KOMINEK INFO
                 If Trx(3) = 9 Then Aex = Sender( "LIGHT1_RAPORT")                            '****X15****OŚWIETLENIE 1 -INFO
                 If Trx(3) = 10 Then Aex = Sender( "KEYPAD_RAPORT")                           '*****X17****KEYPAD PRZY DRZWIACH INFO
                 If Trx(3) = 11 Then Aex = Sender( "SYNTH_RAPORT")                            '*****X20****SYNTEZATOR LOKALNY - INFO
                 If Trx(3) = 12 Then Aex = Sender( "SENSOR1_RAPORT")
                 If Trx(3) = 13 Then Aex = Sender( "SENSOR2_RAPORT")
                 If Trx(3) = 14 Then Aex = Sender( "TERMINAL1_RAPORT")
                 If Trx(3) = 15 Then Aex = Sender( "TERMINAL2_RAPORT")

           Flaga(1) = 0

    End If


    '***PSEUDO PRZERWANIA*******'
    If Flaga(2) = 1 Then Gosub Voltage_vcc
    If Flaga(3) = 1 Then Gosub Test_portow
    '**********'




    Reset Watchdog
    Loop



    Przerwanie od uart:

    Code:
    Serial0charmatch:
    

         Uart_flaga = 1                                                                       'ODEBRANO JAKIEŚ DANE

    Return



    Funkcja wysyłająca zapytania do sleavów:

    Code:
    Function Sender(byval Ssr As String) As Integer
    


                      Clear Serialout

                      Print #1 , Ssr ; Chr(13);
                      Waitms 30

                      Flaga(1) = 0
    End Function









    Moduł sleave:

    Konfiguracja:

    Code:
    '*******************************************************************************'
    
    '******************KONFIGURACJA TYPU I PRĘDKOŚCI MIKROPROCESORA*****************'
    '*******************************************************************************'
    $regfile = "m16def.dat"
    $crystal = 11059200
    '$crystal = 8000000    'DLA REZONATORA WEWNĘTRZNEGO
    'Osccal = 166          'DLA REZONATORA WEWNĘTRZNEGO -WARTOŚĆ DLA PROCESORA W MODULE NR.1
    $hwstack = 64                                                                             ' default use 32 for the hardware stack
    $swstack = 64                                                                             ' default use 10 for the SW stack
    $framesize = 64
    $baud = 19200
    '*******************************************************************************'


    'A**********************************************************************************'
    '*********************************FUSE-BITY*****************************************'
    '***********************************************************************************'
    '$PROG &HFF,&H3F,&H5F,&H00' generated. Take care that the chip supports all fuse bytes.'     'ODBLOKOWAĆ NA CZAS PROGRAMOWANIA NOWEGO PROCESORA
    '***********************************************************************************'


    '*******************************************************************************'
    '*******************************KONFIGURACJA UART*******************************'
    '*******************************************************************************'
    Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin = Buffered , Size = 170 , Bytematch = 13
    Config Serialout = Buffered , Size = 155
    Config Input = Cr , Echo = Crlf

    Config Print0 = Portd.2 , Mode = Set                                                      ' use portd.2 for the direction
    Rs485dir Alias Portd.2
    Config Rs485dir = Output
    Rs485dir = 0
    '*******************************************************************************'



    Pętla główna:


    Code:
    '*******************************************************************************'
    
    '*******************************************************************************'
    '*******************************************************************************'
    '****************************PĘTLA GŁÓWNA PROGRAMU******************************'
    '*******************************************************************************'
    '*******************************************************************************'
    Do

    '************************************
    'PRZERWANIE OD UART
    '************************************
        If Uart_flaga = 1 Then

           Input Rs485_dane Noecho
           'Waitms 4

       
                   'ŻĄDANIE RAPORTU
                   If Rs485_dane = "SENSOR1_RAPORT" Then
                      Clear Serialout
                      Print Raport ; Chr(13) ;

                   End If

                   'RESTART'
                   If Rs485_dane = "SENSOR1_RESTART" Then

                      Clear Serialout
                      Print "SENSOR1_RESTART FIRMWARE" ; Chr(13);
                      Gosub Restart

                   End If

                   'RESTART CAŁEJ SIECI
                   If Rs485_dane = "NET_RESTART" Then Gosub Restart


           Reset Watchdog
           Uart_flaga = 0
           Clear Serialin
           Clear Serialout
           Rs485_dane = ""

        End If



    Reset Watchdog
    Loop



    Przerwanie od uart:

    Code:
    Serial0charmatch:
    
        Uart_flaga = 1
                                                                              'ODEBRANO JAKIEŚ DANE
    Return



    Wiem że sporo napisałem w tym poście ale chciałem przybliżyć maksymalnie mój problem.

    Dodam jeszcze schemat mastera (nie ma na nim rezystorów podciągających AiB) oraz jednego sleava.

    Master:
    ATmega 8 / SN75176BP połączenie

    Sleave:
    ATmega 8 / SN75176BP połączenie



    Za pomoc w rozwiązaniu problemów jestem w stanie nawet zapłacić osobie która mi pomoże ( przedstawi rozwiązanie, ewentualny schemat sieci , wyjścia mastera i sleave z procesora poprzez SN75175 do sieci , kawałki kodu odpowiedzialne za odbiór i nadawanie) . Generalnie jestem otwarty na każdą pomoc i podpowiedź. Również krytyki się nie boję i zniosę wszystko*

    0
  • #19 16 Lis 2010 10:14
    atom1477
    Poziom 43  

    1. Tak
    2. Tak
    3. Tak
    4. Nie musisz ale możesz zaekranować.
    5. Tak.
    6. Tak.

    Nie sterujesz pinem Rs485dir więc nic dziwnego że to nie działa.

    Dodano po 14 [minuty]:

    Ja robię tak:

    Master:

    Code:

    Do
      Rs485dir = 1
      Nadawanie rządania odesłania czegoś
      Rs485dir = 0

      Waitms 100
    Loop
    UART_int:
      Odbieranie w przerwaniu.
    Return


    Slave:
    Code:

    Do
      If Rs485dir = 1 Then
        Odesłanie czegoś
        Rs485dir = 0
      End If
    Loop
    UART_int:
      Odbieranie w przerwaniu.
      Id Odeslij = 1 Then
        Rs485dir = 1
      End If
    Return

    1
  • #20 16 Lis 2010 20:21
    adambehnke
    Poziom 24  

    Ale z tego co czytałem to sterowanie pinem rs485dir odbywa się w pełni automatycznie.
    W sposób podany przez Ciebie sterowałem nadawanie wcześniej. Czy po włączeniu nadajnika muszę czekać jakiś czas zanim zacznę nadawać? To samo po nadawaniu i przed przełączeniem na odbiór?

    0
  • #21 16 Lis 2010 21:49
    atom1477
    Poziom 43  

    Przed włączeniem nadawania nawet nie trzeba czekać. Jak już to jakieś us dla pewności.
    Po nadaniu co innego. Wypadało by poczekać czas trwania jednego znaku.
    Bo wpisanie znaku do rejestru UDR rozpocznie nadawanie ale program od razu pójdzie dalej poza funkcje do nadawania (tak jak by nadanie już się zakończyło).
    Tak więc nie można od razy przełączać na odbiór. Musowo poczekać czas trwania jednego znaku.

    Sterowanie pinem rs485dir w żadnym wypadku nie odbywa się automatycznie. Nie wiem gdzieś to wyczytał.
    Zresztą to chyba oczywiste. Sam sobie zadeklarowałeś ten pin więc skąd BASCOM ma wiedzieć że to właśnie ten pin jest do sterowania transmisją? I skąd ma wiedzieć że w ogóle transmisją trzeba sterować? Dla BASCOMa jest to po prostu zwykły pin któremu sobie przypisałeś nazwę rs485dir. Jedynie dla wygody.

    0
  • #22 16 Lis 2010 23:07
    adambehnke
    Poziom 24  

    A w nowym helpie w Bascomie 2.0.1 .
    Tu Masz przykład z sampli Bascoma:

    Code:
    '------------------------------------------------------------------------------
    
    'name                     : .bas
    'copyright                : (c) 1995-2005, MCS Electronics
    'purpose                  : demonstrates
    'micro                    : Mega48
    'suited for demo          : yes
    'commercial addon needed  : no
    '------------------------------------------------------------------------------
    $regfile = "m48def.dat"                                                                   ' we use the M48
    $crystal = 8000000
    $baud = 19200

    $hwstack = 32
    $swstack = 32
    $framesize = 32

    Config Print0 = Portb.0 , Mode = Set
    Config Pinb.0 = Output                                                                    'set the direction yourself

    Dim Resp As String * 10
    Dim S As String * 10
    S = "string"
    Do
       Print "test message"
       Print S
       Input Resp                                                                             ' get response
    Loop


    i nie widać tu aby włączany był nadajnik przed Print. Może coś tu namieszane ale widziałem to w kilku przykładach z MCS.


    Zobacz ten cytat z helpa:
    "
    Cytat:
    Syntax

    CONFIG PRINT0 = pin

    CONFIG PRINT1 = pin





    Remarks

    pin
    The name of the PORT pin that is used to control the direction of an RS-485 driver.

    mode
    SET or RESET




    Use PRINT or PRINT0 for the first serial port. Use PRINT1 for the second serial port.



    When you use RS-485 half duplex communication you need a pin for the direction of the data. The CONFIG PRINT automates the manual setting/resetting. It will either SET or RESET the logic level of the specified pin before data is printed with the BASCOM print routines. After the data is sent, it will inverse the pin so it goes into receive mode.

    0
  • #23 16 Lis 2010 23:21
    mirekk36
    Poziom 42  

    atom1477 napisał:

    Sterowanie pinem rs485dir w żadnym wypadku nie odbywa się automatycznie. Nie wiem gdzieś to wyczytał.
    Zresztą to chyba oczywiste. Sam sobie zadeklarowałeś ten pin więc skąd BASCOM ma wiedzieć że to właśnie ten pin jest do sterowania transmisją? I skąd ma wiedzieć że w ogóle transmisją trzeba sterować? Dla BASCOMa jest to po prostu zwykły pin któremu sobie przypisałeś nazwę rs485dir. Jedynie dla wygody.


    Bascom od dawna ma taką funkcję i konfiguruje się to ładnie podając właśnie jaki pin przeznaczasz na sterowanie DE. Potem już wszystko na przerwaniach działa i nie trzeba nic samemu mieszać ;)

    0
  • #24 16 Lis 2010 23:33
    adambehnke
    Poziom 24  

    Czyli co może powodować takie zachowanie moich modułów? Brak rezystorów podciągających A i B w każdym module i brak podciągnięcia RX ?
    Chce się upewnić że połączenia sprzętowe są poprawne i tym samym chcę wykluczyć wszystkie możliwe problemy elektroniczne w modułach aby skupić się tylko i wyłącznie nad protokołem sieci.

    0
  • #25 17 Lis 2010 00:02
    atom1477
    Poziom 43  

    mirekk36 napisał:
    atom1477 napisał:

    Sterowanie pinem rs485dir w żadnym wypadku nie odbywa się automatycznie. Nie wiem gdzieś to wyczytał.
    Zresztą to chyba oczywiste. Sam sobie zadeklarowałeś ten pin więc skąd BASCOM ma wiedzieć że to właśnie ten pin jest do sterowania transmisją? I skąd ma wiedzieć że w ogóle transmisją trzeba sterować? Dla BASCOMa jest to po prostu zwykły pin któremu sobie przypisałeś nazwę rs485dir. Jedynie dla wygody.


    Bascom od dawna ma taką funkcję i konfiguruje się to ładnie podając właśnie jaki pin przeznaczasz na sterowanie DE. Potem już wszystko na przerwaniach działa i nie trzeba nic samemu mieszać ;)

    Ale ten pin trzeba podać BASCOMowi w odpowiedniej dyrektywie a nie zadeklarować go sobie samemu jako Alias do jakiegos tam PortuX.y

    0
  • #26 17 Lis 2010 00:07
    mirekk36
    Poziom 42  

    atom1477 napisał:
    Bascom od dawna ma taką funkcję i konfiguruje się to ładnie podając właśnie jaki pin przeznaczasz na sterowanie DE. Potem już wszystko na przerwaniach działa i nie trzeba nic samemu mieszać ;)

    Ale ten pin trzeba podać BASCOMowi w odpowiedniej dyrektywie a nie zadeklarować go sobie samemu jako Alias do jakiegos tam PortuX.y[/quote][/quote]

    Jak najbardziej ;) ... no i pytający przecież to zdefiniował dyrektywą Config Print xxxxxxx

    0
  • #27 17 Lis 2010 00:08
    atom1477
    Poziom 43  

    A, ok. Chodzi o to:

    Code:

    Config Print = Portd.2 , Mode = Set

    ?
    No to dobra. Jest. Ale w sumie nie wiadomo czy to działa. Albo czy dobrze działa.

    0
  • #28 17 Lis 2010 00:11
    mirekk36
    Poziom 42  

    atom1477 napisał:
    A, ok. Chodzi o to:
    Code:

    Config Print = Portd.2 , Mode = Set

    ?
    No to dobra. Jest. Ale w sumie nie wiadomo czy to działa. Albo czy dobrze działa.


    Działa dobrze i nie tylko w sumie ale nawet różnicy, że tak to ujmę. Ja myślę, że w helpie by autor Bascoma tego ot tak sobie nie wstawił bez sprawdzenia czy działa.

    0
  • #29 17 Lis 2010 00:11
    adambehnke
    Poziom 24  

    No właśnie jak mówi help wystarczy ta linia aby bascom wiedział że ma sterować kierunkiem przez ten pin

    Code:
    Config Print0 = Portb.0 , Mode = Set 


    Specjalnie studiuję teraz nowego helpa i z tego co widzę nic więcej nie potrzeba. Używam tej konfiguracji w moim testowym module i w połączeniu z PC "gada" bezbłędnie. Ale jak połączę kilka takich modułów to dzieją się istne cuda.
    Wydaje mi się że moje problemy są raczej tylko natury elektronicznej.

    Może Macie jakiś schemat( albo kawałek schematu) swojego działającego sprawnie modułu na rs485. Chcę to porównać z moimi schematami i zobaczyć dokładnie o co biega.

    0
  • #30 17 Lis 2010 00:50
    atom1477
    Poziom 43  

    mirekk36 napisał:
    atom1477 napisał:
    A, ok. Chodzi o to:
    Code:

    Config Print = Portd.2 , Mode = Set

    ?
    No to dobra. Jest. Ale w sumie nie wiadomo czy to działa. Albo czy dobrze działa.


    Działa dobrze i nie tylko w sumie ale nawet różnicy, że tak to ujmę. Ja myślę, że w helpie by autor Bascoma tego ot tak sobie nie wstawił bez sprawdzenia czy działa.

    No nie wiem nie wiem. Wiele przecież błędów co raz wynika w BASCOMie.
    A w helpie przecież widnieją jako działające.
    Ale mniejsza o to.

    0