-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: einfaches Bussystem? (1 Master, x Slaves, nur Master sendet)

  1. #1

    einfaches Bussystem? (1 Master, x Slaves, nur Master sendet)

    Anzeige

    Hallo,

    ich habe jetzt schon einiges gelesen aber so richtig habe ich noch keine lösung.

    folgender Ansatz:
    ich habe einen mega32. dieser dient als master und muss pakete an mehrere mega8 (slaves) schicken.
    versendet werden immer 4 byte. wann die 4 bytes verschickt werden ist zeitlich unterschiedlich.
    desweiteren kann nur ein mega8 am bus hängen oder mehrere. es müssen alle mega8 die pakete empfangen, im ersten byte ist dann ne adresse drin (die ich halt selbst festlege) und damit weiß der entsprechende mega8 ob er gemeint ist oder nicht.
    die mega8 sollen nur zuhören. müssen nichts zurücksenden oder ähnliches.

    jetzt weiß ich nicht wie ich das am besten realisieren kann.
    mit UART muss ja wenn mich nicht alles täuscht auch was zurückgeschickt werden. ist schonmal schlecht. zumal ich bei den mega8 die timer-pins brauche, könnte dann also nur software-uart nutzen. das wollte ich eigentlich nicht.

    ich hab dann nur noch I2C ins auge gefasst. aber da komm ich nicht ganz klar mit wie das bei dem empfang aussieht. kann man damit einfach "zuhören"?

    gibt es vielleicht noch andere möglichkeiten?

    danke vorab.

    gruss Christian

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112

    Re: einfaches Bussystem? (1 Master, x Slaves, nur Master sen

    Zitat Zitat von goof1980
    Hallo,
    mit UART muss ja wenn mich nicht alles täuscht auch was zurückgeschickt werden.
    Du brauchst doch kein handshake zu machen. Sollte mich wundern, wenn da immer was zurück muss.
    Zitat Zitat von goof1980
    ist schonmal schlecht. zumal ich bei den mega8 die timer-pins brauche, könnte dann also nur software-uart nutzen.
    Was haben die Timer Pins mit dem UART zu tun?

    Auf dem sendenden Mega32 printest du die 4 bytes einfach, bei den beliebig vielen anderen empfängst du sie über den RxD Pin. Sollte meiner Meinung nach ohne Probleme funktionieren.

    Gruß

    Rolf

  3. #3
    das mit den timer-pins stimmt, hab es mit spi verwechselt.

    also müsste das funktionieren wenn ich den txd vom master an alle rxd der slaves anschließe, oder?

    reicht das dann schon?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von goof1980
    das mit den timer-pins stimmt, hab es mit spi verwechselt.

    also müsste das funktionieren wenn ich den txd vom master an alle rxd der slaves anschließe, oder?

    reicht das dann schon?
    Ich denke schon. Klar, GND natürlich auch noch miteinander verbinden.

  5. #5
    Werde es mal probieren.

    Besten Dank.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    Hi goof1980,

    eins hast Du uns noch nicht mitgeteil: wie weit liegen Deine Slaves auseinander?
    Ich habe mir ein Bussystem über TWI aufgebaut. Für weite Strecken habe ich dazu einen Buskopppler gebaut (Bild)
    So kann ich auch über weite Strecken überbrücken.
    Zur Übertragung habe ich die TWI Multimasterumgebung aus der Wiki genommen und so kann ich auch dem Slave etwas senden lassen.

    Gruß MAT
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken buskoppler.jpg  

  7. #7
    Also 100% steht das noch nicht fest. Ich schätze jetzt mal zwischen Master und erstem Slave maximal 10m. Die Slaves sind 2m voneinander entfernt. Vorerst sind 8 Slaves geplant.

    Hoffe das ist kein Problem. Hatte gehofft das ich keine Verstärker oder sowas brauche.

    Gruss Christian

  8. #8
    Ich habe mich nun entschlossen den Hardware UART zu nutzen. Ich hab also TXD vom Sender mit dem RXD vom Empfänger verbunden und auch GND.

    Allerdings blick ich bei den Sende- und Empfangsroutinen noch nicht so richtig durch. Da gibts ja mehrere Möglichkeiten wie man das machen kann.

    Ich möchte 4 Bytes senden.

    Der Sender verschickt das so:

    Code:
    Printbin Byte1 ; Byte2 ; Byte3 ; Byte4;
    Der Empfänger arbeitet so:

    Code:
      ' UART-Empfang
      If Usr.rxc = 1 Then
        ' Byte in Empfangspuffer schreiben
        Empfangs_byte(empfangs_byte_anzahl) = Udr
        ' nächstes Byte
        Incr Empfangs_byte_anzahl
        ' wenn alle 4 empfangen dann Speichern zum Auswerten und Starten der Auswertung
        If Empfangs_byte_anzahl > 4 Then
          Uart_auswerten = 1
          Empfangs_byte_anzahl = 1
        End If
      End If
    Aber irgendwie bin ich der Meinung das das so nicht richtig funktioniert. Scheinbar kommen zwar die Bytes an, aber vielleicht verdreht oder sowas. Hab leider kein LCD am Empfänger deswegen kann ich es schlecht kontrollieren. Wenn ich den PC als Empfänger anschließe sieht das senden grundsätzlich schon ganz gut aus.

    Bin ich auf dem richtigen Weg? Gibt es vielleicht schönere Routinen die ich nutzen könnte/sollte?

    Es muss halt "nebenbei" arbeiten und darf das laufende Programm nicht unterbrechen.

    Vielleicht kann mir ja jemand einen Tip geben.

    Vielen Dank vorab.

    Gruss Christian

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Bei dem Buskoppler-Schaltplan fehlen leider noch ein paar Junctions. Ist nicht klar erkennbar, was wo wie verbunden ist.
    #ifndef MfG
    #define MfG

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.383
    ich hab in etwa dieselbe konstellation (M128 Master, 8 M8 slaves + 1 M32)und verwende RS485, und 1 handshakeleitung, der rest is ne timingfrage, ausserdem benutz ich für jeden slave nen analogschalter/FET

    wenn der master an der strippe zieht, gehen die FETs zu und der slave kann nicht mehr ausversehn senden ... damit der slave weis, wann ne wichtige nachricht kommt und wann nur andere slavebytes übertragen werden, hängt die handshakeleitung für die FETs auch an einem Pin dran

    das "nebenbei" erledige ich mit nem kleinen empfangspuffer und ISRs, in der ISR schreib ich in den puffer (sofern es kein slavebyte war, aber UDR muss dennoch ausgelesen werden) und während des hauptprogramm an einer unkritischen stelle ruf ich den puffer auf vorhandene bytes ab und reagiere entsprechend

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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