Neopixel Ringe sind ne coole Sache. RFM69 Funkmodule auch. Warum nicht alles an eine Powerbank hängen und im 433 MHz Band übertragen?
8x RGB = 24 Kanäle x 20 Empfänger = 480 DMX Kanäle.
Die RFM69 können 250kBaud. Deshalb kann theoretisch auch ein ganzes Universum übertragen werden.
Posts by guenter075
-
-
Das ist der Code.
In dem Beispiel wird mit dem Fader 24 des Lichtmischpults (Input1) zwischen den Lichtmischpulteinstellungen und dem Signal des DMXControl (Input2) crossgefadet.C
Display More/* ======================================== * * Copyright Günter, 2017 * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF Günter. * * ======================================== */ #include "project.h" //Arrays stores DMX-Data uint8 DMXIn1[513]; uint8 DMXIn2[513]; uint8 DMXIn3[513]; uint8 DMXOut[516]; /* Variable declarations for DMA */ volatile uint8 DMADMX_Chan; volatile uint8 DMARX1_Chan; volatile uint8 DMARX2_Chan; volatile uint8 DMARX3_Chan; CY_ISR(ISR_DMX1) //Break on Input1 detected, restart DMA. { CyDmaChSetRequest(DMARX1_Chan, CPU_TERM_CHAIN); CyDmaChEnable(DMARX1_Chan, 1); } CY_ISR(ISR_DMX2) //Break on Input2 detected, restart DMA. { CyDmaChSetRequest(DMARX2_Chan, CPU_TERM_CHAIN); CyDmaChEnable(DMARX2_Chan, 1); } CY_ISR(ISR_DMX3) //Break on Input3 detected, restart DMA. { CyDmaChSetRequest(DMARX3_Chan, CPU_TERM_CHAIN); CyDmaChEnable(DMARX3_Chan, 1); } CY_ISR(ISR_BREAK_DONE) //Break on output is done, start DMA. { BREAK_GENERATOR_Stop(); CyDmaChEnable(DMADMX_Chan, 1); } CY_ISR(ISR_DMA_READY) //All Bytes are copied to output, generate a Break. { CyDmaChDisable(DMADMX_Chan); BREAK_GENERATOR_Start(); } uint8 Mittelwert(uint32 Crossfaderkanal, uint32 KanalA, uint32 KanalB) { return (KanalA*Crossfaderkanal + KanalB*(255-Crossfaderkanal))/255; } int main(void) { uint8 DMADMX_TD[1]; uint8 DMARX1_TD[1]; uint8 DMARX2_TD[1]; uint8 DMARX3_TD[1]; int i=0; isrRXBREAK1_StartEx(ISR_DMX1); isrRXBREAK2_StartEx(ISR_DMX2); isrRXBREAK3_StartEx(ISR_DMX3); isrBreak_StartEx(ISR_BREAK_DONE); isrDMAready_StartEx(ISR_DMA_READY); CyGlobalIntEnable; /* Enable global interrupts. */ /* DMA Configuration for DMX Output */ DMADMX_Chan = DMADMX_DmaInitialize(1, 1, HI16(CYDEV_SRAM_BASE), HI16(CYDEV_PERIPH_BASE)); DMADMX_TD[0] = CyDmaTdAllocate(); //Copy two more Bytes, because nrq from DMA is fired before all Bytes transmitted. CyDmaTdSetConfiguration(DMADMX_TD[0], 515, DMADMX_TD[0], DMADMX__TD_TERMOUT_EN |CY_DMA_TD_INC_SRC_ADR); CyDmaTdSetAddress(DMADMX_TD[0], LO16((uint32)DMXOut), LO16((uint32)UARTOUT_TXDATA_PTR)); CyDmaChSetInitialTd(DMADMX_Chan, DMADMX_TD[0]); CyDmaChEnable(DMADMX_Chan, 1); /* DMA Configuration for DMX Input 1 */ DMARX1_Chan = DMARX1_DmaInitialize(1, 1,HI16(CYDEV_PERIPH_BASE), HI16(CYDEV_SRAM_BASE)); DMARX1_TD[0] = CyDmaTdAllocate(); CyDmaTdSetConfiguration(DMARX1_TD[0], 513, DMARX1_TD[0], CY_DMA_TD_TERMIN_EN | CY_DMA_TD_INC_DST_ADR); CyDmaTdSetAddress(DMARX1_TD[0], LO16((uint32)UART_1_RXDATA_PTR), LO16((uint32)DMXIn1)); CyDmaChSetInitialTd(DMARX1_Chan, DMARX1_TD[0]); CyDmaChEnable(DMARX1_Chan, 1); /* DMA Configuration for DMX Input 2 */ DMARX2_Chan = DMARX2_DmaInitialize(1, 1,HI16(CYDEV_PERIPH_BASE), HI16(CYDEV_SRAM_BASE)); DMARX2_TD[0] = CyDmaTdAllocate(); CyDmaTdSetConfiguration(DMARX2_TD[0], 513, DMARX2_TD[0], CY_DMA_TD_TERMIN_EN | CY_DMA_TD_INC_DST_ADR); CyDmaTdSetAddress(DMARX2_TD[0], LO16((uint32)UART_2_RXDATA_PTR), LO16((uint32)DMXIn2)); CyDmaChSetInitialTd(DMARX2_Chan, DMARX2_TD[0]); CyDmaChEnable(DMARX2_Chan, 1); /* DMA Configuration for DMX Input 3 */ DMARX3_Chan = DMARX3_DmaInitialize(1, 1,HI16(CYDEV_PERIPH_BASE), HI16(CYDEV_SRAM_BASE)); DMARX3_TD[0] = CyDmaTdAllocate(); CyDmaTdSetConfiguration(DMARX3_TD[0], 513, DMARX3_TD[0], CY_DMA_TD_TERMIN_EN | CY_DMA_TD_INC_DST_ADR); CyDmaTdSetAddress(DMARX3_TD[0], LO16((uint32)UART_3_RXDATA_PTR), LO16((uint32)DMXIn3)); CyDmaChSetInitialTd(DMARX3_Chan, DMARX3_TD[0]); CyDmaChEnable(DMARX3_Chan, 1); BREAK_DETECTOR1_Start(); BREAK_DETECTOR2_Start(); BREAK_DETECTOR3_Start(); BREAK_GENERATOR_Start(); UART_1_Start(); UART_2_Start(); UART_3_Start(); UARTOUT_Start(); BLUELED_Write(1); for(;;) { for( i=1;i<513;i++) //Scan the Outputarray and calculate the values from the Inputarrays. { if(i<25) { DMXOut[i] = Mittelwert(DMXIn1[24],DMXIn2[i],DMXIn1[i]); } else { DMXOut[i] = DMXIn2[i]; } } } } /* [] END OF FILE */ -
Die armen alten PAR56 Kannen stehen in der Ecke rum. Wenn die ne DMX-Buchse hätten wären sie wohl öfter im Einsatz.
Also macht man in die Anschlussleitung eine Abzweigdose. Darin eine Phasenabschnittsteuerung mit Nulldurchgangserkennung und einem Microkontroller der das DMX empfängt und an den Dimmer weitergibt. -
Will man 3 DMX Quellen zu einem Universum vereinen braucht man eine Art Merger.
Das Problem ist 4 DMXe zu verwalten, die asynchron zueinander sind. Noch kniffeliger wird es wenn man z.b. mit einem DMX-Lichtmischpult zwischen Daslight und DMXControl crossfaden will.
Erst mit einem Cypress PSOC5LP mit 80MHz und 4 DMA-Kanälen läufts jetzt.Günter
-
Hallo,
ich bin von eurer schnellen Hilfe beeindruckt. Vielen Dank!
Hier das DDF -
Hallo,
den hab ich schon gefunden, nur zeigt der die RGB-Ringe nicht an. Nur ein RGB-Lauflicht geht.
Gruss Günter
-
Hallo Steff,
jetzt schau ich mir die 3er Version mal genauer an, wie es da läuft. Da fehlt mir jedoch noch der Timecodeplayer und der Audioplayer...
Gruß Günter
-
Hallo,
20 RGB-Ringe können über Funk angesteuert werden. Jeder Ring besteht aus 8 RGB-LEDs. Zusammen also 20x8x3 = 480 Kanäle.
Für die Ringe habe ich ein DDF erstellt das aus 8 je R,G,B Kanälen besteht.
Jetzt will ich im Effektsequenzer Effekte zusammenklicken. Ist es dort möglich, die Einstellungen eines Ringes auf die Anderen zu kopieren?Günter
-
Hallo,
wenn man viele gleiche Einträge in die Listen von Audio- und Timecodeplayer machen will wäre ein funktionierendes Copy and Paste nicht schlecht. Noch besser wäre, wenn man während der Wiedergabe durch rhytmischen Tastendruck Einträge generieren könnte. Also ne Art Aufnahmefunktion. Diese Einträge sollten später editierbar sein.
Falls das nicht geht, würde mir der Syntax der Listen in der Datei reichen. Dann würde ich was basteln...Günter
-
Hallo Stefan,
gibts einen Editor um den Inhalt der Dateien hübsch anzuzeigen?
-
Hallo Stefan,
danke für die Unterstützung!
Also NeuesProjekt.Tracklist umbenennen in NeuesProjekt.TimecodeSequences geht leider nicht. -
Hallo,
ist es möglich eine Sequenz aus dem Audioplayer in den Timecodeplayer laden?
-
Habs gefunden. Wer lesen kann ist klar im Vorteil!
-
Hallo,
um eine Lampe nur kurz aufblinken zu lassen habe ich eine Effektsequenz mit zwei Steps erstellt. Jetzt möchte ich diese Sequenz an bestimmten Stellen eines Liedes im Audioplayer ablaufen lassen. Geht das? Ist das so überhaupt der Richtige Weg?
Günter
-
-
Danke für die Antwort JPK,
mir ist im Layout des Nodles noch aufgefallen, dass ihr mit 100nF Kondensatoren recht sparsam umgegangen seid. Die 75176 und besonders der DC/DC-Wandler würden sich über 100nF nah an den Pins freuen. Auch der Resetpin des ATMegas verträgt einen 100nF gegen Masse. Welche Funktion hat R8?
Günter