- Labornetzteil AliExpress         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 41

Thema: DMX512 empfangen

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Anzeige

    E-Bike
    ach, auf Basis von meinem dort geposteten Code?

    Poste mal Deinen Sender Code, dann kann man evtl. helfen.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

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

    der Sender läuft wieder einwandfrei, der Knackpunkt war, daß ich die Senderoutine nicht in einem Interrupt untergebracht hatte. Dadurch haben meine neuen Gimmecks im Sender (I2C-Display, Inkrementalgeber usw.) mit ihren Interrupts das Protokoll zerschossen.

    Anbei die eigentliche Senderoutine. Sie ist für einen 8 MHz-Quarz ausgelegt...
    Code:
    Ontimer0:
    Timer0 = 70
    Dmxout = 1
    Trigger = 0
    $asm
    .def Tmp1 = R17                                             'Marker
    .def Tmp2 = R18
                ldi  Tmp1, $5
    Make_loop1:
                dec  Tmp1
                brne Make_loop1
                nop
                nop
    $end Asm
    For Kanal = 0 To 512                                        '8   'Anzahl der Kanäle
       Temp = Puffer(kanal)                                     '20
       $asm
       .def Temp1 = R17
       .def Temp2 = R18
       .def Txbyte = R19
       Putchar:
          LDS Txbyte, {Temp}                                    '2
          LDI Temp1 , 9                                         '1
          COM Txbyte                                            '1
          SEC                                                   '1
       Putchar0:
          BRCC Putchar1                                         '1 oder 2
          nop                                                   '1
          CBI Portd,Pd7                                         '2
          RJMP putchar2                                         '2
       Putchar1:
          SBI Portd,Pd7                                         '2
          NOP                                                   '1
          nop                                                   '1
       Putchar2:
          LDI Temp2 , $7                                        '1
       Sd_loop0:
          DEC Temp2                                             '1
          BRNE Sd_loop0
    
          nop
          LSR Txbyte                                            '1
          DEC Temp1                                             '1
          BRNE putchar0                                         '1 oder 2
       $end Asm
       nop
       nop
       nop
       Dmxout = 1                                               '2 genauso schnell wie SBI PORTD,PD7 in Assembler
       $asm
       .def Tmp1 = R17
       .def Tmp2 = R18
       ldi  Tmp1, $1                                            '1
       Make_loop0:                                              '2 Stoppbits
          dec  Tmp1                                             '1
          brne Make_loop0                                       '1 oder 2
       $end Asm
    Next Kanal
    Trigger = 1                                                 '10
       $asm
       .def Tmp1 = R17
       .def Tmp2 = R18
       ldi  Tmp1, $7
       Make_loop3:                                              'zusätzlich für Kanal 512
          dec  Tmp1
          brne Make_loop3
       $end Asm
    Dmxout = 0
    Waitus 88
    Dmxout = 1
    Return
    Günter

  3. #33
    Neuer Benutzer Öfters hier
    Registriert seit
    07.05.2006
    Beiträge
    5
    Hi folks,
    falls ihr noch Interesse an einer Variante habt, schaut mal hier im Forum unter https://www.roboternetz.de/phpBB2/ze...ight=dmxtester. Da hab ich mal meinen Code für einen DMX-Tester gepostet. Vielleicht bringt der ja noch ein paar Anregungen.

  4. #34
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329

  5. #35
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43

    Fragen zum Code

    ich finde DMX eine sehr interessante Methode um gerade auch im Hausbereich eine angenehme Lichtstimmung zu schaffen, vor Allem die sound to Light Möglichkeiten.
    Zu diesem Zweck habe ich mir den hier vorgestellen Code angeschaut und gleich ein paar Fragen dazu:

    1.)
    Tccr2 = &B00000010
    Was passiert hier? Wird der Timerprescale auf 2 gestellt also 8000000/2 ?

    Timsk.toie2 = 1
    Wird damit der Timer2 als Timer aktiviert?

    2.)
    Ontimer2:
    Tick = Tick + 1
    Timer2 = 50
    If Tick >= Range Then Tick = 0
    If Tick < Buffer(adresse) Then
    Kanal1 = 1
    Else
    Kanal1 = 0
    End If
    Return

    Soweit ich heraus gefunden habe dient diese Interrupt Routine zur Kontrolle, ob sich in der eingestellten DMX Adresse (255) auch gesendete Daten befinden, oder???

    Vielen Dank im Voraus =D>
    Grüße
    hdtvfreak

  6. #36
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo hdtvfreak,

    mit den beiden Codeteilen wird eine PWM für Kanal1 erzeugt.
    Das kann auch weggelassen werden und durch was eigenes ersetzt werden...

    Günter

  7. #37
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43
    Zitat Zitat von guenter1604
    Hallo hdtvfreak,

    mit den beiden Codeteilen wird eine PWM für Kanal1 erzeugt.
    Das kann auch weggelassen werden und durch was eigenes ersetzt werden...

    Günter
    Ok, du erzeugst quasi mit dem Timer ein PWM Signal. Sollte dann vom Prinzip her in etwa äquivalent zu folgendem sein: (Bascom Syntax)

    Config Timer1 = Pwm , Pwm = 8 , Compare C Pwm = Clear Down , Prescale = 64

    Habe ich das richtig verstanden?

  8. #38
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Jaein,

    wenn man die PWM "händisch" erzeugt kann man viele Kanäle unterschiedlich dimmbar machen. Da der ATMega aber nur 3 Timer hat, gehen so maximal 3 Kanäle...

    In dem Code erzeugt der Timer nur Interrupts. Diese werden mit Tick gezählt. Solange der Wert von Tick kleiner ist wie der gewünschte Wert des DMX-Kanals buffer(adresse) liegt Kanal1 auf high.
    Ist Tick größer als buffer(adresse), liegt Kanal1 auf low. Wird Range erreicht, startet Tick von vorne.

    Sollten mehrere Kanäle gedimmt werden:

    If Tick < Buffer(adresse1) Then
    Kanal1 = 1
    Else
    Kanal1 = 0
    End If
    If Tick < Buffer(adresse2) Then
    Kanal2 = 1
    Else
    Kanal2 = 0
    End If

    usw.

    Günter

  9. #39
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43
    Ok ich glaube ich hab es soweit verstanden.

    Wenn ich jetzt beispielsweise im Buffer(adresse) der Wert 50 stehen, so ist das "An/Aus" Verhältnis 50% zu 50 %, da Range ja auf 100 eingestellt wurde.

    Also insgesamt eine Art Software PWM?

    Grüße
    hdtvfreak

  10. #40
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Ja,

    nur würd ich Range auf 255 stellen, da ein DMX-Kanal ja werte von 0 bis 255 haben kann. Somit wären 127 etwa 50%

    Günter

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress