DIY I2C Tester

[Dilshan] built a dedicated I2C tester which allows for I2C bus control over USB using simple commands such as init, read, write, etc. The Linux kernel has had I2C driver support for a couple of decades, but you’ll be hard pressed to find a computer or laptop with a I2C connector (excluding Bunnie Huang’s Novena hacker’s laptop, of course). This tester does require a Linux host, and his programs use libusb on the computer side and V-USB on the embedded side.

[Dilshan] put a lot of time into building this project, and it shows in the build quality and thorough documentation. With its single-sided PCB and all thru-hole construction, it makes a great beginner project for someone just getting into the hobby. At the heart of the tester is an ATmega16A in a 40-pin PDIP package (despite the Microchip overview page calling it a 44-pin chip), supported by a handful of resistors and transistors. Schematics are prepared in KiCad, code is compiled using gcc and avr-gcc, and he provides a label for the enclosure top. The only thing missing is information on the enclosure itself, but we suspect you can track that down with a little sleuthing (or asking [Dilshan] himself).

If you use I2C quite a lot, give this project a look. Easy to build, useful in the lab, and it looks nice as well. We have featured [Dilshan]’s work over the years, including this logic pattern generator and his two-transistor-on-a-breadboard superheterodyne receiver.

Cursed USB-C: When Plug Orientation Matters

One of the selling points of the USB-C plug is that supposedly there is no way to incorrectly insert it. As [Pim de Groot] shows with a ‘Cursed USB-C 2.0 Device‘, reality is a bit more complicated when it comes to USB 2.0 compatibility in USB-C. He made a PCB that elegantly demonstrates the simplicity of the problem, featuring two LEDs. Only one orientation of the USB-C plug will cause one of the LEDs to light up green, with the other orientation leaving both LEDs blinking red.

Sigil on the back of the cursed USB-C 2.0 device, by Pim de Groot.

The reason for this behavior is simple: as [Pim] explains, although the USB-C plug has only a single pair of data lines (D+/-) for USB 2.0 connectivity, the receptor duplicates these on either side of its pins, leading out two pairs of D+/- lines. Normally you would connect the matching lines in these pairs together to ensure consistent behavior no matter the plug orientation, but you don’t have to.

By leading each USB 2.0 data pair to its own SAMD11C MCU, only one of the MCUs would be connected to USB, resulting in the connected MCU blinking the LEDs. With a bit more circuitry it’s possible to detect which way around the plug is inserted and use this information in a single MCU system, altering its behavior. While at first glance this seems little more than a fun party trick, but it also offers insight in a possible failure mode of USB-C 2.0 devices where only one plug orientation works, due to broken traces or pads.

Board view of [Pim]’s Cursed USB-C 2.0 Device.

(Heading image: Cursed USB-C 2.0 Device, by Pim de Groot)

A Handy Reference For Display Drivers And LCD Controllers

Ever tried to find the data on a mysterious LCD controller that’s kicking around in your parts bin? Well check out this list of various LCD controllers that [Achim] has put together. He summarizes the basic specifications for each controller and includes data sheet links if available (note — the website is in German, although most of the data itself is in English). All in all, he has collected 72 controllers from five different manufacturers, and 46 of them have data sheets. For each controller, he tabulates maximum resolution, color depth, type of interface, and the targeted display technology. For example, here is the entry for the Ilitech ILI9341 TFT controller commonly found in embedded projects:

Furthermore, many of the controllers also have a short video clip showing them in operation posted over on [Achim]’s YouTube channel, where he also has a bunch of quick (less than one minute) videos of all sorts of embedded goodies. We do find this table of controllers to be a little dated — for example, another popular controller used on small color OLED displays, the Solomon Systech SDS1351, is not included. But it is certainly a good resource to bookmark.

We suspect that [Achim] made this table as a result of developing µGUI, a small (only three files) C-language graphics library (see the GitHub repository) he released back in 2015. Do you have any good resources for tracking down unknown LCD controllers? If so, share in the comments below. And thanks to [Dmitry] for sending in this tip.

Continue reading “A Handy Reference For Display Drivers And LCD Controllers”

Free RTOS

Getting Started With FreeRTOS And ChibiOS

If operating systems weren’t so useful, we would not be running them on every single of our desktop systems. In the same vein, embedded operating systems provide similar functionality as these desktop OSes, while targeting a more specialized market. Some of these are adapted versions of desktop OSes (e.g. Yocto Linux), whereas others are built up from the ground up for embedded applications, like VxWorks and QNX. Few of those OSes can run on a microcontroller (MCU), however. When you need to run an OS on something like an 8-bit AVR or 32-bit Cortex-M MCU, you need something smaller.

Something like ChibiOS (‘Chibi’ meaning ‘small’ in Japanese), or FreeRTOS (here no points for originality). Perhaps more accurately, FreeRTOS could be summarized as a multi-threading framework targeting low-powered systems, whereas ChibiOS is more of a full-featured OS, including a hardware abstraction layer (HAL) and other niceties.

In this article we’ll take a more in-depth look at these two OSes, to see what benefits they bring. Continue reading “Getting Started With FreeRTOS And ChibiOS”

Your Plants Can Take Care Of Themselves Now

One of [Sasa]’s life goals is to be able to sit back in his home and watch as robots perform all of his work for him. In order to work towards this goal, he has decided to start with some home automation which will take care of all of his house plants for him. This project is built from the ground up, too, and is the first part of a series of videos which will outline the construction of a complete, open-source plant care machine.

The first video starts with the sensors for the plants. [Sasa] decided to go with a completely custom module based on the STM32 microcontroller since commercial offerings had poor communications designs and other flaws. The small board is designed to be placed in the soil, and has sensors for soil moisture as well as other sensors for amount of light available and the ambient temperature. The improvements over the commercial modules include communication over I2C, allowing a large number of modules to communicate over a minimum of wires and be arranged in any way needed.

For this build everything is open-source and available on [Sasa]’s GitHub page, including PCB layouts and code for the microcontrollers. We’re looking forward to the rest of the videos where he plans to lay out the central unit for handling all of these sensors, and a custom dashboard for controlling them as well. Perhaps there will also be an option for adding a way to physically listen to the plants communicate their needs as well.

Continue reading “Your Plants Can Take Care Of Themselves Now”

NRF52 Weather Station Gives Forecast With Style

We’re no strangers to DIY environmental monitors around these parts, in fact, it seems like that’s one of the most common projects hackers take on when confronted with the power of a modern Internet-connected microcontroller. But among such projects, this miniature nRF52-based weather station built by [Andrew Lamchenko] is among the most polished we’ve seen.

Externally, this looks as though it could easily be a commercial product. The graphical interface on the ePaper display is very well designed, delivering plenty of data while still looking attractive enough to hang in the kitchen. The enclosure is 3D printed, but [Andrew] poured enough elbow grease into sanding and polishing the front that you might not realize it at first glance.

Internally it uses the popular BME280 sensor to detect temperature, humidity, and barometric pressure, though the custom PCB is also compatible with the similar SI7021 and HTU21D sensors if you want to switch things up.

That said, you really want the ability to measure pressure, as it allows the firmware to do its own basic weather forecasting. All the collected data is beamed out over Bluetooth Low Energy (BLE), where it can be collected by the open source MySensors IoT framework, but we imagine it wouldn’t take much work to integrate it into your home automation system of choice.

As excited as we might be about the prospect of repurposing things such as electronic shelf labels, we’re happy to see the prices for general purpose electronic paper screens finally dropping to the point where projects of this caliber are within the means of the hacker crowd.

Continue reading “NRF52 Weather Station Gives Forecast With Style”

High-Altitude Balloon Tracker Does Landing Prediction With Pi Pico

[Dave Akerman]’s ongoing high altitude balloon (HAB) work is outstanding, and we’re all enriched by the fact that he documents his work like he does. Recently, [Dave] wrote about his balloon tracker based on the Raspberry Pi Pico, whose capabilities brought a couple interesting features to the table.

In a way, HAB trackers have a fairly simple job: read sensors such as GPS and constantly relay that data to someone on the ground so that the balloon’s location can be tracked, and the hardware recovered when it ultimately returns to Earth. There are a lot of different ways to do this tracking, and one thing [Dave] enjoys is getting his hands on a new board and making a HAB tracker out of it. That’s exactly what he has done with the Raspberry Pi Pico.

Nothing builds familiarity like actually using a part, and the Pico had some useful things to contribute to a HAB tracker application. For one thing, the Pico has an onboard buck-boost converter that allows it to be powered from a relatively wide voltage range (~1.8 V to 5.5 V), so running it directly from batteries is both possible and desirable from a tracker perspective. But a really useful feature was possible thanks to the large amount of memory on the Pico: dynamic landing prediction.

[Dave] does landing prediction prior to launch based on environmental conditions, but it’s always better if the HAB tracker can also calculate its own prediction based on actual observed events and conditions. A typical microcontroller board like an Arduino doesn’t have enough memory to store the required data upon which to do such calculations, but the Pico does so easily. [Dave]’s new board transmits an updated landing site prediction along with all the rest of the telemetry, making the retrieval process much more reliable.

Want to see a completely different approach to HAB recovery? Check out a payload guided by steerable parachutes.