Artnet 1024DMX/Ch mit Arduino verwirklichen.

    Artnet 1024DMX/Ch mit Arduino verwirklichen.

    Hi leute, ich hab vor kurzem im inet und zwar auf folgender Seite: blogs.portugalvideo.com/caneir…t-node-baseado-no-arduino
    Leider nicht auf deutsch. Dort wurde auf folgende Seite verlinkt deskontrol.net/blog/schematic-…o-4-universes-dmx-shield/ auf der ein Lötplan zu finden war.
    Ebenso die Software http://www.deskontrol.net/descargas/proyectos/artnet-node/artnet-node.zip

    Hier meine Konfiguration der Platine:

    Jetzt wollte ich mal Fragen ob hier Schon mal jemand erfahrungen damit gemacht hat oder sowas Schon Verwirklicht hat. wenn ja kann mir derjenige das kurz Erklären wie er das Projekt fertiggestellt hat?
    Möchte keinen fehler bei der geschichte machen da man beim dmx ja doch mal einiges zerballern kann.

    Wichtig, ich möchte gerne diese Konfiguration so nutzen das ich 2 DMX Universen habe. Es wurden nur Ausgänge verbaut und Keine eingänge da diese nicht benötigt werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „djnijo“ ()

    So guten Tag zusammen.
    Ich hab heute morgen etwas mit SimpleDMX und Artnet gebastelt. nur leider hab ich bislang noch kein Signal am DMX Ausgang. Woran könnte das liegen? die DMX Werte werden aber schon Richtig ausgelesen und als Kontrolle via usb am rechner gesendet. doch das DMX Gerät selbst bleibt dunkel.
    evtl liegt es an der schaltung selbst, aberich kann nicht testen welche werte oder ob überhaupt werte an den ausgabepin gesendet werden.

    C-Quellcode

    1. #include <Artnet.h>
    2. #include <Ethernet.h>
    3. #include <EthernetUdp.h>
    4. #include <SPI.h>
    5. #include <Adafruit_NeoPixel.h>
    6. #include <DmxSimple.h>
    7. const byte Dmx1Pin = 0;
    8. Artnet artnet;
    9. const int startUniverse = 2; //Artnet Universum
    10. const int maxUniverses = 90;
    11. bool universesReceived[maxUniverses];
    12. bool sendFrame = 1;
    13. int previousDataLength = 0;
    14. byte ip[] = {192, 168, 178, 46};
    15. byte mac[] = {
    16. 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
    17. };
    18. EthernetClient client;
    19. void dmxWriteCallback(byte pin, int value)
    20. {
    21. DmxSimple.write(pin, value);
    22. Serial.print(" ");
    23. Serial.print("CH: ");
    24. Serial.print(pin);
    25. Serial.print(" = ");
    26. Serial.print(value);
    27. Serial.print(" ");
    28. Serial.println();
    29. }
    30. void setup() {
    31. DmxSimple.usePin(Dmx1Pin);
    32. DmxSimple.maxChannel(1);
    33. //___________ip und Ethernet check_____________
    34. Serial.begin(115200);
    35. while (!Serial) {
    36. ;
    37. }
    38. if (Ethernet.begin(mac) == 0) {
    39. Serial.println("Fehler beim configurieren des Ethernet mit DHCP");
    40. for (;;)
    41. ;
    42. }
    43. Serial.print("Meine IP Adresse: ");
    44. for (byte thisByte = 0; thisByte < 4; thisByte++) {
    45. Serial.print(Ethernet.localIP()[thisByte], DEC);
    46. Serial.print(".");
    47. }
    48. Serial.println();
    49. //___________ip und Ethernet check ende__________
    50. //___________Artnet Starten______________________
    51. artnet.begin(mac, ip);
    52. artnet.setArtDmxCallback(onDmxFrame);
    53. }
    54. //___________loop_________________________________
    55. void loop() {
    56. artnet.read();
    57. }
    58. //___________Datenstring auswerten________________
    59. void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
    60. {
    61. sendFrame = 1;
    62. if ((universe - startUniverse) < maxUniverses)
    63. universesReceived[universe - startUniverse] = 1;
    64. for (int i = 0 ; i < maxUniverses ; i++)
    65. {
    66. if (universesReceived[i] == 0)
    67. {
    68. Serial.println("Broke");
    69. sendFrame = 0;
    70. break;
    71. }
    72. }
    73. //Serial.println(length);
    74. //Serial.println("");
    75. if (universe == startUniverse)
    76. {
    77. for (int i = 0; i < length ; i++)
    78. {
    79. int dmx1 = i + (universe - startUniverse) * (previousDataLength )+1;
    80. if (dmx1 < maxUniverses)
    81. dmxWriteCallback(dmx1, data[i]);
    82. //DmxSimple.write(dmx1, data[i]);
    83. }
    84. previousDataLength = length;
    85. }
    86. if (sendFrame)
    87. {
    88. memset(universesReceived, 0, maxUniverses);
    89. }
    90. }


    der schaltplan sieht wie folgt aus playground.arduino.cc/uploads/DMX/send_sn75276a.jpg den ich angeschlossen habe.
    ein auszug aus dem Print:

    Quellcode

    1. CH: 1 = 255
    2. CH: 2 = 195
    3. CH: 3 = 205
    4. CH: 4 = 222
    5. CH: 5 = 0
    6. CH: 6 = 0
    7. CH: 7 = 0
    8. CH: 8 = 0
    9. CH: 9 = 0
    10. CH: 10 = 0
    11. CH: 11 = 0
    12. CH: 12 = 0
    13. CH: 13 = 0
    14. CH: 14 = 0
    15. CH: 15 = 0
    16. CH: 16 = 0
    17. CH: 17 = 0
    18. CH: 18 = 0
    19. CH: 19 = 0
    20. CH: 20 = 0
    21. CH: 21 = 0
    22. CH: 22 = 0
    23. CH: 23 = 0
    24. CH: 24 = 0
    25. CH: 25 = 127
    26. CH: 26 = 127
    27. CH: 27 = 127
    28. CH: 28 = 127
    29. CH: 29 = 0
    30. CH: 30 = 0
    31. CH: 31 = 0
    32. CH: 32 = 0
    33. CH: 33 = 0
    34. CH: 34 = 0
    35. CH: 35 = 0
    36. CH: 36 = 0
    37. CH: 37 = 0
    38. CH: 38 = 127
    39. CH: 39 = 127
    40. CH: 40 = 127
    41. CH: 41 = 127
    42. CH: 42 = 0
    43. CH: 43 = 0
    44. CH: 44 = 0
    45. CH: 45 = 0
    46. CH: 46 = 0
    47. CH: 47 = 0
    48. CH: 48 = 0
    49. CH: 49 = 0
    50. CH: 50 = 0
    51. CH: 51 = 127
    52. CH: 52 = 127
    53. CH: 53 = 0
    54. CH: 54 = 0
    55. CH: 55 = 0
    56. CH: 56 = 0
    57. CH: 57 = 255
    58. CH: 58 = 0
    59. CH: 59 = 0
    60. CH: 60 = 127
    61. CH: 61 = 127
    62. CH: 62 = 0
    63. CH: 63 = 0
    64. CH: 64 = 0
    65. CH: 65 = 0
    66. CH: 66 = 255
    67. CH: 67 = 0
    68. ....
    Ich weiß nicht, was diese dmxsimple-Lib macht... Üblicherweise wird der Break so erzeugt, dass man die Baudrate auf die Hälfte runter setzt und dann ein Nullbyte sendet, das ergibt den Break zur Kennzeichnung des Frameanfangs...

    ich hatte schin mal den Fall (nicht mit dieser Lib, ich programmiere in Assembler), dass ein paar Geräten dieser Break zu kurz war, und sie nicht reagiert haben.

    habe dann einfach zum Erzeugen des Breaks die Baudrate weiter runter gesetzt (das ist kein Problem, nach oben hin ist da in der Länge praktisch keine Begrenzung), dann hat's mit allen Geräten funktioniert.

    schau doch mal in diese Lib rein, wie da der Break erzeugt wird, und ob Du den verlängern kannst...
    It's only light - but we like it!

    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!