Monthly Archives: February 2016

2/13/2016, February is for the Love of Pinball

February has been very busy in pinball related work.  Who would have known?  While little playing has been occurring, except for walking down to the basement and playing some Taxi…building, testing, and tinkering have been happening at an accelerated rate.

As listed a couple weeks back, I finished MPF platform interface code.  Handed it to Mission Pinball, and got a request to add some platform tests.  At this point, I’m still on the old branch, and I fear moving to the development branch because it moves from Python 2 to Python 3.  I will be waiting for the dev (0.30) branch to become the official released version before moving that way.

I did my first Git pull request to add the platform interface to MPF.  (It was…kind of a pain in the rump).  You end up forking the MPF 0.21.3 which is the master, pulling the repository onto your computer, merging all your changes, committing those changes, and then pushing them back to the server.  After doing all that you end up doing a pull request.  I’m used to using svn where it is simply a right click, and boom, it is automatically checked in.  Git has a lot of benefits when you have a lot of people checking code into a repository, but it seems like things are almost just as difficult as svn to merge all the branches together.  (I will give you, subversion and branch merging really stinks too.)  Maybe after I get more used to the workflow it won’t seem so absurd to me.   (Whenever you check something into a repository the first time, you fear that you are going to screw something up and cause a whole bunch of hassles for somebody else to clean it up.  I’ve been the repository master a good number of times, and that makes me that much more cognizant of trying to do things the right way.)

So in PyPI there is a small utility that downloads new code to Cypress chips with the bootloader pre-installed.  The bummer was that it didn’t support the version of the Cypress chip that I was using (simpler algorithm for smaller less powerful micro-controllers).  I ended up modifying that code to support both versions of the Cypress bootloader, and now hopefully it will be more useful.  (Before, people would have needed to download the IDE for programming the chip which is huge and only runs on windows).  Another pull request has been submitted for that code, but since progress must keep marching along, I’ve stored that code in the OPP repository.  Finished updating cyflash bootloader to make it work with PSoC 4200.

It lives in the repository under Python\Tools\cyflash_1.07.tar.gz.  Here are the quick instructions on how to use it.

  1. Download that tar.gz file, and extract it into a directory.
  2. In the top cyflash directory with the file, type “python install”.  Note:  The instructions using python assume that python is in your path.  That command installs the module.
  3. Start the Cypress bootloader.  (Unplug the board from the USB port, hold the button down as you replug in the board.  The board will rapidly blink its blue LED 500 ms on/500 ms off.)
  4. To run, type “python -m cyflash –serial COM10 –serial_baudrate 115200 image.cyacd”.  The –serial gives the serial port number for the Cypress board in whatever style fits your OS.  The last parameter is the image that is loaded onto the Cypress board.
  5. The download should take on the order of 7 or 8 seconds.  Wooohooo, you now have an updated OPP Gen2 board.

I will start putting images into the repository so people can get them and update their cards.  The only image that is currently available is which can be found at Gen2.rev0.1.0.0.cyacd.

A new person has signed up to work with the OPP hardware.  Since I make up names for everybody, I’m calling the new person, “the Sultan”.  Yeah, if you use the OPP hardware, you will be given a new and completely ludicrous code name so that I can talk about you and not give away your real name.  I am really excited because he has decided to build the cards himself.  That was the original plan for the OPP.  You get cheap controllers for your pinball machine, but you need to do a little bit of work yourself.

So the Sultan has a populated Jokerz playfield.  He built a cabinet for it, and right now, there is no backbox.  After looking through the manual, it looks like he is going to need 5 solenoid wing boards, 5 input wing boards, and 8 incandescent wing boards.  It will require 5 of the PSoC 4200 base cards.  I worked up a quick cost estimate for all the boards and it ends up to be $85.00.  The thing that I’m really excited about is it is a much more full featured game than anything that I’ve converted up until this point.  It should be a good test case on many different levels.

There was a guy on Mission Pinball who ask about the cost for 16 coils and 64 inputs.  (Currently the firmware doesn’t support switch matrices, because I chose to distribute the cards instead of having them in one central location.  I’m going to update the firmware to support a switch matrix in the next couple of months because of my next retheme project).   That being said, without doing the math, it would be approximately $16 (solenoids) + $12 (PSoC 4200) + $8 (Inputs) + $10 (boards) = $46.  Slightly outdated prices for parts to populate cards can be found in Gen2Board.pdf.

So up until tomorrow there is a 10% off sale for new PCBs at ITeadStudio.  (I thought that it ran until the end of the month, but no such luck.)  That meant on Wednesday that  I had to re-prioritize finishing the Gen2 surface mount layout.  I had started it a couple months back, but was never happy with the layout.  The surface mount incandescent card supports eight bulbs/LEDs and can be used as either a high side switch or a low side switch.  That is necessary for supporting a light matrix.  The original layout had the high side switch on one side of the card, and the low side switch on the other side of the card.  This time, I laid it out with all the FETs on the top of the card, the pull up resistors for the high side switch on the bottom.  The layout looks much better now.

I’m trying to panellize the board and have ITeadStudio cut them out.  The only problem is that you need to order at least a 10 cm x 10 cm board to have them panellize it.  That means that I’m going to end up with 80 incandescent boards which is enough for about 10 pinball machines.  (Hey, if it saves me an hour of cutting out boards on the tile saw, it is worth it.)  Here is a quick picture of the panellized card that was ordered on Friday night.


Panellized incandescent surface mount card.

While talking to the Sultan and looking through the Jokerz manual, there were a fair number of flashers that needed to be implemented.  After doing some quick research on the pinball medic website, it turns out that flashers (#89 bulbs), only require .5 A of current.  Wow, that is well within the specs of the FETs used on the incandescent boards as long as they are only strobed at that rate, and not on continuously.  That ends up being a big cost savings, and will only require a firmware upgrade.

Here is the news of the absurd.  So Joe turned me onto this video a couple weeks ago.  It is for the Forbidden Planet pinball machine and here is the quick youtube link.

So there are two points to look at in the video.  At  3:05 in the video you see 5 PROC PD-16 boards (each board runs $100).  The person narrating the video mentions that most of the drivers are used for flashers, not driving solenoids.   At 8:18 in the video there is a good picture of 2 of the PD-LED boards ($90 each).  There is another sandwich of two boards with is probably another PD-LED and PD-SW16 ($60).  They don’t show behind backglass so it is either a P3-ROC $275, or at least a $20 RS485 master controller.  That ends up being anywhere from $850 in cards to $1105.  Hopefully they are getting a bulk discount.  I wanna see what their BOM is on their machine.  Hey, John Trudeau.  Hire an electrical engineer for Pete’s sake.  He will be able to cut 50% off your BOM for the cards alone!

That being said, the machine looks awesome.  Love all the different ways the ball can go, and just the complexity of the layout.   That definitely looks like it is going to be a nice machine if it gets finished.  Good gosh, I will be 100 years old before that gets to the used market at a price I’m willing to pay.



2/2/2016, MPF interface…duh, duh, dun, done!

As I write this, the OPP platform interface to MPF is done.  It went rather well despite simply reverse engineering another platform interface.  A couple new commands were added to the board interface to make talking to MPF a lot simpler.  These include setting all incandescent bulbs as either on or off in a single command, updating an individual solenoid configuration, and updating the color on a single LED.  Easier to add those commands rather than trying to shoehorn the MPF to use the first version of the commands.

MPF works very differently than the OPP pinball framework.  OPP framework gathers all the updates to incandescent boards and configuration changes and sends them down to the card in one single command.  MPF wants to update solenoids one at a time.  This means the OPP framework is a little more efficient on the serial link, but moving to Gen2 the link went from 19.2 kbps to 115 kbps, so that doesn’t seem to be an issue.

I still have a little more work to do.  I need to add support for version 1 cards.  The only people who probably care about this are Cactus Jack, maybe Joe, and myself.  It is mostly for me and updating the SS3 pinball machine.  I’m too lazy to rewire all of the solenoids and inputs, so why not just use the old first generation OPP cards as they are, and simply add one or two cards to support incandescent bulbs.

That would make the upgrade to SS3 that much simpler (and forces me to finish the layout on the low side/high side driver card for bulbs).  Hey…Iteadstudio is currently having a 10% off sale.  That might put a fire under my butt to get it done by the end of the month.

Need to have an easy way to update OPP gen2 cards.  Right now, a user would need to download Cypress’ PSoC Creator, and download new code using that tool.  (That’s a 604MB download).  The bootloader protocol is documented by Cypress.  I found a version of cyflash which is supposed to do what I need, but of course it crashes immediately when trying to run it.  I have also found some C++ windows code that is supposed to implement the protocol.  I’m going to start by basing the updater of cyflash because it is written in Python.  That should be the simplest for people to use across multiple different platforms.