[PD] modifying Reduzent's [Solenoiduino] to control 44 solenoids (electro-mechanical piano)
Epic Jefferson
jeffreyconcepcion at gmail.com
Fri Sep 13 06:02:23 CEST 2013
Awesome, thanks!
i tested it quickly and i can now address all of the solenoids from within
pd.
On Wed, Sep 11, 2013 at 6:26 PM, Roman Haefeli <reduzent at gmail.com> wrote:
> On Tue, 2013-09-10 at 21:34 -0400, Epic Jefferson wrote:
> > The modified version of the arduino sketch is included in the .zip in
> > my first email if you want to have a go at it. i haven't changed
> > anything on the pd side. I would rather sacrifice duty cycle
> > resolution and be able to control 64 solenoids, than making the entire
> > message longer and slowing down the entire system.
>
> I adapted the bitmask stuff in the the Pd patch and the Arduino sketch
> so that 6 bits are used for the pin address. This means, the velocity
> has now only 256 steps. Check the attachments.
>
> Beware, I wasn't able to actually test the modifications as I currently
> don't have an arduino at hand.
>
> > As far as the dropped messages go, I'm sending separate messages by
> > packing the data and sending it to a single [trigger $1 $2{ message
> > box. I'll try sending separate messages to see if that helps.
>
> I'm not totally sure if I understand you correctly, but this should be
> fine, as long as [solenoiduino] receives 'trigger X Y' messages.
>
> The main difference between your version and mine is that yours uses the
> Tlc stuff. I don't know how this part behaves if you set and update
> twice in a row very quickly. May be this is the culprit? Just a guess, I
> can't test here and I don't have a clue what this code does or if it
> does something time critical at all. A cheap work-around might be to
> rate-limit the messages on the Pd side.
>
I think it might be correct to assume that the dropped messages could be on
the Tlc side of things,
i have a feeling that while it's setting and updating, any incoming message
could be lost.
>
> Regarding the handshake: You may skip that all-together if it doesn't
> work for you, as it isn't really necessary. I thought it might be a
> convenient way check to make sure the hardware has the correct firmware
> loaded. To quickly test send 255 to [comport] and see if you get
> something back. If so, the problem might be in the [solenoiduino]
> abstraction.
>
this is a small problem, for some reason sending an 'open X' type message
to solenoiduino doesn't bang the '255' message box. i have to click on it
myself for it to work, wierd. Now that i think of it, the new max velocity
is 255, is it possible the arduino could interpret this as trying to
establish a connection again and not as the 'velocity' byte? I haven't
noticed a problem but i haven't tested it properly yet. I might opt for
removing the handshake entirely
>
> Roman
>
>
> > On Tue, Sep 10, 2013 at 6:24 PM, Roman Haefeli <reduzent at gmail.com>
> > wrote:
> > On Tue, 2013-09-10 at 01:53 -0400, Epic Jefferson wrote:
> > > To control solenoids with dynamics, I adapted Reduzent's
> > > [Solenoiduino] abstraction and arduino sketch to include the
> > TLC5940
> > > functions, which is what the Practical Maker PWM shield is
> > based on.
> > > So far, I'm able to control 44 solenoids using custom
> > drivers and 2
> > > stacked PWM shields. This is an excellent alternative if you
> > want to
> > > build a relatively cheap electro-mechanical piano setup.
> > >
> > >
> > > The problems i've run into:
> >
> > > 1. if 2 or more messages get sent simultaneously, one
> > of them
> > > might get dropped (this happens a lot)
> >
> >
> > This shouldn't happen and actually never happened in my own
> > experience.
> > A single 2-byte message sets and one pin to HIGH and sets a
> > timer for
> > that pin. So, if you need two set two pins simultaneously, you
> > need to
> > send two 2-byte messages. I don't see how the code could omit
> > a message,
> > unless two subsequent messages set the same pin.
> >
> > If you modified the code, you can send me a copy, so I'll look
> > into it.
> >
> > > 1. the handshake does not seem to work on Linux (Ubuntu
> > 11)
> >
> > It's pretty crude. Whenever you send it a '255' (0xff) byte,
> > it responds
> > with the following ASCII sequence: 'SOL 0 1'. You can easily
> > test that
> > with [comport] directly.
> >
> > The ugly thing is that [solenoiduino] has to make sure not to
> > send any
> > 0xff bytes and thus some values for periods are not allowed /
> > replaced,
> > e.g 127, 255, 383 etc.
> >
> > > 1. the original code only supports 16 solenoids
> > > This last one is the one that goes over my head, since the
> > code uses
> > > that bit twiddling stuff, I can't figure out how to send the
> > > appropriate messages to any solenoids past 15. So, I'm a
> > little stuck
> > > here, any help?
> >
> >
> > The solenoiduino code uses two bytes per message, while the
> > first bit of
> > each is used for defining the byte order. This leaves 14 bits
> > for the
> > payload. The current implementation uses 4 bits for the pin
> > address and
> > 10 bits for the duty cycle. If you can live with a lower duty
> > cycle
> > resolution, you can shift some bits around. For instance, you
> > could
> > adapt the bitmask to use 6 bits for the address (allows to
> > control 64
> > solenoids) and use only 8 bit for the velocity / duty cycle.
> >
> > Alternatively, you could extend the protocol to use 3 bytes
> > per message.
> > This would give you a payload of 21 bits to be distributed
> > between
> > address and duty cycle. Of course, this reduces your maximum
> > message
> > rate by 1.5.
> >
> > Roman
> >
> >
> >
> >
> >
> > _______________________________________________
> > Pd-list at iem.at mailing list
> > UNSUBSCRIBE and account-management ->
> > http://lists.puredata.info/listinfo/pd-list
> >
> >
> >
> >
> > --
> > www.epicjefferson.com
> > www.avmachinists.org Puerto Rico based Art Collective/ Non-Profit Org
>
>
> _______________________________________________
> Pd-list at iem.at mailing list
> UNSUBSCRIBE and account-management ->
> http://lists.puredata.info/listinfo/pd-list
>
>
--
www.epicjefferson.com
www.avmachinists.org Puerto Rico based Art Collective/ Non-Profit Org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20130913/dafca431/attachment.htm>
More information about the Pd-list
mailing list