- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 41

Thema: DMX512 empfangen

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Das ist nett, Guenter,
    läuft der Code denn?
    Ich habe bei Plischka und Darwin geluschert.
    Da gibt es schon fertige Module.
    zT mit Speicher, mit dem der Bus auch ohne PC weiterläuft.

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Stromi,

    bis jetzt ist es graue Theorie...

    Das mit dem gespeichertbleiben ergiebt sich automatisch.
    In dem oben gezeigten Code werden alle 512 Kanäle in Buffer() abgelegt. Bricht der DMX-Bus weg, bleiben die letzten übertragenen Werte in Buffer() ja erhalten. Die Frage ist, ob das sinnvoll ist.
    Aber wie gesagt, wenns mir um ein schnelles Ergebnis ginge, würde ich auch zum Fertigmodul greifen.

    In den nächsten Tagen kommt der Hardwaretest...

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Jo,
    lass dir Zeit.
    Will ja nur spielen

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    ui, da hab ich aber tief im Bastelordner suchen müssen ...
    naja, war damals fast and dirty zusammengestrickt, aber funktioniert:

    Code:
    
    ' #######################################
    ' DAS IST DER CODE !!!!!!
    
    $regfile = "m8def.dat"
    $crystal = 16000000
    
    $baud = 250000
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8
    
    
    Dim Timeout_counter As Byte , X As Byte , Y As Byte , Z As Byte , Fe_error As Byte
    Dim Adresse As Byte , Adresse2 As Byte , Pointer As Byte At &H82
    Dim Timercounter As Byte , Flag As Byte , Summe_pwm As Word
    Dim Pwm_werte(5) As Byte
    Dim Rotation_byte As Byte , Rotation_zaehler As Byte
    
    On Urxc Zeichenempfang
    Enable Urxc
    
    Const Pwm_teiler = 255 / 46
    
    Config Int0 = Falling
    On Int0 Nulldurchgang
    Enable Int0
    
    Config Timer0 = Timer , Prescale = 64
    On Timer0 Timer_irq
    Const Timervorgabe = 220
    Enable Timer0
    
    Enable Interrupts
    Config Portd.2 = Input
    Config Portb = Output
    Config Portc = Input
    ' interne Pullups an
    Portc = &HFF
    
    485_rw Alias Portc.6
    Config 485_rw = Output
    485_rw = 0
    
    Led Alias Portb.0
    
    Adresse = Pinc
    Adresse = Not Adresse
    Adresse = Adresse And &B00111111
    
    For Z = 1 To 4
       Pwm_werte(z) = 2
    Next
    
    Rotation_byte = &B10001000
    
    Do
       If Flag = 1 Then
          Flag = 0
          Y = Pointer
          Shift Y , Right , 2
          If Y = Adresse Then
             Y = Pointer
             Y = Y And &B00000011
             Incr Y
             Summe_pwm = Summe_pwm + X
             Pwm_werte(y) = X / Pwm_teiler
             Pwm_werte(y) = 49 - Pwm_werte(y)
          End If
       End If
    
       If Summe_pwm = 1020 Then
          If Rotation_zaehler > 30 Then
             Rotation_zaehler = 0
             Rotate Rotation_byte , Right , 1
          End If
    
          For Y = 1 To 4
              If Rotation_byte.y = 0 Then
                 Pwm_werte(y) = 60
              End If
          Next
       End If
    
        If Timercounter < 48 Then
           If Pwm_werte(1) <= Timercounter Then
             Set Portb.1
           Else
             Reset Portb.1
           End If
           If Pwm_werte(2) <= Timercounter Then
              Set Portb.2
           Else
              Reset Portb.2
           End If
           If Pwm_werte(3) <= Timercounter Then
              Set Portb.3
           Else
              Reset Portb.3
           End If
           If Pwm_werte(4) <= Timercounter Then
             Set Portb.4
           Else
             Reset Portb.4
           End If
        End If
        ' Pause für Zünden
        Waitus 10
        Portb = 0
    
       If Timeout_counter > 150 Then
         For Z = 1 To 4
             Pwm_werte(z) = 100
         Next
         Summe_pwm = 0
       End If
    Loop
    End
    
    Zeichenempfang:
       X = Udr
       If Fe_error = 1 And X = 0 Then
            Fe_error = 0
            Pointer = 0
            Summe_pwm = 0
       End If
       If Ucsra.fe = 1 Then
            Fe_error = 1
            Ucsra.fe = 0
       End If
       Incr Pointer
       Flag = 1
       Timeout_counter = 0
    Return
    End
    
    Nulldurchgang:
       Timercounter = 0
       Incr Timeout_counter
       Incr Rotation_zaehler
    Return
    End
    
    Timer_irq:
      Timer0 = Timervorgabe
      Incr Timercounter
    Return
    End
    Hab aber auch nur bis zu Adresse 255 genutzt, für 512 brauchst Du halt
    ne Word Variable

    @guenter1604:
    Deinen Code kannst Du aber noch ne ganze Ecke kürzen:

    Code:
    $regfile = "m88def.dat"
    $crystal = 16000000
    $baud = 250000
    
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8
    
    Dim Buffer(513)as Byte
    Dim Dmx_byte As Byte
    
    Dim Kanal As Word
    
    On Urxc Empfang
    Enable Urxc
    Enable Interrupts
    
    Do
    'Hier werden die Ausgänge von Buffer() bestückt
    Loop
    
    Empfang:
       If Ucsr0a.fe0 = 1 Then
          Kanal = 1
       Else
           Buffer(kanal) = Udr
           Incr Kanal
       End If
    Return
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Jo,
    vielen Dank!
    Beschaltung ist aus dem Code zu erkennen, glaube ich jedenfalls
    100Hz oder 50 Hz finde ich im Code?
    Würde es auch mit Solidstate-relais (ohne Nulldurgangsbaustein) gehen und wie warm wurden die Triacs?
    Weißt du's noch?

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Der verwendete Optokoppler für den Nulldurchgang hab beide
    Flanken ausgegeben, bzw. beide Nulldurchgänge.
    Die Triacs wurden kaum warm, hab mit 200W Je Kanal
    ohne Kühlkörper gearbeitet, allerdings im Bereich Show,
    sprich die Kanäle waren nicht über Stunden offen und da
    hatt ich keine Probleme mit Wärme.
    Obs mit Solid State Rel geht weiß ich nicht, hab ich nicht
    probiert.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Vitis,

    laut Spezifikation kommt vor dem Kanal 1 ein Startbyte, welches ich mit meinem Code überspringe.
    Aber für Codeverbesserungen hab ich immer ein offenes Ohr!
    In deinem Code setzt du den FrameError zurück: >>Ucsra.fe = 0 <<
    Ist das erforderlich? Dazu hab ich im Datasheet nix gefunden...

    Günter

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    mit dem 0-Byte am Anfang stimmt schon, laut Spec
    ist das, hab hier aber 2 "Profi" - DMX-Sender, einmal direkt
    USB und noch so n Ding, die ignorieren das einfach ...
    warum auch immer .....

    hmmm .... den FE .... ist schon ne Weile her,
    weiß nicht mehr warum ich das damals so gemacht
    hab, glaub ich hatt das irgendwo im DB gelesen, kanns
    aber nicht mehr beschwören.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Vitis, hallo NG,

    was mir gerade beim Hardware planen ein bisschen stört:
    nur um die DMX-Startadresse mit Schaltern einstellen zu können muß ich einige Pins am Controller verheizen. Hat jemand eine clevere Idee?

    Günter

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    klar, adresse 513 z.B. könnte die künftige Slaveadresse
    des Device werden
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen