[Alex] wanted to play video games with an arcade stick and buttons, but got sticker shock after seeing the price of commercially available controllers that connect to a computer via USB. He set out to build his own and ended up with the controller-in-a box that you see above.
At first he tried using an mbed microcontroller board but was unhappy with the latency built into the system that detected a button press, sent it via USB as a keyboard press, which was then interpreted as input by the game. He ditched the microcontroller completely and picked up a couple of 4021 parallel-to-serial shift registers. He had previously used this method to make his own SNES controller. The SNES uses two 8-bit shift registers to generate an 16-bit serial packet to send to the console. [Alex’s] reused that system, adding an SNES controller plug to his arcade box, and using the SNES to USB converter he already had to connect to the computer. Now he’s got a portable controller for the cost of three buttons, the stick, and two IC’s.
He explains the project himself in the clip after the break.
Continue reading “Arcade controller in a box”
Community collaboration is a great thing. Take the Arduino PWM library for shift registers. Some folks at the Arduino forum pitched in and helped [Elco] trim off a bunch of clock cycles by using the Rotate Over Carry instruction. Now he’s reduced the overhead per shift-register from 108 down to just 43. So far this doesn’t mean more possible outputs – 768 is still quite a lot – but does it means better precision when max outputs are used. This effectively doubles the brightness levels for 768 LEDs from 16 up to 32.
We’re at a loss for what to link to here. [Elco] has a new page for the library. There’s the original forums thread but we didn’t see much of interest there. We found some stuff in the comments of this Reddit post. And of course, if you have no idea what we’re talking about go back and read the original feature.
Here’s an Arduino library that will let you drive a very large number of LEDs. [Elco Jacobs], an electrical engineering student, is the author of the library. He has a work-study job that has him helping out others with their electrical projects and he was constantly being solicited for methods to control droves of light emitting diodes. This was the motivation that led him to produce the dazzling 16 RGB LED example seen in the video after the break.
His setup doesn’t use expensive LED drivers, but instead utilizes 595 shift registers which are both common and cheap. He calculates that it is possible to control up to 96 of these shift registers, each driving 8 LEDs, with reasonably satisfying results. This is thanks to his well-optimized code that manages to drive the clock pin of the registers at 1.33 MHz. This optimization is done by writing each command in assembly, which allows him to precisely count the cycles. Each individual pin takes 12-13 cycles to address, totally 9984 cycles at worst when addressing the maximum number of outputs.
[Elco] thinks this is as fast as he can make the routine run, but he is asking for help with testing. If you think you know how to squeeze out a few more cycles, make sure you join in on his forum thread.
Continue reading “Output up to 768 PWM signals from one Arduino”
This hack is a bit older, but one aspect of the setup makes it worth sharing. Shift registers are a common component to include in a project when you need to increase the number of I/O pins available. We’ve used them to drive LCD screens before, but we never realize you could use a 595 chip to make a 3-wire serial LCD interface. That’s because we’ve always thought of shift registers as having three control pins which must be addressed: data, clock, and latch. But it seems that’s not the case. This hack gangs the pins for clock and latch (called the storage register clock input on this chip) together. This causes the shifted data to be latched to output register one clock cycle after it is shifted into the chip.
This means you can operate the 595 chip with just two pins, but alas, you do need one more connection to drive the LCD properly. This is an HD44780 compliant display. It is being used in 4-bit mode; four of the shift register pins provide that data, while a fifth controls the Register Select pin. Since the shifted data from the 595 appears on the pins after each clock strobe, you must control the Enable pin on the LCD separately or it will behave sporadically.
So there you have it, control an HD44780 display with just 3-pins by using a $0.42 part. Are we going a little too fast for you? Check out this 595 tutorial and give the shift register simulator a try. That should bring you up to speed.
[Aaron] just finished building an online 595 shift register simulator. These inexpensive chips let you extend the number of devices that can be controlled by a single microcontroller. You see them in quite a few LED multiplexing projects, included the Ping Pong Clock that we recently built. But they can be a bit tricky to fully grasp if you’re not familiar with the hardware.
This simulator gives you a point-and-click interface for the five possible control lines on a 595 shift register. There are three pins that must be manipulated to use the device; the serial in, clock, and latch pins. The other two are for clearing the register, and enabling output and can be considered optional. You can choose to control these with a microcontroller in your own projects for more flexibility, but often they are tied to either VCC or GND (depending on the chip) when these features are unnecessary. Give this simulator a try and then take what you learned over to a solderless breadboard and see if you can write some firmware to produce the same results. If you’re still having trouble you can take a look at this 595 tutorial for further information.
[Ed Zarick] continues work on his NBA Hangtime pinball machine with the completion of the scoreboard and backglass. You should remember this project as we already covered the layer audio he developed for the system. Now he’s proving to be a protoboard master, using point-to-point techniques to build a pair of two and a half digit LED displays for team scores, as well as a shot clock timer and other status indicators.
The lighting board that controls it all is commanded via the i2c protocol, just like the three audio modules. It uses shift registers along with MOSFETs and [Ed] has taken the time to add pin headers and sockets for board interconnects. As is true with the audio system, one Arduino Mega acts as the master on the i2c bus and you’ll notice in the video after the break that the display works in perfect harmony with the sound effects.
We can’t wait to see what he comes up with for the play field!
Continue reading “NBA Hangtime pinball display”
If you’ve been lusting after your own glowing display we’re here to help by sharing some simple building techniques that will result in an interesting project like the one you see above. This is a super-accurate clock That uses ping-pong balls as diffusers for LEDs, but with a little know-how you can turn this into a full marquee display. Join me after break where I’ll share the details of the project and give you everything you need to know to build your own.