Hack a Day’s very own (and very prolific contributor) [Mike Szczys] put up a great tutorial on how to drive shift registers with an SPI interface.
[Mike]’s earlier tutorial of the 595 shift register goes through the functions of a shift register pin by pin. In a 595, bits for each position in the register are sent over one at a time. Most microprocessors have an Serial Peripheral Interface, and using an SPI bus means a lot less mucking about.
An ATmega168 was used for this build, although most Atmel chips can be made to work as an SPI master device. There are just three wires connecting the microcontroller to the shift register – SER, SRCLK, and RCLK. Like any other shift register setup, the build can be expanded by connecting the QH’ pin of the first 595 to the SER pin of the second.
[Mike] graciously made all the code for his build available. The video after the break is a 16-bit binary counter, a good stopping point before [Mike] rebuilds his Larson scanner/Cylon/Kitt, moving away from a PWM-based build to a register-based one.
Continue reading “Controlling shift registers via SPI”
When it comes to Halloween costumes, [Michael] doesn’t like buying expensive and poorly made bits of cloth and fabric that resembles [random Disney character]. Last year, his son decided to be a robot for Halloween and although gray spray paint and dryer vent hose make a very good costume, that only goes so far. The robot needed lights, so [Michael] spent a little time on this build that blinks a few LEDs in a random pattern.
The build is very simple; an ATtiny13 drives two 74HC595 shift registers. The code – all 30-odd lines of it – uses the random() function to shift high or low values to the shift registers. After pausing for a little bit, the cycle continues and a new patterns of LEDs light up.
The electronics of the robot costume could be easily transferred to another theme – astronauts need LEDs on their backpack, and of course aliens communicate with blinking lights. In any event, it would avoid last year’s fiasco with a dozen [Heath Ledger] Jokers. Check out the video of [Michael]’s intergalactic robot son after the break.
Continue reading “ATtiny hacks: Robot Halloween costume”
[Kirill] wrote in to share his ATtiny hack, a 4x4x LED cube. The 64 LED display is a great choice to fully utilize the hardware he chose. It’s multiplexed by level. Each of the four levels are wired with common cathodes, switched by a 2N3904 transistor. The anodes are driven by two 595 shift registers, providing a total of 16 addressable pins which matches the 4×4 grid perfectly. All said and done it only takes seven of the ATtiny2313’s pins to drive the display. This is one pin more than the chip’s smaller cousins like the ATtiny85 can provide. But, this chip does include a UART which means the project could potentially be modified to receive animation instructions from a computer or other device.
You may have noticed the USB port in the image above. This is serving as a source for regulated power in lieu of having its own voltage regulation hardware and is not used for data at all. Check out the animations that [Kirill] uses on the display by watching the video after the break. You’ll find a link to the source code there as well.
Continue reading “ATtiny hacks: 2313 driving a 4x4x4 LED cube”
[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.