- 3D-Druck Einstieg und Tipps         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 41

Thema: DMX512 empfangen

  1. #21
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Vitis,

    bis auf ein paar Kleinigkeiten läufts jetzt.

    Doch bei Kanal 255 ist Schluß.

    Gibt es eine Beschränkung die ich übersehen hab?

    Günter

  2. #22
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    X As Byte , Y As Byte , Z As Byte
    Pointer As Byte At &H82

    byte geht halt nur von 0-255
    für mehr dann halt word variablen
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.190
    Leider kann ich zu Eueren Bascom Codes keine Stellung nehmen, dazu kenn ich mich zu wenig damit aus - Bin ein "C" Jünger.

    Prinzipiell braucht man nur so viele Bytes des DMX Frames puffern, wie das Gerät Kanäle verwalten kann.

    Die USART Abfrage sollte im Interrupt laufen.
    Wenn die Frame Synchronisation ( Codeverletzung ) stattgefunden hat, ist das FE ( Framing Error ) Bit gesetzt. Das nächste übertragene Byte müsste dann 0 sein ( ist im DMX Protokoll für Dimmer so festgelegt ).
    Das darauf folgende Byte ist der Wert des ersten Kanals des DMX Frames.

    Ein DMX Empfänger Programm könnte nun so aussehen.
    1. Das USART Statusregister wird im Interrupt abgefragt.
    Ist das FE Bit gesetzt, wird der Kanalzähler, sowie die Empfangskanal Hilfsvariable auf 0 gesetzt.
    2. Im nächsten USART RX Interrupt wird überprüft, ob der Kanalzähler 0 ist und dann ob auch der übertragene Wert 0 ist ( Startbyte ).
    Der Kanalzähler wird um 1 erhöht.
    3. In den nächsten Interrupts wird der Kanalzähler jeweils um 1 erhöht und überprüft, ob der eingestellte erste zu verarbeitende Kanal schon erreicht ist.
    Ist das der Fall, wird der Wert in einem Puffer abgelegt und eine Hilfsvariable ( Anzahl der zu verarbeitenden Kanäle ) hochgezählt.
    Wurden alle zu verarbeitenden Kanäle eingelesen wird ein Flag gesetzt, das es neue Kanalinformationen gibt.
    Dieses Flag wird im Hauptprogramm verarbeitet und zurückgesetzt.
    Alle noch folgenden Bytes bis zur nächsten Frame Synchronisation werden verworfen.

    Somit läuft der komplette DMX Empfang im Interrupt und sollte auch als Bascom Programm noch mehr als schnell genug laufen.
    Es müssen nur so viele Bytes gepuffert werden, wie die Schaltung tatsächlich verwalten muß.
    Die komplette Werteverarbeitung kann im Hauptprogramm laufen, ohne den DMX Empfang wirklich zu stören.
    Treibt man es auf die Spitze, braucht der Controller überhaupt kein Hauptprogramm ( außer einer Warteschleife ) mehr, weil auch die Phasenanschnittsteuerung in einem Interrupt laufen kann.

    Ich Denke das ist eine relativ einfache Methode ein DMX Signal zu dekodieren.

    Meine Idee zu Pins sparen ist eigentlich keine, aber -
    Zu einem vernünftigen DMX Gerät gehört meiner Meinung nach ein Display.
    Ein 1x16 Zeichen Dotmatrix Modul reicht schon und kostet nicht viel.
    Dieses Modul braucht aber schon 7 Controllerpins, dazu kommen dann noch 3..4 Tasten. Also Insgesamt min. 10 Ports.
    Ein Dip Fix Schalter verbrät aber auch schon 9 Ports und ist wesentlich unkonfortabler in der Anwendung.
    Ausserdem kann man das Display super für Diagnosefunktionen verwenden, wenn z.B. ein Kanal parout nicht funktionieren will.

    Eine weitere Möglichkeit um Ports zu sparen, wäre die A/D Wandler des Microcontrollers zu nutzen und den Dip Fix Schalter über gewichtete Widerstände in einen Spannungsteiler zu schalten.
    Dazu bräuchte man, meiner Meinung nach, 2 A/D Wandler Ports - dann bräuchen die benutzten Widerstände auch nicht unbedingt eng toleriert zu sein.
    Die Information, welche Dip Fix Schalter aktiviert sind, kann man so aus den jeweiligen A/D Wandlerwerten gewinnen.

  4. #24
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    man kann den pcf8574 über TWI dran hängen wenn man
    vom ATMega Pins sparen möchte ... Das Display u.U.
    über SPI ...

    ansonsten hab ichs in meinem programm ähnlich gemacht
    wie du es vorschlägst wkrug
    Vor den Erfolg haben die Götter den Schweiß gesetzt

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

    anbei mein Code, der geht bis 255. Bei 256 ist Schluß !?

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    $baud = 250000
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8
    
    On Timer2 Ontimer2
    Tccr2 = &B00000010
    Timsk.toie2 = 1
    
    Config Portb.5 = Output
    Config Portb.4 = Output
    Portb.4 = 0
    Kanal1 Alias Portb.4
    
    Dim Tick As Byte
    Dim Range As Byte
    Range = 100
    Dim X As Byte
    Dim Buffer(514)as Byte
    Dim Kanal As Word
    Dim Adresse As Word
    On Urxc Empfang
    Enable Urxc
    Enable Interrupts
    
    Adresse = 255                                               '255 geht noch 256 nicht mehr!!!!!
    Do
    
    Loop
    
    Empfang:
    X = Udr                                                     'das muss erst abgeholt werden, sonst geht nix                                                    'Die Interruptroutine verheizt 10,875µs bei 16MHz der vorhandenen Framezeit von 44µs
       If Ucsra.fe = 1 Then
          Kanal = 0
          Ucsra.fe = 0                                          'damit verbleiben 33,125µs für die Mainloop pro Frame
       Else
          Incr Kanal
          Buffer(kanal) = X
       End If
    Return
    
    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
    Günter

  6. #26
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    hmmm ... schon mal stack frame usw. probiert zu erhöhen?
    sollte eigentlich auch über 256 gehen wie ich das sehe.
    Bei arrays bin ich mir aber auch nicht sicher mit mehr als
    255. hast du mal probiert ob er überhaupt über 255 zählt,
    sprich ob der Sender mehr als 255 sendet?
    Vor den Erfolg haben die Götter den Schweiß gesetzt

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

    es wird immer kurioser, anscheinend liegts an meinem DMX-Sender, den ich nach erfolgreichen Tests nochmal modifiziert habe. Mit dem nächsten DMX-Pult das zur Reparatur reinkommt werde ich das mal gegenchecken.

    Die Ein/Ausgabe mache ich jetzt mit Taster und Display zusammen über I2C und PCA9555D

    Günter

  8. #28
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    tjaja, hab ich glaub ich schon mal im thread erwähnt,
    dass es da "semiprofi" teile gibt, die nur bis 255 senden

    Welchen sender benutzt du denn?
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #29
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Aaaaaaaaaarrrrrrggggghhhhhh,

    >Welchen sender benutzt du denn?

    MEINEN EIGENEN !!!!!

    Mein kleiner DMX-Sender war mit I2C, Inkrementalgeber, serieller Schnittstelle und einem DMX, das nicht mal in einem Interrupt liegt zeitweise überfordert.
    Jetzt habe ich den DMX-Generator in den Interrupt des Timer0 gelegt und ein paar µs Bedenkzeit für den Rest eingebaut und schon läufts.

    Günter

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

    der hier:

    https://www.roboternetz.de/phpBB2/ze...ghlight=dmx512

    wir wollen ja schliesslich kein "Semiprofi" Gerät bauen

    Günter

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress