- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

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

  1. #11
    Anzeige

    E-Bike
    hat jemand evtl. einen beispielcode für sender und empfänger?

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    für was? TWI SPI UART ??

  3. #13
    für UART.

    und gleich noch eine Frage. Wartet der Sender beim verschicken eines Bytes per UART irgendwie auf eine Antwort? Ich frage weil ich nur die Sendeleitung nutzen will und keine Rückleitung (damit mehrere Empfänger auf dasselbe Signal hören).

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    nein, der sendet eine fallende flanke( das startbit), dann 8 datenbits(falls es so eingestellt ist) und ein stopbit(falls so eingestellt)

    wenn der empfänger das byte nur zu hälfte empfang merkt der sender davon garnichts

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43
    Ich habe auch so eine ähnliche Konfiguration.
    Bei mir sendet ein Atmega8 an 7 andere Atmega8.

    Ich habe einen RS485-Bus verwendet, da dieser am Störunanfällisten ist.
    Ich verwende einfachen Klingeldraht über Distanzen bis zu ca. 30m
    ohne Probleme.

    Und Timing-Probleme gibts auch nicht ; es sendet doch in deinem Fall nur der
    Master; und der weiss doch wohl, wenn der Bus benutzt wird. !!!

    Als Ankopplung an den Bus verwende ich MAX485 im Halpduplexbetrieb.

    Gruß

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    halbrichtig hellraider, woher wissen deine slaves, dass die daten auf dem bus vom master tammen und nicht von nem anderen slave ich hab das wie gesagt mit ner "slave talk enabled" leitung und ein klein wneig timing gelöst, mit 1MBaud und maximaler verzögerung durch programmlogik(empfang ist interruptgesteuert, verarbeitung sequentiell im programm eingebaut) hab cih ne reaktionszeit von ca 15-20 µS

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Also mein Projekt ist noch nicht ganz fertig aber funktioniert soweit:


    Der Sender startet eine Anfrage an den entsprechenden Slave.
    Also wenn der MASTER von Slave1 den Strom wissen will sieht das so aus:

    Print "#S1,Strom"

    __________________________________________________ __________
    Der Empfang ist etwas aufwändiger:

    zuerst wird nachgesehen ob die empfangene Nachricht auch für diesen slave ist. Als nächstes wird nachgesehen was der Master wisssen will: zb. Strom. Dann wird gesendet: von (Slave1) was (Strom) und natürlich der Wert, der ja die eigentliche Anfrage ist Da das Programm noch im test ist wird alles auf LCD ausgegeben also nicht verwirren lassen. Zur Reichweite kann ich noch nichts sagen. zur Zeit habe ich fliegnde verdrahtung mit 1m klingeldraht und die µC direkt verbunden also auf 5V Pegel und ein Max232 zur kontrolle am PC.

    Code:
    Main:
    
    'auf Empfang reagieren:
    If E_flag = 4 Then                                          'Empfangsstring komplett
      If Slave = "S1" Then                                      'wenn Daten für Slave1
    
           Select Case Parameter
    
                   Case "Strom" : Print "#S1,Strom:" ; Strom
                                  Locate 1 , 1
                                  Lcd "S..." ; Slave ; "," ; Parameter ; ":" ; Strom
    
                   Case "Volt" : Print "#S1,Volt:" ; Volt
                                 Locate 1 , 1
                                 Lcd "S..." ; Slave ; "," ; Parameter ; ":" ; Volt
    
                   Case Else : Print "Err."
    
           End Select
    
    
      End If
    
      'Daten auf jedenfall löschen
      Slave = ""                                                'Slave löschen
      Parameter = ""                                            'Parameter löschen
      Wert = ""                                                 'Wert löschen
      E_flag = 0                                                'Empfang neu setzen
    End If
    
    goto Main
    
    '_________
    Onrxd:
    E_byte = Udr
    Select Case E_byte
      Case 35 : E_flag = 1                                      '"#" = Slave wird gesendet
      Case 44 : E_flag = 2                                      '"," = Parameter kommt
      Case 58 : E_flag = 3                                      '":" =
      Case 13 : E_flag = 4                                      '"ENTER" = Empfang komplett
      Case Else : If E_flag = 1 Then Slave = Slave + Chr(e_byte)
                   If E_flag = 2 Then Parameter = Parameter + Chr(e_byte)
                   If E_flag = 3 Then Wert = Wert + Chr(e_byte)
    
    End Select
    Der Master hat natürlich auch eine so ähnliche Empfangsprogrammierung - logisch sonst könnte er ja die eigene Anfrage an den Slave nicht empfangen.

    Das meiste davon kannst du ja weglassen, da du ja nur in eine Richtung senden möchtest

    viel Erfolg,
    Tobias
    ...

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test