General Purpose I/O: How to get more

The first program anyone writes for a microcontroller is the blinking LED which involves toggling a general-purpose input/output (GPIO) on and off. Consequently, the same GPIO can be used to read digital bits as well. A traditional microcontroller like the 8051 is available in DIP packages ranging from 20 pins to 40 pins. Some trade the number of GPIOs for compactness while other devices offer a larger number of GPIOs at the cost of complexity in fitting the part into your design. In this article, we take a quick look at applications that require a larger number of GPIOs and traditional solutions for the problem.

A GPIO is a generic pin on an integrated circuit or computer board whose behavior, including whether it is an input or output pin, is controllable by the user at runtime. See the internal diagram of the GPIO circuit for the ATmega328 for reference.

Simply put, each GPIO has a latch connected to a drive circuit with transistors for the output part and another latch for the input part. In the case of the ATmega328, there is a direction register as well, whereas, in the case of the 8051, the output register serves as the direction register where writing a 1 to it sets it in output mode.

The important thing to note here is that since all the circuits are on the same piece of silicon, the operations are relatively fast. Having all the latches and registers on the same bus means it takes just one instruction to write or read a byte from any GPIO register.
Continue reading “General Purpose I/O: How to get more”

Pocket-size Pi Zero Desktop features e-paper Display

[Ramin Assadollahi] uses his Raspberry Pi Zero W as a self-contained mobile desktop, connecting to it over VNC from another computer when he wants to hack away at some code or work on a new project. But he often found himself wishing there was some convenient way of displaying pertinent into right on the device, such as what IP address the Pi Zero had pulled. Then he found the 2.13 inch e-Paper HAT for the Pi Zero from Waveshare, and it all clicked into place.

The final device, which he refers to as the StickPi, combines a Pi Zero W, the Waveshare e-Paper display, and a strip of protoboard featuring a few tactile buttons, all inside of a 3D printed case. To really get the most out of the internal volume of his case, [Ramin] soldered the header pins to the Pi Zero in the middle, allowing him to create a space-saving “sandwich” out of all the components.

With the e-Paper display, [Ramin] now has a way to show information on the device itself without having to connect to it over the network. But thanks to the tactile switches on the back connected to the Pi’s GPIO, he also has six programmable buttons that could do anything he wants.

In the most basic implementation, each button could execute a command or script on the Pi. But [Ramin] has something a little more advanced in mind. In the video after the break, he explains that his next step is going to be working on an actual user interface for the Pi’s e-Paper screen, making use of the roughly gamepad style layout of the rear buttons. A “paged” interface with scrolling options would allow the user to perform all sorts of functions quickly and easily, and we’re looking forward to seeing what he comes up with.

This isn’t the first time we’ve seen somebody try to turn the Pi Zero into a more mobile-friendly platform, and the construction method here actually reminds us of a much smaller version of the Zero Phone.

Continue reading “Pocket-size Pi Zero Desktop features e-paper Display”

Linux Adds CH341 GPIO

There was a time when USB to serial hardware meant one company: FTDI. But today there are quite a few to choose from and one of the most common ones is the WCH CH341. There’s been support for these chips in Linux for a while, but only for use as a communication port. The device actually has RS232, I2C, SPI, and 8 general purpose I/O (GPIO) pins. [ZooBaB] took an out-of-tree driver that exposes the GPIO, and got it working with some frightening-looking CH341 boards.

He had to make a slight mod to the driver to get six GPIOs in /sys/class/gpio. Once there though, it is easy to manipulate the pins using a shell script or anything that can write to the virtual files corresponding to the GPIO pins.

Continue reading “Linux Adds CH341 GPIO”

Blast From the Past with Space Station PROM Reader

The Ursa Major Space Station SST282 is a dinosaur of a digital reverb.  Okay, so maybe 1978 isn’t ancient yet, but it is getting to the point where one has to worry about the possibility of component failure.  At least that’s what [Obsoletetechnology] thought when they created a backup of its memory contents.

As can be seen from some of Hackaday’s previous articles, a part does not have to be an older one to fail.  However, there is no such thing as being too paranoid when it comes to older parts reaching their lifetime.  Especially when there is valuable memory involved.  Each bit of PROM memory is locked by a fuse on its location grid to store permanent data.  To be able to read this and collect the respective data, a Raspberry Pi 3 PROM reader was created.

The SST282 uses 3 TTL-level 74xx series Schottky PROM memories on board that hold RAM lookup tables.  In the case that these failed, all of the subsequent information would be lost since there are no surviving memory dumps online.  Fortunately we are interested only in gathering their contents, so the PROM reader schematic is fairly rudimentary.  The chip’s address and data buses connect to a Pi’s GPIO header, and the only other thing to note is a 74LS541 TTL level shifter that converts the Pi’s 3.3V output to the PROM’s 5V TTL level.

Continue reading “Blast From the Past with Space Station PROM Reader”

Know the Load with this Simple Microcontroller CPU Meter

How do you tell how much load is on a CPU? On a desktop or laptop, the OS usually has some kind of gadget to display the basics. On a microcontroller, though, you’ll have to roll your own CPU load meter with a few parts, some code, and a voltmeter.

We like [Dave Marples]’s simple approach to quantifying something as complex as CPU load. His technique relies on the fact that most embedded controllers are just looping endlessly waiting for something to do. By strategically placing commands that latch an output on while the CPU is busy and then turn it off again when idle, a PWM signal with a duty cycle proportional to the CPU load is created. A voltage divider then scales the maximum output to 1.0 volt, and a capacitor smooths out the signal so the load is represented by a value between 0 and 1 volt. How you display the load is your own choice; [Dave] just used a voltmeter, but anything from an LED strip to some kind of audio feedback would work too.

Still just looking for a load meter for your desktop? Take your pick: an LED matrixold-time meters, or even Dekatrons.

Driving 16 WS2812B Strips with GPIOs and DMA

[Martin Hubáček] wrote in with his WS2812 LED library for the STM32F3 series processors. [Martin]’s library takes the same approach as [Paul Stoffregen]’s OctoWS2811 for the Teensy, and [Erich Styger]’s for the Freescale FRDM-K64F board. That is, it uses three DMA channels to get the signal out as fast as possible.

Continue reading “Driving 16 WS2812B Strips with GPIOs and DMA”

Hand Gestures Play Tetris

There are reports of a Tetris movie with a sizable budget, and with it come a plentiful amount of questions about how that would work. Who would the characters be? What kind of lines would there be to clear? Whatever the answers, we can all still play the classic game in the meantime. And, thanks to some of the engineering students at Cornell, we could play it without using a controller.

This hack comes from [Bruce Land]’s FPGA design course. The group’s game uses a video camera which outputs a standard NTSC signal and also does some filtering to detect the user. From there, the user can move their hands to different regions of the screen, which controls the movement of the Tetris pieces. This information is sent across GPIO to another FPGA which uses that to then play the game.

This game is done entirely in hardware, making it rather unique. All game dynamics including block generation, movement, and boundary conditions are set in hardware and all of the skin recognition is done in hardware as well. Be sure to check out the video of the students playing the game, and if you’re really into hand gesture-driven fun, you aren’t just limited to Tetris, you can also drive a car.

Continue reading “Hand Gestures Play Tetris”