- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 10

Thema: Duplex Datenübertragung über 20 Meter

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

    Duplex Datenübertragung über 20 Meter

    Anzeige

    E-Bike
    Hallo,

    ich möchte auf einer Strecke von ca. 20 bis 25 Meter Messdaten und Steuersignale übertragen.
    Ich dachte an eine Verarbeitung der Daten mit je einem Mega8 und einem kleinen Programm in Bascom.

    Nun meine Frage:
    Welche Schnittstelle soll ich wählen?
    Wäre eine RS232 oder RS485 besser?
    Die Daten sollen duplex übertragen werden.

    Wer kann mir ein paar Tips geben?

    Tobias

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    Voll- oder Halbduplex

    normalerweise sollte auch RS232 reichen, wenn man ein gescheites Kabel nimmt, wenn die Leitung aber an Stromleitungen usw. vorbeigeht, und auch eine höhere Geschwindigkeit gefordert ist, ist wohl RS485 bzw. RS422 besser, das lässt sich nicht so leicht stören.
    RS485 kann man auch für Vollduplex auslegen, i.d.Regel hat man da aber nur Halbduplex, weils dann weniger zum stören gibt.
    Und es lässt sich auch gleich ausbauen, wenn man schon RS485 angefangen hat, angeschlossen wirds auch an den UART des AVR, deshalb erstmal nicht komplizierter beim Programmieren wenn man nur 2 Teilnehmer hat.

    schon im Wiki geschaut -> RS485 ?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    habs mit rs485 gemacht, geht prima. wenn fragen dann fragen.

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

    hast du vielleicht ein kleines Beispiel?
    Habe mich mittlerweile über das Protokoll informiert. Das hört sich ziemlich kompliziert an!

    Tobias

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    was für ein protokoll meinst du?

    es gibt doch gar kein vorgeschriebenes protokoll, du kannst alles so machen wie du willst ...

    beschreib mal mehr was du übertragen willst, vom atmel zum pc und zurück oder von atmel zu atmel oder wie?


    bei mir ists so: ich tausche daten zwischen pc und atmel, der pc schickt ne anfrage los und der atmel antwortet.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    die Theorie kenn ich von folgender Seite:
    http://www.elektronik-projekt.de/inc...p&contentid=16

    Um mich ein bisschen ein zu arbeiten hatte ich vor, 3 Atmega 8 über einen Max 485 zu vernetzten.
    Einer ist der Master und fragt jeweils den Zustand eines Eingangs an den beiden Slave ab.

    Wenn ich dazu ein kleines Beispiel hätte würde mir der Einstig sicher leidter dallen!

    Hast du so was in dieser Art?

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    jo also, ich habs so gemacht (richtet sich nach dem eslip-protokoll):

    den slaves gibst du id´s, z.b. 1 +2.
    dann sendet der master ein startcommando (bei eslip: 200).
    dann die id.
    dann z.b. einen befehl den du dir ausdenkst.
    dann am besten noch eine checksumme.
    zum schluss das endcommand 201.

    hat der slave das empfangen antwortet der angesprochene dann ähnlich
    also 200 - id - befehl bzw daten - checksumme - 201

    der andere slave darf natürlich nicht gleichzeitig antworten. das würde dann kollisionen geben.

    hier mal ein codeschnippsel von mir:

    Check = Waitkey()

    If Check = 200 Then ; solange warten bis startcommando kommt
    For I = 1 To 4
    Check = Waitkey()
    Ar(i) = Check ; die nächsten 4 bytes speichern
    Next
    End If

    in dem fall hier wird gerade die id nicht ausgewertet sondern nur das startcommando.
    naja und dann liest du halt aus was für ein befehlt gekommen ist, z.b. befehl 1: was liegt an eingang sowieso an, und schickst die antwort.
    bzw. vorher überprüfen ob die checksumme stimmt, ansonsten gar nichts tun, oder eine fehlermeldung zurückschicken oder was auch immer.

    hier noch eine subroutine mit der ich den befehl 101 an die id 255 sende:

    Code:
    Sub Transmit_101
      Startcom = 200
      Command = 101
      id = 255
      Csum = 154
      Endcom = 201
    
    
      Set Portc.0                                               '485 auf senden
      Printbin Startcom;
      Printbin id;
      Printbin Command;
      Printbin Csum;
      Printbin Endcom;
    
      Do                                                 ' Warten bis das TXC Bit gesetzt ist.
      Loop Until Usr.txc = 1
    
      Set Usr.txc                                    ' zum zurücksetzen von TXC muss 1 geschrieben werden
                                                                 ' gemäß Datenblatt
      Portc.0 = 0                                               ' 485 auf empfang
    
    End Sub


    die id 255 ist bei mir so eine universal id auf die die geräte nicht antworten, d.h. es gibt keine rückmeldung ob der befehl angekommen ist, nur so nebenbei ...


    hoffe hab schonmal nen einstieg gegeben (hab übrigens selbst kaum ahnung, hab mir das zeug hier alles zusammengesammelt), kannst gerne weiter fragen stellen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2006
    Ort
    Nidda
    Alter
    51
    Beiträge
    180
    super! ich denke das müsste für den Anfang genügen.

    Danke
    Tobias

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

    habe jetzt mal versucht dein Beispiel nach zu vollziehen.
    Vom Programm ist es ja eigentlich ganz simel. Ich bekomme es aber nicht in die Praxis umgesetzt.

    Die Schaltung in der Anlage habe ich mit 2 Atmega 8 nachgebaut.
    Jetzt möchte ich am anderen Ende einfach nur eine LED einschalten.

    Wie müsste ich den Transfer in meinem Programm einleiten?

    Code:
    $regfile = "m8def.dat"
    
    Const Keys = 2
    
    Config Pinc.0 = Input
    
    
    Dim I As Byte
    Dim Key As Byte
    
    
     For I = 1 To Keys
     Key = I
     Select Case Key
     Case 1 : Debounce Pinc.0 , 0 , Key_o1 , Sub
     Case 1 : Debounce Pinc.1 , 0 , Key_o2 , Sub
    
     End Select
    
     Next
    
    Loop
    
       Key_o1:
    
       '..........
    
    
       Return
    
       Key_o2:
    
       '..........
    
    
       Return
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2wirers485bus_small.gif  

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    ääääähm sieht irgendwie ganz und gar nicht aus wie meine code-beispiele oder?

    sehe nix von startcommando, gerade mal empfangen von ner 1 sonst nix.
    den rs485 musst auch noch auf senden bzw. empfangen schalten
    diese txc bit geschichte muss auch rein

Berechtigungen

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

12V Akku bauen