Turning A Microchip MPLAB Snap Into A UDPI AVR Programmer

The Unified Program and Debug Interface (UPDI) is Microchip’s proprietary interface for programming and on-chip debugging, and has become the standard on AVR MCUs after Microchip’s purchase of Atmel. Being a proprietary interface means that even entry-level programmers like the Atmel-ICE are rather expensive at over $100. That’s when for [Scott W Harden] the question arose of whether the much cheaper MPLAB Snap board (~$34) could be used as well for AVR UDPI purposes.

The stages of grief that [Scott] went through before he had it working involved among others the updating of the MPLAB Snap board firmware, getting yelled at by the Microchip Studio IDE when attempting to use the Snap for AVR MCU programming, and ultimately fixing the board following the relevant Microchip Engineering Technical Note (ETN #36) that specifies the removal of a 4.7 kΩ pull-down resistor (R48) on the Snap board. This allows the UDPI line to be pulled high by the MCU.

As the ETN notes, an external pull-up may also be used to override the pull-down, which would leave the ICSP functionality of of the Snap intact. As [Scott] mentions in his conclusion, it feels as if UDPI AVR support with the Snap is really an afterthought for Microchip. Meanwhile there are also more DIY solutions as [Scott] adds, which are useful for just flashing the MCU. An example is with a USB-TTL serial adapter and pymcuprog.

The problem with DIY solutions like jtag2updi, ftdi2updi, and their kin is the effort required to assemble them, and the uncertainty of long-term support as the UPDI ecosystem keeps evolving with new devices and new features. The MPLAB Snap with resistor mod may be just that middle ground between an Atmel-ICE and reverse-engineered OSS projects.

(Featured image: MPLAB Snap resistor mod illustrated, from Microchip ETN #36)

A radio with a white front grate and wood edges sits on a grey surface. Next to the radio are small white disks with colorful edges reminicient of microdisc-sized records. A yellow-ringed disk sits on the radio. The handwritten title says, "Summer of 2011; Holidays in Barcelona"

Spotify Player Brings Back Physical Media

Digital music has made keeping all your tunes with you a lot more convenient, but have we lost something with dematerialization? [Jordi Parra] felt that there was something lacking with the digital music experience and designed a Spotify player with a tactile interface.

Specific playlists are selected via small RFID tags that look like a cross between a MiniDisc and a vinyl record. As this is a prototype, an Arduino reads the RFID tag, but needs a computer to actually play the Spotify playlist. Future iterations could include an integrated speaker and run libspotify to create a self-contained device.

While there is still work to do for a fully seamless experience, we love the details in the industrial design of this project. Clean simple lines and a combination of wood and more modern materials make this feel like a timeless piece of tech. Definitely check out the full photo gallery including shots of the really impressive packaging.

Want more digital music with a tactile interface? Check out this MP3 Player Shelf or a Simple Internet Radio Transplant.

Blinky Project Is 6502s All The Way Down

Virtually any platform you might find yourself programming on has some simple method of running a delay. [Joey Shepard] got rather creative on a recent project, though, relying on a rather silly nesting method that we’re calling 6502s All The Way Down.

The project in question was a simple PCB that was shaped like a robot, with blinking LED eyes. Typically, you’d simply reach for the usual sleep() or delay() function to control the blink rate, but [Joey] went off-piste for this one. Instead, the PIC32 on the board runs a 6502 emulator written in MIPS assembly. This emulated 6502 is then charged with running a further 6502 emulator coded in 6502 assembly, and so on, until there’s 6502 emulators running six-deep on the humble microcontroller. The innermost emulator runs a simple program that blinks the LED eyes in a simple loop. With the overhead of running six emulators, though, the eyes only blink at a rate of roughly once every two seconds.

It’s an amusing and complicated way to write a blink program, and we applaud [Joey] for going to all that trouble. We imagine it was a great way to learn about programming the PIC32 as well as emulation in general. Meanwhile, if you’re working on your own emulator feats, be sure to let us know!

Squeezing GIFs Into Even Tighter Spaces

Showing images on a TFT or OLED display with a small AVR microcontroller can be a challenge as it requires significant storage space. One solution is to compress the images, but then you need more RAM to decompress it, and that’s a whole other problem. [David Johnson-Davies] of Technoblogy couldn’t find a GIF decoder that fit his needs, so he started writing his own.

We had previously seen a minimal GIF decoder aimed at a Cortex-M0+ that required 24 K of RAM, but this technique is running on an AVR with just 12 K of RAM. Along the way, [David] uses little tricks to shave down the requirements. Since the TFT he targets is a 5-6-5 color space, those 3-byte colors become 2 bytes. The LZW lookup table is encoded as 12-bit pointers to earlier entries plus an additional pixel. However, these savings come at a cost. Animated, local color tables, transparency, interlacing, or GIF87a formatted images aren’t supported. But he ports it over to the PyBadge, which is ATSAMD51 based.

[David] provides some sample code to display a GIF from program memory and an SD card. All the code is on GitHub under a CC By 4.0 license.

NTC Thermistor To ThingSpeak Meter Makes A Great IoT Starter Project

There are a lot of IoT solutions and frameworks out there, and [Davide] demonstrates how to make a simple data logging and tracking application with his ESP8266-to-ThingSpeak project, which reads up to four NTC (negative temperature coefficient) thermistors and sends the data to ThinkSpeak over WiFi.

IoT can be a pretty deep rabbit hole, so if you’re looking for a simple project to demonstrate the working parts and provide a starting point, the project’s GitHub repository might help you get started. We’ve also seen ThingSpeak used to track toilet paper sheet usage, which is a nice demonstration of how to interface to a physical object with moving parts.

On the other hand, if you find reading NTC thermistors to be the more interesting part, you’re in luck because [Davide] has more information about that along with a modified ESP8266 Arduino library. Watch a tour of his temperature logging hardware in action in the video, embedded below.

Continue reading “NTC Thermistor To ThingSpeak Meter Makes A Great IoT Starter Project”

It’s Ethernet, From An SPI Interface

Over the years as microcontrollers have become fast enough to do the heavy lifting, we have become used to 10 megabit Ethernet being bit-banged from interfaces it was never meant to emerge from. We think however that we’ve never seen one driven from an SPI interface, so this one from [Ivan] may be a first. With a cleverly designed transceiver using logic chips, it even offers a chance to understand something about the timing of an Ethernet interface, too.

The differential logic signals derived from a simple Ethernet transceiver can be read by an SPI bus, but for the lack of a clock line. The challenge was then to construct a circuit the would construct the required clock pulses from the state changes on the data line. This would become a monostable with XOR gate, and a shift register to handle the clock during the preamble phase.

The resulting circuitry fits neatly on a shield for the ST Nucleo 64 board, where while it might not be the obvious choice for an Ethernet shield it certainly does the job.

If unexpected Ethernet is your thing, how about the i2s peripheral on an ESP8266?

BBC Micro:Bit As Handheld Synthesizer

The BBC Micro:bit, while not quite as popular in our community as other microcontroller development boards, has a few quirks that can make it a much more interesting piece of hardware to build a project around than an Arduino. [Turi] took note of these unique features and decided that it was the perfect platform to build a synthesizer on.

The Micro:bit includes two important elements that make this project work: the LED matrix and a gyro sensor. [Turi] built a 5×5 button matrix for inputs and paired each to one of the diodes, which eliminates the problem of false inputs. The gyro sensor is used for detuning, which varies the pitch of any generated sound by a set amount according to the orientation of the device. It also includes a passive low-pass filter to make the sound more pleasant to the ear, especially for younger players of the machine. He’s released the source code on his GitHub page for anyone interested in recreating it.

While this was a one-off project for [Turi], he notes that using MicroPython to program it instead of C led to a lot of unnecessary complications, and the greater control allowed by C would enable some extra features with less hassle. Still, it’s a fun project that really showcases the unique features of this board, much like this tiny Sumo robot we covered over the summer.

Continue reading “BBC Micro:Bit As Handheld Synthesizer”