MiniDMX zu MicroDMX

  • Hallo,


    wollt mir jetzt ne kleine Platine bestellen... ich hab gedacht, es wäre vielleicht nicht schlecht, wenn noch mal jemand drüber schaut...


    Gedanken zum Projekt: Die Software DMXControl soll meine RGB LEDs ansteuern, die über WS... dingens angesteuert werden (SPI). Möchte also direkt von USB auf SPI adaptieren. Das klappt mit dem STK500 schon, möchte das ganze jetzt in eine Platine "verpacken". Da die ja nicht ganz so billig sind, soll es natürlich möglichst klein werden. Eventuell möchte ich doch irgendwann mal nen richtiges DMX Gerät ansteuern, habe also gleich noch nen Pegelwandler mit drauf gesetzt.
    Da ich nur 8 RGB LEDs mit 20 mA ansteuern möchte, reicht mein USB Port als Stromlieferant aus. (P-Mosfet) Externe Quellen sind natürlich auch möglich...


    Das Protokoll vom MiniDMX wird dann so erweitert das man mit einem Terminalprogramm (oder ner kleinen Anwendung) die Anzahl der 8 Bit Schieberegister setzen kann und den SPI Clock... So könnte man das schön flexibel machen.
    Wenn nun Daten über den Virtuellen Com Port rein kommen, werden die auf den DMX Strang gelegt und bei Bedarf ab Adresse eins an bis zur Anzahl Schieberegister gleich auf SPI.


    Ein kleines Problem ist mir schon aufgefallen: Die WS... laufen mit 5 Volt Versorgung und der µC nur mit 3,3 V... Ein Pegelwandler habe ich hier nicht vorgesehen, hoffe das läuft auch so, die höchste Taktrate kann aber evtl hier nicht mehr gefahren werden?!?


    Gibts irgendwelche Bedenken? Fehler? Gibts schon ein Projekt dieser Art und ich kann mir die Arbeit schenken?


    Hier der Schaltplan:


    Hier das Board (31x28mm) :


    MfG


    Basti

  • Schöne kleine Platine! :thumbup:


    hat der XMega denn schon direkt USB on board (gehe mal davon, wegen der Pinbezeichnung D+ und D-) oder soll das per SW gemacht werden...? - in ersterem Fall: Coole Sache, in zweiterem: Das frisst ordentlich Rechenleistung...


    Ein kleines Problem ist mir schon aufgefallen: Die WS... laufen mit 5 Volt Versorgung und der µC nur mit 3,3 V... Ein Pegelwandler habe ich hier nicht vorgesehen, hoffe das läuft auch so, die höchste Taktrate kann aber evtl hier nicht mehr gefahren werden?!?

    Das müsste man ausprobieren - Alternative wäre, den µC auf 5 V zu lassen, und dann am USB-Port die Pegelwandlung zu machen, da geht das einfach mit ein paar Widerständen...


    beim 75176 hast Du geguckt im DB, ob der mit den 3,3 V klar kommt...?


    Gibts schon ein Projekt dieser Art und ich kann mir die Arbeit schenken?

    Es gibt das hier im Forum entwickelte "SEDU-Board" - das ist witziger Weise ähnlich entstanden, sollte erst nur nen speziellen Einsatzzweck haben, zufällig den selben :D (Mini-DMX nach WS2801 übersetzen, hier für Ambilight), wurde dann aber erweitert, zufällig eben auch um nen DMX-Treiber (den man hier auch umschalten kann, um mal was zu empfangen)... ;)


    der Gedanke war dabei: Es ist eigentlich Quatsch, wenn man schon nen µC mit x Anschlüssen hat, davon nur ein paar auf ne Stiftleise zu legen, und den Rest zu "verschenken" - also wurden alle Portpins auf Stiftleisten gelegt, paar Lötjumper für div. Konfigurationen, noch nen 5-V-Regler, damit man das Teil auch ohne USB z.B. an ner 12-V-LED-Installation betreiben kann...


    auserdem kam dann gleich ein größerer als für den Zweck nötiger µC drauf, weil das vom Preis her kaum nen Unterschied gemacht hat... und dann kam eben dieses Teil bei raus


    ist jetzt die Frage, entweder Du lässt Deine Platine so schön klein, wie sie ist (aus Preisgründen, oder weil da nicht mehr Platz ist, wo Du sie einsetzen willst), hast dann halt nur nen begrenzten Einsatzbereich - oder Du erweiterst sie noch um Stiftleisten, so dass man ggfs. mal ein Display und Taster oder wasauchimmer anschließen kann, einfach, dass sie "universeller" wird...


    dann bist Du aber exakt wieder bei dem selben Prinzip wie x andere µC-Boards (Arduino, Teensy, SEDU, ...), kannst Dir das im Prinzip also auch gleich sparen... ;)


    kommt halt auch auf die Menge an, je nachdem kann es schon sein, dass Dein Teil hier auch nicht günstiger wird, gut, rein die Platine und per Hand bestückt, wenn Du nur ein paar davon brauchst, wahrscheinlich schon...


    zum SEDU gibt's übrigens auch schon fertige SW hier in der "Lobby", u.a. eben auch Mini-DMX empfangen und für WS2801 ausgeben - dass das zusätzlich noch per DMX ausgegeben wird, wäre nun auch keine große Erweiterung...


    um nur ein paar LEDs zu steuern, gibt's auch schon ne SW, die Mini-DMX empfängt und damit 24 Kanäle PWM steuert, also für 8x RGB kann man sich da die zusätzlichen WS2801 sparen - die gibt auch schon zusätzlich alle Daten per DMX weiter...

    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!

  • Hallo Pesi,


    ja das SEDU Board habe ich mir auch schon angeschaut... das hat ziemlich viele Funktionen die ich nicht brauche und die BOM etwas hoch treiben. Ich brauch zwar nur eine Platine und da wäre es egal, aber die verwendeten Bauteile auf der obigen Platine habe ich alle hier in der Bastelkiste...
    BOM ohne Platine liegt irgendwo unter 4 Euro für DMX und SPI nicht verkehrt... Taster und brücken brauch ich ja nicht, wenn ich das Protokoll anpasse...


    Ja, das ist der neuste XMega mit Hardware USB... aktuell schwer zu bekommen.. z.B. bei Mouser... dafür aber für 2 € nen echtes Schnäppchen, wenn man überlegt das man für nen FTDI232R schon über 3 € blechen muss X(
    Prozessorlast kein Problem... läuft mit 24MHz oder auch übertaktet mit 48MHz stabil. DMA und gute Treiberfunktionen von Atmel sind auch nich verkehrt. Ganz nebenbei braucht man keinen Quarz mehr für UART und sogar USB...


    Der 75176 wird ja mit VUSB versorgt und hat Schaltschwellen von 0,8 bis 2 Volt laut Datenblatt... sollte also passen...


    Fragt sich nur noch, ob die WS... auch mit 3,3 Volt arbeiten... im Datenblatt steht 0,8*VCC is min. Highlevel empfohlen... Leider läuft der XMega nur bis 3,6 Volt... kann ich also nicht mit 5 Volt betreiben.


    Bisschen Platz hab ich ja noch... gibt nen schönen 8 pinigen Pegelwandler? Mir fällt gerade nix ein....


    MfG


    Basti


    P.S. Sind die Protokolle eurer PC Software offen gelegt? Könnte ich ja auch meine XMega-Software dahingehend an passen?!

  • Ach, jetzt hab ich ewig mit mir gerungen und jetzt war es doch so einfach auf dem vorhandenen Platz zwei kleinen Treiber ein zu bauen...


    Die 74AHCT1G125 gibt zwar meine Bastelkiste nicht mehr her, aber ich kann die Treiber ja erstmal brücken und wenn es doch nicht will mit dem SPI die zwei kleinen Scheißer bestellen... kosteten ja auch nur 40 cent... und 8 Euro Versand *löl*


    Also nun schauts Board so aus:




    Hat noch wer irgendwelche Bedenken/Vorschläge?


    @ Elektrobert ja von den Teilen kann man immer eine Hand voll zuhause haben... kann ich als Hobbyist so ziemlich jedes Projekt erschlagen...
    12 Bit ADC mit 2MegaSamples, 5xUART, 2xSPI, 2xI²C, sehr gutes ClockSystem... zur Laufzeit kann man den Takt ändern... hab mir nen GPS Tracker gebaut, der läuft am USB mit 48MHz und beim abziehen aufn Akku mit 2MHz bei gerade mal 1,5 mA µC Current :)


    Nagut, genug geschwärmt.. Atmel bezahlt mich ja leider nicht für Werbung :D


    MfG


    Basti

  • P.S. Sind die Protokolle eurer PC Software offen gelegt? Könnte ich ja auch meine XMega-Software dahingehend an passen?!

    Was meinst Du damit...? - von "uns" (also turi und mir) gibt es keine PC-SW... das einzige ist dieses Config-Tool, aber das ist ja speziell für das "Plug&Play-Ambilight", da kann man die standalone-Programme umstellen etc.


    das geht hier im Prinzip auch per mini-DMX (halt ne "Erweiterung"), also statt A0, A1 oder A2 für die Blockgröße kommt FF für "Befehl", und danach dann das Kommando, also z.B. Konfiguration senden, empfangen, in's EEPROM speichern, und dann die Nutzdaten...

    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!

  • Pesi oh sorry... bin neu hier... ihr habt so viele Projekte hier am Start, da muss man erstmal durch sehen...


    also erst mal fettes Lob ans Forum :thumbup:


    Meine Hardware mach ich mir am lieben selbst, aber wenn ihr hier schicke Software für Ambilight oder was auch immer habt, dann würde ich ja das Rad nicht neu erfinden wollen und nur das Protokoll in meinem Controller verinnerlichen =)


    MfG


    Basti

  • Vorab schon mal sorry für o.t. ;)


    Ambilight gibt's schon fertig, schau' mal nach AtmoWin (Windows) und Boblight (Linux) - ausserdem gibt's sowas auch für Dreambox etc.


    das ist alles von anderen Leuten, auch nicht hier aus dem Forum - der User "Elite" hat damals (vor ca. 2 Jahren) das Atmowin hier vorgestellt, und selbstgebaute Stripes dazu, wo immer je ein Mega8 2 LEDs gesteuert hat - da gab's dann auch ne Sammelbestellung für das System...


    zufällig zeitgleich mit dem Ausverkauf dieser Platinen hat dann turi die WS2801-Stripes besorgt (damals als einziger in Deutschland), und wir (turi, dgoersch und ich) haben dann für den Ambilight-Einsatz (und für weitere Zwecke) dieses SEDU-Board entwickelt... was mit der entsprechenden SW drauf eben nix anderes macht, als Du hier vorhast, Mini-DMX in WS2801 konvertieren (in der Fertig-Version halt noch mit ein paar Blinkerprogrammen, wenn der PC keine Daten schickt...)


    das geht eben wie gesagt einfach über mini-DMX, sehr praktisch, dass andere SW (eben DMXControl o.ä.) das auch ausgeben kann...


    schau' Dich doch mal bisschen um, es gibt noch viele User mehr, die noch viel mehr Zeug machen (also auch die SW eben), RGB-Controller, die Matrix-Steuer-SW "Glediator" von Pepe_1981 oder "Pixelcontroller" von MichuNeo - diese können auch mini-DMX ausgeben...


    da man bei Mini-DMX aber nur die 3 Framegrößen 96, 256 und 512 Bytes hat, wurde dann speziell für so Sachen wie Matrix hier im Forum ein neues Protokoll entwickelt, das von 1 - 65.335 Bytes Nutzdaten flexible Framegrößen erlaubt... Glediator kann dieses Protokoll auch ausgeben - leider bis jetzt als einzige PC-SW, das wäre auch gut für andere Sachen geeignet, weil man eben flexibel die Größe anpassen kann, und so auch keinen Overhead hat, wenn man z.B. nur nen RGB-Controller vom PC aus steuern will... da ist auch schon ein Blockstart-Byte zur Kennzeichnung von Kommandos vorgesehen


    z.B. bei mir etwas doof: Will ich nur ein paar LEDs per DMXControl steuern, brauche ich Mini-DMX, für die Matrix dann tpm2 - aber dass diese Lichtsteuer-Programme mal tpm2 ausgeben können, bleibt wohl ein Wunschtraum, einen dieser Entwickler hatte ich mal angeschrieben, aber keine Reaktion...


    Wie auch immer, im Unterforum "LED Schaltungen, Treiber und µC" findet man am meisten SW, und auch tolle Schaltungen von anderen Usern, wie z.B. simpel aufzubauende getaktete KSQ, etc.


    noch mal wegen dem XMega: Ich habe schon gegoogelt, DB angesehen, aber noch nicht ganz kapiert: Ist da praktisch sowas wie ein FT232 "eingebaut", also das Teil meldet sich am PC als VCP an, auf µC-Seite kann ich das wie nen USART ansprechen...? - oder stellt das nur "Low-Level-Kommunikation" zur Verfügung, und ich muss die USB-Pakete noch selbst verarbeiten, also Protokoll für z.B. VCP implementieren...?


    in erstem Fall wär's super, im zweiten Fall mir dann wohl doch zu hoch...


    ich hatte mir die XMega schon mal angesehen, aber damals als für mich uninteressant eingestuft (da waren sie glaubich auch noch etwas teuerer) - praktisch "so viel Kram brauche ich gar nicht, und wenn doch, dann nehm' ich gleich nen STM32 o.ä., da gibt's ja schon fertige Boards mit Touchscreen drauf für 35 Euro..."


    da war mir auch noch nicht so klar, dass der Kern eigentlich der selbe ist, nur eben mehr "Zubehör" (wenn ich das richtig verstanden habe..?) - ich bin damals davon ausgegangen, ich müsste da das Programmieren/Befehlssatz komplett neu lernen, aber das scheint ja gar nicht der Fall zu sein...?


    weil so klingt das schon interessant - wenn USB (und noch mehr Zeug wie mehrere USARTS etc.) schon drin und das Ding auch nicht teurer ist als ein "normaler" ATMega, keine allzu große Umstellung, das wär' schon was...


    gut, mit nem STM32 hätte man gleich auch noch 32 Bit, und eigentlich auch nicht teurer, aber da der Nachteil, dass ich mich vom programmieren her komplett umstellen müsste, da stehe ich momentan davor wie so mancher µC-Anfänger hier vor nem Mega8, kein wirklicher Plan.... :D


    den (für mich) "Nachteil" mit den 3,3 V haben beide, andererseits ist's eigentlich ein Vorteil, weil ja viel interessanter Kram auf 3,3 V läuft (Touchscreen, Wlan-Modul, Bluetooth-Modul, SD-Karte, ...), wo ich i.M. jeweils nen Pegelwandler brauche, da wär's eigentlich schon vernünftiger, gleich das System auf 3,3 V zu haben, und dann halt für so Sachen wie WS2801 etc. den Pegelwandler vorsehen...

    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!

  • Pesi


    ob sich der USB-Teil des Xmega als VCM oder als Tastatur oder als Maus an Deinem Rechner *ausgibt* kannst Du selbst bestimmen!
    Aber wer die Wahl hat, hat dann auch die Qual :P


    Aber ein kleiner Tip sei an dieser Stelle erlaubt: Mit dem Bootloader des neunen "Arduino Leonardo" kann man sich an dieser Stelle viel Mühe sparen. Und wenn man dann die Arduino-IDE zum Programmieren her nimmt kann schon fast nix mehr schief gehen! Ach und ASM kann die m.M.n auch (zumindest als in-line ASM).


    Insofern ist der XMEGA schon ein tolles Teil.


    Der war übrigens auch unser erster Gedanke als wir die Pläne für die universellen Umsetzer Boards geschmiedet hatten.Leider gab es damals den "Leonardo" noch nicht und damit keine Unterstützung für Arduino, was uns dann doch zum ATmega1280 geführt hat.


    LG,


    Pepe

  • ob sich der USB-Teil des Xmega als VCM oder als Tastatur oder als Maus an Deinem Rechner *ausgibt* kannst Du selbst bestimmen!

    Ja - die Frage war nur, *wie* kann ich das bestimmen, ob's einfach mit Bits setzen in nem Register getan ist, oder ich den USB-Stack selbst programmieren muss - weil rein per SW kann ich das auch auf nem ganz normalen ATMega selbst bestimmen (wird z.B. beim uDMX-Interface angewendet)... ;)


    hab's aber (anscheinend) inzwischen schon kapiert: Der XMega nimmt einem das Bitgepfriemel ab, dekodiert und kodiert USB-Pakte, aber um das Protokoll muss man sich selbst kümmern...


    Arduino-IDE zum Programmieren her nimmt kann schon fast nix mehr schief gehen! Ach und ASM kann die m.M.n auch (zumindest als in-line ASM).

    Ich weiß, ich werde da immer belächelt, aber mir ist asm immer noch am symphatischten... ;) - mit so Hochsprachen-Zeug kann ich nicht wirklich was anfangen (bei µC), evtl. kommt's von der Gewöhnung (damals bei C64 und Sinclair QL auch Asm), vielleicht bin ich ja auch ein Kontrollfreak... :D


    ich habe mir mal das "inside Arduino" durchgelesen, da werden gleich irgendwelche Timer benutzt zum erzeugen von Wartezeiten und sonstwas, sowas mag' ich einfach nicht, dass ich nen Befehl hinschreibe, und gar nicht genau weiß, was in dem Teil dann passiert und was es sonst noch so alles "nebenher" macht... da hilft dann auch das inline-ASM nix, weil dieses "Arduino-Betriebssystem" läuft ja trotzdem noch...


    insofern hätte mich mal interessiert, ob der Counterfeiter da schon ne SW/Lib hat, weil auch wenn's C ist, da kann ich noch was mit anfangen, ggfs. per Hand übersetzen (das ist kein großer Aufwand, so unterschiedlich zu asm ist das nicht, habe ich auch schon hier & da gemacht, z.B. bei der RC5-Routine von Danegger, letztlich ersetzt man halt immer nen C-Befehl durch 3, 4 Zeilen Assembler...


    aber wenn man da in der Arduino-IDE z.B. nur hinschreibt "configure USB as VCP" (oder so), dann weiß ich ja auch nicht, was nun bei raus kommt...


    Insofern ist der XMEGA schon ein tolles Teil.

    Aber auf dem Leonardo ist doch gar kein XMega, oder...?


    ich finde halt mittlerweile den interessant, wegen den bis zu 48 MHz, DMA (praktisch, wenn man mal einfach was kopieren muss), und den USARTS bis zum Abwinken - z.B. auch in Hinsicht auf SEDU, der soll demnächst überarbeitet werden, sind zwar gerade 150 Stück in der Fertigung, aber alle schon verkauft... da geht dann (wenn's die SW einfacher macht) notfalls auch weiter das mit USB über FT232, was i.M. ne kleine Einschränkung ist (wegen zusätzlichen Kosten für den FT232, und 1 USART schon belegt)...


    z.B., denkbar wäre für manche Anwendungen ne SW, die viele Pixel über tpm2 mit 2 MBit empfängt und dann über 6 DMX-Ausgänge ausgibt - aktuell ist nur ein DMX-Ausgang möglich, da ja beim Mega644P schon ein USART für USB benutzt wird... klar, es gibt auch fertige 8-fach-Artnet-Nodes zu kaufen, aber für jemanden, der ne vorhandene große DMX-Matrix mit Glediator steuern will, wäre das dann schon ne preisgünstige Alternative...


    usw. - man hat halt einfach von allem etwas mehr, ist für mehr Anwendungsfälle gerüstet... wenn doch das interne USB benutzt würde, könnte man damit sogar irgendwelche Controller aufbauen, Midi-Steuerung o.ä.


    aber das ist nun schon ganz schön o.t., sorry dafür! - passt nur insofern zum Thema, dass es - insb. bei den Preisen - ganz vernünftig klingt, sich einfach, so wie's der Counterfeiter macht, ein paar XMega in die Bastelkiste zu legen, statt diesen AVR für diesen Zweck und jenen AVR für jenen Zweck...

    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!

    Einmal editiert, zuletzt von Pesi ()

  • Hallo Pesi,


    also da mein Thema durch ist, ists mir auch egal über was wir hier quatschen, werde heute die Platine bestellen... :) bekomm dann immer 3 Stück und Bezahle ca. 10 $... also wer ne Platine davon (sei es zum XMega lernen) möchte, kann sich ja per PN melden...


    Also zum XMega... also ich rede von dem hier: http://de.mouser.com/ProductDe…rxmAlxA1Fib16vg62fSimU%3d


    Ich Programmier den in C und mit diesem ganzen Adruino habe ich mich noch nie beschäftigt... USB Bootloader gibts auch schon von Atmel


    Ich benutzte das Atmel Studio 6 und bin damit sehr zufrieden. Als Lib stellt Atmel ein paar schöne Funktionen bereit, die ASF.


    Man kann den XMega auch gut ohne ASF programmieren, ist aber ab dem Moment wo man USB verwenden will ziemlich ansträngend. USB kann man von Host OS erkennen lassen wie man das gerne möchte. Atmel stellt Massenspeicher, HDI, VCP und noch nen 4. bereit (weiß ich gerade nich mehr).


    Die FTDIs sind auf 3MBit begrenzt. Bei meinem GPS Logger hau ich ein MB in 1,5 Sekunden raus und das ohne DMA... Laut Atmel sind es wohl beim XMega mit 24MHz bis zu 8MBit.....


    Ob du mit ASM so schnell auf dem XMega voran kommst, weiß ich nicht. Würde da eher auf C umsatteln, um Zeit zu sparen. Die ASF zu benutzten ist ja keine Schwäche. Warum sollte man das Rad auch neu erfinden :)


    Hier mal ein kurzes Beispiel, wie ich USB aktiviere wenn der GPS Logger angesteckt wird:


    [C]
    if (gpio_pin_is_high(VUSB_I)) {
    if(usb_on == false) {
    Blinken_Route_Ende();

    udc_start(); //startup USB + USB clock
    delay_ms(500);
    udc_attach(); //aktivieren
    usb_on = true;
    gpio_set_pin_low(LEDGREEN_O);
    gpio_set_pin_low(LEDRED_O);
    }
    [/C]


    und so sende ich dann Daten direkt in die Console:


    [C]
    udi_cdc_write_buf(&eeprom_val,sizeof(eeprom_val));
    [/C]


    Es gibt nun noch eine riesen .h Datei in der man die ganzen USB defines einstellen muss... also ganz so schnell ist es dann doch noch nicht getan... außerdem muss man ne kleine USB Treiber *.inf anpassen und dann beim ersten mal anstecken seine Treiber installieren...
    Aber alles halb so schlimm ;)



    Wenn noch Fragen sind, versuch ich die zu beantworten...


    MfG


    Basti


    P.S. Danke noch mal für die Zusammenfassung der bestehenden Projekte :)