Character Generation in 144 Bytes

[Jaromir Sukuba]  has an awesome BrainF*ck interpreter project going. He’s handling the entire language in less than 1 kB of code. Sounds like a great entry in the 1 kB Challenge. The only problem is the user interface. The original design used a 4 line character based LCD. The HD44780 controller in these LCDs have their own character table ROM, which takes up more than 1 kB of space alone.

[Jaromir] could have submitted the BrainF*ck interpreter without the LCD, and probably would have done well in the contest. That wasn’t quite enough for him though. He knew he could get character based output going within the rules of the contest. The solution was a bit of creative compression.

bf-cs-3Rather than a pixel-by-pixel representation of the characters, [Jaromir] created a palette of 16 single byte vectors of commonly used patterns. Characters are created by combining these vectors. Each character is 4 x 8 pixels, so 4 vectors are used per character. The hard part was picking commonly used bit patterns for the vectors.

The first iteration was quite promising – the text was generally readable, but a few characters were pretty bad. [Jaromir] kept at it, reducing and optimizing his vector pallet twice more. The final design is pretty darn good. Each character uses 16 bits of storage (four 4-bit vector lookup values). The vector pallet itself uses 16 bytes. That means 64 characters only eat up 144 Bytes of flash.
This is exactly the kind of hack we were hoping to see in the 1 kB challenge. A bit of creative thinking finds a way around a seemingly impossible barrier. The best part of all is that [Jaromir] has documented his work, so now anyone can use it in the 1 kB challenge and beyond.

1kb-thumb

 

If you have a cool project in mind, there is still plenty of time to enter the 1 kB Challenge! Deadline is January 5, so check it out and fire up your assemblers!

 

Craziest Pin-Saving LCD Trick Ever!

We love squeezing every last bit of silicon goodness out of a tiny chip, or at least we delight in seeing it done. Today’s analog/digital hack is one of the sweetest we’ve seen in a while. And it’s also a little bit of a puzzle, so don’t scroll down to the answer until you’ve given the schematic a good think-over.

Continue reading “Craziest Pin-Saving LCD Trick Ever!”

Upgrading Old Synths To OLED

Roland’s Alpha Juno 2 is an analog, polyphonic synth made in the mid-80s. While it isn’t as capable as the massive synths made around that time, it was very influential synth for the techno scenes of the late 80s and early 90s.

[Jeroen] is lucky enough to have one of these synths, but like all equipment of this era, it’s showing its age. He wanted to replace the character LCD in his Alpha Juno 2 with an OLED display. The original character LCD was compatible with the Hitachi HD44780 protocol, and still today OLEDs can speak this format. What should have been an easy mod turned into editing hex values on the EEPROM, but he still got it to work.

While the original character LCD could display one line of 16 characters, the ROM in the synth didn’t know this. Instead, the display was organized as a 2×8 display in software, with line one starting at address 0h, and line two starting at 40h. For a drop-in replacement, [Jeroen] would need a display the characters organized in this weird 2×8 format. None exist, but he does have a hex editor and an EEPROM burner.

With the Alpha Juno’s firmware in hand thanks to someone who does a few firmware hacks to this synth, [Jeroen] had everything he needed. All that was left to do was going through the code and replace all the references to the second line of the character LCD.

After burning and installing the new ROM, the OLED display was a drop-in replacement. That meant getting rid of the whiney EL backlight in the original display, and making everything nice and glowy for a few nights on a dark stage.

Raspi Ambilight Integrated in a 19″ Rack Packs Lots of Peripherals

raspi ambilight

Ambilight systems create light effects around your monitor that correspond to the video content you’re playing. [Sébastien] just build his (French translated to English, original here) and embedded all the elements in a 19 inch rack he bought from Farnell.

As most ambilight systems we’ve covered over the years the HDMI signal is first split in two, one being sent to his monitor while the other is converted into a S-Video signal. The latter is then captured with a STK1160 stick connected to a Raspberry Pi. A python script using the OpenCV library is in charge of extracting the frames pixels and figuring out what colors should be sent to the SPI connected LPD8806 LEDs. A nice web interface also allows to drive the LEDs from any platform connected to his local network. Finally, a standard HD44780 LCD and an infrared receiver are connected to the raspberry, allowing [Sébastien] to control and monitor his platform. Funny thing: he also had to use two relays to power cycle his HDMI splitter and converter as they often crash. You can check out a demonstration video from a previous revision after the break.

Continue reading “Raspi Ambilight Integrated in a 19″ Rack Packs Lots of Peripherals”

Hackaday Links: February 9, 2014

hackaday-links-chain

Here’s a quick tip to extend the usefulness of your multimeter. It’s a set of mini test hooks soldered to alligator clips with a short hunk of stranded wire in between. You can buy mini test hooks that go right on the metal probes of your meter, but the weight and bulk of the meter probes and cords sometimes get in the way. This rig allows more flexibility because of that wire.

Staying on the theme of test equipment tips, here’s a simple way to make a Y-connector for logic analyzers. [Thomas] uses a dual-row pin header, shorting each pair of pins so that both rows are connected. When this is plugged into a pin socket it leave two pins for connecting your test equipment and the rest of the project hardware.

After seeing our feature of a 3-wire Character LCD [Chad] wrote in to mention he built a 1-wire version using an ATmega328.

If you’re going to be in Anaheim this week you can stop by the ATX-West expo and see a 3D printer with a 1m x 1m x 0.5m printing area. [Thanks Martin]

Speaking of 3D printers, here’s a big delta robot (seven feet tall) outfitted for alternative material printing. It’s printing a CT scan of ribs and a heart in hot glue. This seems to be a popular material for more artistic uses. We just saw a hexapod which deposits hot glue as it roams.

The weaponized quadcopter post from Tuesday was a controversial one. The really bad part of it was the laser, which strapped to anything is extremely dangerous. But the other hack may have just been poorly executed. Hackaday alum [Jeremy Cook] wrote in to mention that fireworks and quadcopters can be used more responsibly. He strapped a sparkler to his quadro and used it to make light graffiti. You may remember that [Jeremy] wrote an introduction to light graffiti for us back in November.

Controlling Alphanumeric LCDs With Three Wires

shift

The HD44780 LCD controller is the defacto way of adding a small text display to your next project. If you need a way to display a few variables, a few lines of text, or adding a small user interface to a project, odds are you’ll be using one of these parallel LCDs. These displays require at least six control lines, and if you’re using a small microcontroller or are down to your last pins, you might want to think about controlling an LCD with a shift register.

[Matteo] used the ubiquitous ‘595 shift register configured as a serial to parallel converter to drive his LCD. Driving the LCD this way requires only three pins on the Arduino, [Matteo]’s microcontroller of choice.

For the software, [Matteo] modified the stock Arduino LiquidCrystal library and put it up on his Git. Most of the functions are left untouched, but for this build the LCD can only be used in its four bit mode. That’s not a problem for 99% of the time, but if you need custom characters on your LCD you can always connect another shift register.

If you just can’t spare three pins for a display, you could squeeze this down to just two, or add a second microcontroller for a one-wire-like interface.

Controlling Alphanumeric LCDs With Two Wires

LCD

The Hitachi HD44780 LCD controller is the most common interface to all those alphanumeric LCDs out there, and there are a million and one tutorials for connecting these displays to any microcontroller imaginable. This still doesn’t mean hooking up these displays is necessarily simple, though: you still need at least four wires for the data, at least two for control signals, and power and ground lines for connecting the LCD the traditional way.

Here’s a neat trick for connecting HD44780 displays that only needs two wires. In this setup there’s only a ground and power+data wire. The interesting part of this build is using the power pin to transmit serial data with an RS-232-like format. The only difference is keeping the data line at +5 V when idle; a reasonable-sized cap keeps the display and controller alive when the master microcontroller is transmitting.

This technique does require a bit of logic on the receiving end, which a small 8-pin PIC can handle with ease. Communication between a microcontroller and this “smart” LCD is done at 2400 bps, which even the wimpiest micro can handle. All the software to make this setup work are available here, and we expect an Atmel-based version to hit the Hackaday tip line shortly.