- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: RS485 - brauch dringend Hilfe

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    Anzeige

    Praxistest und DIY Projekte
    den Fehler beim compilieren bekomme ich jetzt nicht mehr.

    Leider funktioniert auch dieses Programm bei mir nicht.

    Hast du es getestet?

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    Hallo Vitis,

    ich bin blutiger Anfänger und befinde mich im Selbststudium.
    Kannst du mir einen Beispielcode geben?

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Das Forum hat zwar auch ne Suche Funktion, aber trotzdem:

    ich hab den LTC485 für RS485 verbaut, kein Problem.
    Die Ansteuerung erfolgt wie beim Max485.
    Du hast normalerweise einen Eingang, einen Ausgang und
    2 Steuerpins für die Datenrichtung, von denen einer
    invertiert ist. Du kannst einfach die beiden Pins brücken
    und an einen Pin deines Mega führen.
    Die Ein- und Ausgänge des Max führst du jeweils an RX und TX vom
    Mega32 und fertig.
    Du kannst dann für die Kommunikation die gleichen Befehle wie für
    die normale UART über RS232 Kommunikation benutzen also
    print, waitkey inkey usw.
    wichtig bei der Handhabung vom RS485 ist, das er nicht volldupex läuft,
    sondern nur halbduplex. Daher ist es wichtig beim Umschalten der
    Datenrichtung der RS485-Busbausteine darauf zu achten, dass nicht noch
    Zeichen im UART-Buffer warten, weil die dann verloren gehen.
    Ich glaub hier im Forum war aber mal ne Bedienungsanleitung für 485 drinne ...

    Beispielcode für RS485:

    Rw485=1 (Schreibrichtung)
    print chr(255);"abcdefg"; (255 = Hex FF)
    do
    loop until Ucsra.txc=1 (prüfen auf leeren Sendepuffer)
    reset Ucsra.txc ' (wieder zurücksetzen für nächste Operation)
    Rw485 = 0 (Auf Empfangsbereitschaft)

    oder hier:
    https://www.roboternetz.de/phpBB2/ze...344&highlight=
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    Hallo Vitis,

    vielen Dank für deine Unterstützung.
    Mit der Suchfunktion bin ich leider noch nicht sehr viel weiter gekommen.
    ich versuche derzeit, ohne Vorkenntnisse, mich in Basic ein zu arbeiten.

    Leider stehe ich bei RS485 (oder auch 232) noch ganz am Anfang.

    Hier habe ich versucht dein Beispiel in einen Code um zu setzen (leider ohne Erfolg)

    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 9600
    
    
    
    Do
    
    Portd.2 = 1                                                 'Schreibrichtung
    
    Print Chr(255) ; "abcdefg"                                  '255 = Hex FF
    do
    
    Loop Until Ucsra.txc = 1                                    'prüfen auf leeren Sendepuffer
    
    Set Ucsra.txt                                               'wieder zurücksetzen für nächste Operation
    
    Portd.2 = 0                                                 'Auf Empfangsbereitschaft
    
    Loop
    
    End
    Gleich mal ein paar Fragen dazu:
    Muss ich Ucsra.txc nicht definieren? Wie?
    Wieso wird zwischen .txc unc .txt unterschieden?

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    txc - txt sind verschiedene Bits eines Registers, die den Übertragungsstatus anzeigen. txc = clear, also sendepuffer leer.
    die Definition des Registers wird bei Bascom über die def-Datei vorgenommen, für solche Fälle ist die speziell gemacht.
    Läuft bei c aber auch so ähnlich.

    Suche:

    485 und txc ... und schon kommen n paar passende ergebnisse.

    wie misst du? oszi oder multimeter?

    ach so, beim ltc kann man die übertragungsqualität verbessern indem man pullup und pulldown widerstände an die A-B-Leitungen macht. 10KR funktionieren bei mir prima
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    o.k. das habe ich verstanden.

    Messen muss ich im Moment mit einem Multimeter.
    Die Widerstände habe ich auch eingesetzt.

    habe ich das Programm richtig in Bascom geschrieben?
    Danach sollte jetzt ständig abcdefg im Terminalprogramm stehen.

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    jetzt versteh ich auch was du mit txt meinst, das ist n fehler in meinem beispielcode, sorry.
    streiche txt, setzt txc und dann stimmts.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2005
    Beiträge
    10

    Ich brauch auch hilfe

    Hallo Freunde des BASCOM'S

    ich hab folgendes Problem, wie Elkokiller beschrieben hat bin ich dran einen Hausbus über RS485 zu realisieren. Hab mich durch etliche Seiten und Doku's gewälzt und festgestellt dass das schon oft beschrieben SNAP-Protokoll das Beste ist, und vor allem leicht zu verstehen. Ich hab 3 mega8 und 3 2313 am Bus laufen und es geht prima. Es sind mit dem 2313 eine Tastenmudul, ein Relaismodul und ein Rollomodul was sich vom Relaismodul nur in der Soft unterscheidet. Elektronisch verriegelung der Relais. Also über den Bus mit dem Tastmodul kann ich die Relais prima schalten, nur möchte ich an den Modulen auch Taster betreiben die mir die gleich Funktion bringen wie das Tastenmodul, aber ich bekmm's einfach nicht hin. Ich poste mal das Versuchsprogramm mit 2 Relais.

    Code:
    'RS-485 4fach Relais für Hutschiene
    'mit 4 Tasten und RS485
    
    $regfile = "2313def.dat"
    $crystal = 4000000
    $baud = 4800
    
    Ddrb = &B00001111
    
    Config Portd.2 = Output
    
    Config Portd.3 = Input : Portd.3 = 1
    Config Portd.4 = Input : Portd.4 = 1
    Config Portd.5 = Input : Portd.5 = 1
    Config Portd.6 = Input : Portd.6 = 1
    
    'Dim S As String * 10
    Dim B(10) As Byte                                 'At S Overlay
    Dim N As Byte
    
    Const Preamble_ = &H55                            'H55
    Const Sync_ = &H54                                'H54
    Const Hdb2_ = &H51                                'H51
    Const Hdb1_ = &H42                                'H42
    'Const Myadress = &H 04
    
    Dim Myadress As Byte : Myadress = 6
    Dim Preamble As Byte
    Dim Sync As Byte
    Dim Hdb2 As Byte
    Dim Hdb1 As Byte
    'Dim Dab2 As Byte
    Dim Dab1 As Byte
    'Dim Sab2 as byte
    Dim Sab1 As Byte
    Dim Db1 As Byte
    Dim Db2 As Byte
    Dim Crc2 As Byte
    Dim Crc1 As Byte
    
    Dim X1 As Bit , X2 As Bit , X3 As Bit , X4 As Bit , X5 As Bit
    X1 = 0 : X2 = 0 : X3 = 0 : X4 = 0 : X5 = 0
    
    '----- Programm
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
     Portd.2 = 0
    
     Main:
      If N = 10 Then
        Preamble = B(1)
        Sync = B(2) : Hdb2 = B(3) : Hdb1 = B(4)
        Dab1 = B(5):                                  'Dab2=B(x)
        Sab1 = B(6) :                                 'Sab2=B(x)
        Db2 = B(7) : Db1 = B(8)
        Crc2 = B(9) : Crc1 = B(10)
        N = 0
        End If
    
     Gosub Ausgang
    
      If Sync <> Sync_ Then : Goto Main
        Elseif Hdb2 <> Hdb2_ Then : Goto Main
        Elseif Hdb1 <> Hdb1_ Then : Goto Main
        Elseif Dab1 <> Myadress Then : Goto Main
        End If
     '------------------------------------------------
     Ausgang:
    
             If Pind.3 = 0 Or Db2 = &H01 And X1 = 0 And X2 = 0 Then : X1 = 1 : Portb.0 = X1 : Waitms 500
     Elseif Pind.3 = 0 Or Pind.4 = 0 Or Db2 = &H01 Or Db2 = &H02 And X1 = 1 Then : X1 = 0 : Portb.0 = X1 : Waitms 500
    
    Elseif Pind.4 = 0 Or Db2 = &H02 And X2 = 0 And X1 = 0 Then : X2 = 1 : Portb.1 = X2 : Waitms 500
    Elseif Pind.4 = 0 Or Pind.3 = 0 Or Db2 = &H02 Or Db2 = &H01 And X2 = 1 Then : X2 = 0 : Portb.1 = X2 : Waitms 500
    
        End If
    
        'Goto Main
        Return
    Onrxd:
     Incr N
     B(n) = Udr
    
    Return
    
    End
    Wenn ich die Tasten benutze schalten die Relais je nach Taste, aber beim Tastenmodul wird zwar eeingschaltet, aber gleich darauf wieder aus.

    Hier mal das Programm vom Tastenmodul

    Code:
    $regfile = "2313def.dat"
    $crystal = 4000000
    $baud = 4800
    
    Ddrb = &B00000000
    Portb = &B00011111
    
    'Config Portd.3 = Input : Portd.3 = 1
    'Config Portd.4 = Input : Portd.4 = 1
    'Config Portd.5 = Input : Portd.5 = 1
    Config Portd.6 = Input : Portd.6 = 1
    
    Const Preamble_ = &B01010101                      'H55
    Const Sync_ = &H54                                'H54
    Const Crcpoly = &H1021
    Const Hdb2_ = &H51
    Const Hdb1_ = &H42
    Const Myadress = &H03
    
    Dim Preamble As Byte
    Dim Sync As Byte
    Dim Crc As Word
    Dim Hdb1 As Byte
    Dim Hdb2 As Byte
    Dim Dab1 As Byte
    Dim Dab2 As Byte
    Dim Db1 As Byte
    Dim Db2 As Byte
    Dim Sab1 As Byte
    Dim Crc2 As Byte
    Dim Crc1 As Byte
    Dim Temp1 As Byte
    Dim Temp2 As Byte
    Dim Tmpw1 As Byte
    Dim Tmpw2 As Byte
    
    'Preamble = Preamble_
    'Sync = Sync_
    
    'Db1 = &H3
    Db2 = &H0
    
    Dab1 = &H06                                       ' Adresse des Empfänger
    Sab1 = Myadress                                   'Adresse des Senders
    Crc2 = &H01
    Crc1 = &H01
    Portd.2 = 0
    
    '------------------------------------------------
    'hier Programmcode für Tastenabfage und Wertzuweisung
    'unterbringen
    'z.B.:
    ' If Pind.0 = 0 Then Db1=&h01
    '  goto Send
    '  End IF
    '
    'oder eine Select Case-Anweisung
    '
    '------------------------------------------------
    
    Tasten:
    Db1 = &H0
               If Pinb.4 = 0 Then : Db1 = &H01 : Goto _start
        Elseif Pinb.3 = 0 Then : Db1 = &H02 : Goto _start
        Elseif Pinb.2 = 0 Then : Db1 = &H04 : Goto _start
        Elseif Pinb.1 = 0 Then : Db1 = &H08 : Goto _start
        Elseif Pinb.0 = 0 Then : Db1 = &H0 : Goto _start
        Elseif Pind.6 = 0 Then : Db1 = &HF : Goto _start
        End If
    
    Goto Tasten
    
    
    _start:
    
         Portd.2 = 1 : Waitms 20                      'RS485 PIN auf Senden
         Print Chr(preamble_) ; Chr(sync_) ;
         Print Chr(hdb2_) ; Chr(hdb1_) ;
         Print Chr(dab1) ; Chr(sab1);
         Print Chr(db1) ; Chr(db2);
         Print Chr(crc2) ; Chr(crc1);
    
         Waitms 10 : Portd.2 = 0 : Wait 1             'RS485 PIN auf Enpfang
    
         'Goto _start
         Goto Tasten
    wen's Interessiert noch ein Programm für den Bus zu belauschen

    Code:
    'Einfacher String-Empfang
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 4800
    
    Dim S As String * 10
    Dim B(10) As Byte                                           'At S Overlay
    Dim N As Byte
    
    Const Preamble_ = &H55                                      'H55
    Const Sync_ = &H54                                          'H54
    Const Hdb2_ = &H51                                          'H51
    Const Hdb1_ = &H42                                          'H42
    'Const Myadress = &H 04
    
    Dim Myadress As Byte : Myadress = 4
    Dim Preamble As Byte
    Dim Sync As Byte
    Dim Hdb2 As Byte
    Dim Hdb1 As Byte
    'Dim Dab2 As Byte
    Dim Dab1 As Byte
    'Dim Sab2 as byte
    Dim Sab1 As Byte
    Dim Db1 As Byte
    Dim Db2 As Byte
    Dim Crc2 As Byte
    Dim Crc1 As Byte
    
    Ddrd = &B00110100
    Portd = &B11000000
    
    Ddrc = &B00110110
    Portc = &B00100100
    
    Spkr Alias Portd.7
    
    Config Lcd = 20 * 4
    Cls
    Cursor Off Noblink
    
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
     Portd.2 = 0
    
     '------------------------------------------------
     Main:
        If N > 9 Then
        Preamble = B(1)
        Sync = B(2) : Hdb2 = B(3) : Hdb1 = B(4)
        Dab1 = B(5) : Sab1 = B(6) : Db2 = B(7)
        Db1 = B(8) : Crc2 = B(9) : Crc1 = B(10)
        N = 0
        End If
    
       Gosub Anzeige
    
        If Sync <> Sync_ Then : Goto Main
        Elseif Hdb2 <> Hdb2_ Then : Goto Main
        Elseif Hdb1 <> Hdb1_ Then : Goto Main
        'Elseif Dab1 <> Myadress Then : Goto Main
        End If
    
        Goto Main
    
        Anzeige:
        Locate 1 , 1 : Lcd Hex(preamble) ; "-" ; Hex(sync) ; "-" ; Hex(hdb2) ; "-" ; Hex(hdb1)
        Locate 2 , 1 : Lcd "Empf:" ; Hex(dab1)
        Locate 2 , 10 : Lcd "Send:" ; Hex(sab1)
        Locate 3 , 1 : Lcd Bin(db1) ; "-" ; Bin(db2)
        Locate 4 , 1 : Lcd Hex(crc2) ; "-" ; Hex(crc1)
        Locate 4 , 10 : Lcd "Mya:" ; Hex(myadress) ; "-" ; Hex(dab1)
        Return
    
    
    Onrxd:
     Incr N
     B(n) = Udr
     
    Return
    das ist mit einem mega8 und LCD

    Hoffendlich kann mir jemand helfen ??

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2005
    Beiträge
    10

    RS 485 habs gefunden

    Hallo,
    mein Problem hat sich erledugt, durch den Code von Elkokiller habe ich den nötigen Geistesblitz bekommen und mein Programm läut. Ich werde nun das Ganze noch an die Gegebenheiten wie 2fach Relais- 2fach Rollosteuerung umsetzen. Beim Rollo mit softwaremäßen gegenseitigen Verriegelung.
    Mein 4fach Hutschienemodul läuft und davon wird es abgeleitet.

    Nockmal vielen Dank an Elkokiller

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    @PiCus
    Was haste denn im Relay-Programm geändert?
    Würde mich interessieren.
    MfG

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen