Down the Rabbit Hole and Back Out Again: Serial Over Headphone Jack

[ttsiodras] tells an epic tale of getting a custom Debian kernel installed on an Asus MemoPAD (ME103K) tablet. Skipping to the end of the saga, he discovers what looks like serial data coming out on the headphone jack when the system boots, but the signal was so distorted that he couldn’t simply interpret it. The solution turns out to be attaching a level-converter chip.


A level converter is a non-inverting amplifier, usually with a Schmitt trigger for immunity against noise. In this case, it acts like a “binarizer” — outputting a high voltage when the input rises above a threshold, and a low when it drops below. It’s the right part when you need to clean up a messy digital signal, and in this case works just fine because the capacitive distortion effects slow down both the leading and trailing edges of the signal, keeping the serial data’s timing intact.

That was the spoiler. If you want to read up on putting a custom Linux on an Android device, check out [ttsiodras]’s first post where he backs the machine up, and the second where he gets his custom kernel up and running. If you’re ever faced with an Android tablet that hasn’t been owned yet, or if you just have a DIY streak, this should help you get started.

Using the audio jack for serial is actually not uncommon, and discovering a serial terminal that listens at boot time is our favorite way to wedge a Linux OS into odd devices. So when you see a funny, distorted signal coming out at 115,200 baud, take a moment to clean its edges up and see what you’ve got.

Easy LCD control for Arduino Mega


[Andy Brown] wrote in to show off the TFT LCD adapter he’s been working on for connecting inexpensive displays to an Arduino Mega.

These TFT LCD screens can be picked up on eBay for a few dollars. But they’re more suited for 16-bit microcontrollers which operate at 3.3V levels. His adapter board, which plugs directly into the Mega’s dual-row pin header, makes it easier to control these with an 8-bit chip that is running at 5V.

There’s a couple of things that make this happen. First off, he’s included level converter chips to managed the 3.3V/5V issues. Second, he uses latch chips to translate eight pins on the Arduino Mega to sixteen pins on the display. Those chips have a latch pin which holds the output values in memory while the input pins are changed. He manages to drive the latch on just one of the chips using the chip select (CS) line called for by the LCD protocol. This means you don’t lose any extra pins.

Another way to uses the displays with Arduino is to use a smart controller for TFT screens.

Continue reading “Easy LCD control for Arduino Mega”

Level converters to make all your hardware (5.5V and under) play with each other


I finally set aside some time for one of my own projects. I have been playing around with ARM microcontrollers a lot lately and wanted to try out my GLCD display that uses the KS0108 protocol. It’s 5V but I had heard that some of these displays will work with 3.3V TTL. But the datasheet tells me otherwise. I tried using a pull-up resistor to 5V and configuring the Stellaris Launchpad pins to open drain, but the low voltage wasn’t getting below the 0.3V threshold needed by my display. My only choice was to use some type of level conversion. I actually ended up driving the KS0108 using a pair of TXB0108 level converters.

I figured this had to have been done before so I check over at Sparkfun. Their offerings are either one-way or have a direction pin that you must drive yourself. I figured there had to be a bi-directional solution and a search over at Mouser led me to the TXB0108. It is exactly what I was looking for and as you can see I etched my own circuit boards to make the TSSOP chips breadboard compatible. I’ve documented the process you can find the code and board files at my post linked above.

Update: one of the Reddit comments mentions this chip is available on a breakout board from Adafruit if you’re interested.

PCA9517 i2c translator a perfect companion for Raspberry Pi hardware add-ons

The rig pictured above works as an Internet connected temperature sensor which sends [Zaion] an email with a graph of the change over time. This in itself is interesting, but one part in particular caught our eye. He’s using an i2c temperature sensor , and we think the PCA9517 Level-Translating I2C Bus Repeater that makes it possible is a perfect match for the RPi.

This is a Texas Instruments part. You can find more about it from the company’s product page. The key words in the name of the chip are ‘Level-Translating’. This has two bus connections, each with variable voltage levels. On side A the bus can be 0.9V to 5.5V. On side B the bus range is 2.7V to 5.5V. Since the Raspberry Pi I/O pins operate at 3.3V this could connect to the B side, give you the ability to interface with i2c parts rated for lower or higher voltages. This is especially handy for folks who started with the Arduino and own mostly 5V compliant prototyping hardware.

The part comes in a SOIC package, which you can easily hand solder and will costs around $1 depending on the supplier.

Raspberry Pi as a PIC programmer

[Giorgio Vazzana] turned his Raspberry Pi into a PIC programmer using a rather small collection of common parts. It supports about a dozen different chips from the 16F family. But we’d guess that software is the limiting factor when it comes to supporting more chips.

Generally the problem with PIC programming is the need for a 12V supply. He chose to use an external 12V supply and a 78L05 linear regulator to derive the 5V rails from it. With the power worked out there are some level conversion issues to account for. The RPi provides 3.3V on the GPIO header pins, but 5V logic levels are needed for programming. He built transistor and voltage divider circuits to act as level converters. The programming software bit bangs the pins with a write time of less than eight seconds per 1k words of program data. So far this does not work with ICSP, but he plans to add that feature in a future version.

Driving a Nokia QVGA screen with Arduino (or any uC)

This is a Nokia 6300 screen. It’s a 320×240 display that has about 2″ of diagonal viewing area and boasts 24-bit QVGA TFT technology. It’s going to look fantastic in your next project and it won’t be hard to get up and running thanks to the hardware and software guide which [Andy Brown] put together. He chose this display because of its features, but also because it’s really easy to source and can be had for $5-7 delivered. The guide is aimed at working with the Arduino MEGA, but we’re sure you can port it for just about any microcontroller you’d like.

Much like the FPGA PSP display we just looked at, [Andy] chose to design his own PCB to host the LCD. This makes it a snap to attach the LCD — literally, since he managed to source the correct snap-in connector. The board also hosts a constant-current LED driver which takes care of the backlight, and allowed him to build in a level converter (since the screen communicates at 3.3V but Arduino uses 5V logic).

The software tutorial is lengthy but impressive. We’re surprised at the performance he gets out of the AVR chip. See the screen cycle through a set of demos after the break.

Continue reading “Driving a Nokia QVGA screen with Arduino (or any uC)”

Level conversion with plenty of options

[Andy Brown] wanted one level converter to rule them all, so he set out to build his own which included plenty of options.

The chip at the top and center is a pretty neat little device. It’s an NXP 74ALVC164245DL. In addition to having an incredibly long and seemingly meaningless part number, it contains a pair of bi-directional octal ports. It runs very fast (about 333 MHz) and supports voltages up to 5V on one side, and up to 3.3V on the other. As long as you stay below those maximums you can choose your own target voltages. To do so, he included a couple of adjustable voltage LDOs which are set using jumpers.

But wait, [Andy’s] not finished quite yet. If the jumpers don’t offer the target voltage you’re looking for he also included breakout pins so that you may inject the voltage using an external source. He even included the option to use the LDOs on their own, without the level converter. How do you keep all of these configurations straight? He build a little web form that lets you set your desired parameters and it tells you which jumper should be connected.