-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DMX for PICO without PIO #25
Comments
Sorry, I'm mixing up PWM slices (8) with the PIO blocks. |
You are right, the PWM slices and the PIOs are two completely independent pieces of hardware. They do share the internal bus of course, but with "just" some DMX and PWM it will be far from saturated. |
Thanks for your reply.
I set DMXinput up to receive all channels. That's the easiest and there is
plenty of memory in a pico.
I transfer to 16 PWM channels in the selected group from 400-415 (group 0)
up to 496-512 (group 7)
That way I only needed 3 address bits (which is all I had left on my
RP2040-Zero anyway).
Nice that a 1" square can control 16 lights without breaking a sweat. Loop
code is just
for(i=0; i<8; i++) {
pwm_set_counter
<https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__pwm.html#ga5179ec971146ab611b9232587e945769>
(i,
DMXbuffer[START_CHAN+i);
}
delay(UPDATE_RATE); // Could look for next buffer full but who cares
For testing purposes I set up DMXoutput in loop1(). Why not run that other
processor?
Thank you for the great library!
…--
Gavin
On Thu, Mar 17, 2022 at 3:12 AM kripton ***@***.***> wrote:
You are right, the PWM slices and the PIOs are two completely independent
pieces of hardware. They do share the internal bus of course, but with
"just" some DMX and PWM it will be far from saturated.
The start_channel-issue is still relevant if we are talking about DMX
input: #15 <#15>. You can
receive and use all channels of a universe. However, you need to receive
the complete universe and find the relevant channel yourself (= you
allocate and provide a 513 byte large buffer and use the bytes relevant for
you). The start_channel parameter was meant so if you're only interested in
channels 500 t0 512, you would only need to provide a 12 byte large buffer
and save some memory.
—
Reply to this email directly, view it on GitHub
<#25 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AVR4PP2NHWB6LUK72KE5EZTVALSNVANCNFSM5Q5DBPRQ>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Mis remembered. Actually I used
for (int i = 0; i <NUM_CHANNELS; i++) { // For all 16 channels
pwm_set_gpio_level(i, lookupGamma[buffer[StartChannel+i]] );
// Or is buffer idexeded to channel #??
}
}
to set the PWM counter for each GPIO pin
On Thu, Mar 17, 2022 at 3:28 PM Gavin - Meridian <
***@***.***> wrote:
… Thanks for your reply.
I set DMXinput up to receive all channels. That's the easiest and there is
plenty of memory in a pico.
I transfer to 16 PWM channels in the selected group from 400-415 (group 0)
up to 496-512 (group 7)
That way I only needed 3 address bits (which is all I had left on my
RP2040-Zero anyway).
Nice that a 1" square can control 16 lights without breaking a sweat. Loop
code is just
for(i=0; i<8; i++) {
pwm_set_counter
<https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__pwm.html#ga5179ec971146ab611b9232587e945769> (i,
DMXbuffer[START_CHAN+i);
}
delay(UPDATE_RATE); // Could look for next buffer full but who cares
For testing purposes I set up DMXoutput in loop1(). Why not run that other
processor?
Thank you for the great library!
--
Gavin
On Thu, Mar 17, 2022 at 3:12 AM kripton ***@***.***> wrote:
> You are right, the PWM slices and the PIOs are two completely independent
> pieces of hardware. They do share the internal bus of course, but with
> "just" some DMX and PWM it will be far from saturated.
> The start_channel-issue is still relevant if we are talking about DMX
> input: #15 <#15>. You can
> receive and use all channels of a universe. However, you need to receive
> the complete universe and find the relevant channel yourself (= you
> allocate and provide a 513 byte large buffer and use the bytes relevant for
> you). The start_channel parameter was meant so if you're only interested in
> channels 500 t0 512, you would only need to provide a 12 byte large buffer
> and save some memory.
>
> —
> Reply to this email directly, view it on GitHub
> <#25 (comment)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AVR4PP2NHWB6LUK72KE5EZTVALSNVANCNFSM5Q5DBPRQ>
> .
> You are receiving this because you authored the thread.Message ID:
> <jostlowe/Pico-DMX/issues/25/1070518560
> ***@***.***>
>
|
I'm not getting channel 1 to behave properly when I use a real DMXoutput
device (Chauvet)
Channel alignment works when I loop back DMXOutput to DMXInput (using the
other processor, very handy.
My code attached.. Trying to get channel 1 to work right and not offset all
the channels by one.
…--
Gavin Perry, PhD
Chief Technology Officer
Meridian Electric Company
2392 Grissom Drive
St Louis MO 63146
http://meridianlighting.com
cell: 314 406-0697 <http://voice.google.com/calls?a=nc,%2B13144060697>
On Thu, Mar 17, 2022 at 9:15 PM Gavin - Meridian <
***@***.***> wrote:
Mis remembered. Actually I used
for (int i = 0; i <NUM_CHANNELS; i++) { // For all 16 channels
pwm_set_gpio_level(i, lookupGamma[buffer[StartChannel+i]] );
// Or is buffer idexeded to channel #??
}
}
to set the PWM counter for each GPIO pin
On Thu, Mar 17, 2022 at 3:28 PM Gavin - Meridian <
***@***.***> wrote:
> Thanks for your reply.
> I set DMXinput up to receive all channels. That's the easiest and there
> is plenty of memory in a pico.
> I transfer to 16 PWM channels in the selected group from 400-415 (group
> 0) up to 496-512 (group 7)
> That way I only needed 3 address bits (which is all I had left on my
> RP2040-Zero anyway).
> Nice that a 1" square can control 16 lights without breaking a sweat.
> Loop code is just
>
> for(i=0; i<8; i++) {
> pwm_set_counter
> <https://raspberrypi.github.io/pico-sdk-doxygen/group__hardware__pwm.html#ga5179ec971146ab611b9232587e945769> (i,
> DMXbuffer[START_CHAN+i);
> }
> delay(UPDATE_RATE); // Could look for next buffer full but who cares
>
> For testing purposes I set up DMXoutput in loop1(). Why not run that
> other processor?
>
> Thank you for the great library!
>
> --
> Gavin
>
>
> On Thu, Mar 17, 2022 at 3:12 AM kripton ***@***.***> wrote:
>
>> You are right, the PWM slices and the PIOs are two completely
>> independent pieces of hardware. They do share the internal bus of course,
>> but with "just" some DMX and PWM it will be far from saturated.
>> The start_channel-issue is still relevant if we are talking about DMX
>> input: #15 <#15>. You can
>> receive and use all channels of a universe. However, you need to receive
>> the complete universe and find the relevant channel yourself (= you
>> allocate and provide a 513 byte large buffer and use the bytes relevant for
>> you). The start_channel parameter was meant so if you're only interested in
>> channels 500 t0 512, you would only need to provide a 12 byte large buffer
>> and save some memory.
>>
>> —
>> Reply to this email directly, view it on GitHub
>> <#25 (comment)>,
>> or unsubscribe
>> <https://github.com/notifications/unsubscribe-auth/AVR4PP2NHWB6LUK72KE5EZTVALSNVANCNFSM5Q5DBPRQ>
>> .
>> You are receiving this because you authored the thread.Message ID:
>> <jostlowe/Pico-DMX/issues/25/1070518560
>> ***@***.***>
>>
>
|
RP2040 Pico using Arduino 2.0 IDE on Win11
I like the way your library makes DMX easy!
I've used all the PIOs for my 16 PWM LED lights. Is there a way for this lib to work with UART instead of PIO?
Also I'm looking for channel 400 - 512 for this particular app. Has issue re Start Chanel been fixed yet?
The text was updated successfully, but these errors were encountered: