Arduino CLI For I/O Pin Testing

Need to quickly toggle or read some logic signals without the hassle of writing a quick program? [Thor_x86], aka [Eric], built an Arduino sketch that does just that — and he threw in the ability to send (or receive) serial messages, too. This is a neat idea — kind of a simplified Bus Pirate.

We should warn you that this is an early release, and there are a few minor issues which we are sure [Eric] will iron out soon. We discovered the function strtol() was misspelled in cmd_send.cpp, and there are some configuration #defines which need to be sorted out in file parsePin.cpp, depending on which Arduino module you are running. We got it running on an Arduino Leonardo the quickest, because it has support for Serial1().

Don’t be discouraged by these glitches in this rev 0 deployment — [Eric] has really made quite a nice tool here. Check his GitHub repository for updates (or submit corrections yourself). All in all, it’s a good addition to your digital tool box. On a completely unrelated note, we really like [Eric]’s USB cable with the right-angle micro connector, grungy though it may be.

Besides the standard tools like Bus Pirate, GreatFET, FTDI modules, etc., are there any similar tools you like to use for bit banging and serial testing? Let us know in the comments below.

Arduino And FPGA Done Differently

FPGA guru [Max Maxfield] recently took a look at the XLR8 (pronounced accelerate) board from a company called Alorium. On the surface, it looks like another Arduino UNO clone. But instead of a CPU, it contains an Intel MAX10 FPGA that runs a softcore AVR processor. Of course, that’s only part of the story. If the board was just a mock Arduino using an FPGA, that’s not very interesting for practical purposes. However, by incorporating accelerator blocks or XBs, you can add FPGA modules to the soft CPU. [Max] shows an example that you can see in the video below where an FPGA block controls servos more easily than a standard Arduino. There’s also a version that looks like an Arduino Nano, but can clock much faster as well as use the XBs.

In addition to prebuilt XBs, there is a workflow to build your own if you are familiar with working with FPGAs. The products aren’t exactly new, but we enjoyed [Max’s] take on the product. We also appreciated the simple code examples showing exactly how you would convert a program to use the accelerated functions. Continue reading “Arduino And FPGA Done Differently”

Arduino Serial Vs SerialUSB

[Andrew] wonders why the SerialUSB() function on the Cortex M3-based Arduino Due is so much faster than Serial() on the Uno or Nano, and shares his observations in this short video. He sets up an experiment with a simple sketch on both boards and uses Wireshark to evaluate the results.

Data is sent in the USB packets in groups of four characters on the ATmega-based boards, but the entire string is put in a packet on the Due board. If you look under the hood, the answer is hiding in plain sight. While the Arduino family of boards connect to your computer using a USB virtual serial port, the ATmega ones have an actual serial connection on-board. For instance, on the Nano there is an FT232RL between the USB connector and the microprocessor (on an Arduino Uno board, a small ATMEGA8U2 is used instead of an FTDI chip, but the concept is the same). On the Arduino Due, the USB connects directly to the SAM3X8E processor.

This concept doesn’t apply only to Arduino boards, of course. On any serial connection between two computers, when a virtual USB device is used on both sides of the link (no actual serial signals involved), the serial baud rate is a fictional thing — data transfer speeds depends on USB alone. We are curious why the packets contain four characters in [Andrew]’s ATmega Wireshark captures — why not 1, 2, or 10? Is this something that can be controlled by the programmer, or is it fixed by the protocol and/or the FTDI chip? If you have the answer, let us know in the comments below. Continue reading “Arduino Serial Vs SerialUSB”

Interfacing The Dreamcast Controller With Just An Arduino

The Dreamcast is a somewhat forgotten console today, but for a shining minute in the late 1990s, it was possible to believe Sega were still in the fight. Regardless, their hardware lives on, lovingly preserved by collectors and enthusiasts. [Nicholas FitzRoy-Dale] is one such enthusiast, and set about interfacing the old console’s controllers to an Arduino.

Initial work involved getting the Arduino (presumably a basic 16 Mhz Uno) to read the controller’s buttons, and spitting the data out over serial. The Dreamcast’s Maple bus is fast, which presented some challenges, but it was simple enough. [Nicholas] then moved on to interfacing the VMU, the Dreamcast’s fancy controller-mounted memory card. After initial attempts were shaky and unstable, he redoubled his efforts. Research indicated that the VMU can vary the speed of the bus when it’s in control, so he updated his code to suit. It’s full of great hacks, like connecting the Dreamcast’s two data pins to four input pins on the Arduino, to save a handful of cycles by not having to shift incoming data.

The work is a great read for anyone into assembly-level optimisation of interfaces, as well as proper use of limited resources. Obviously, it’s easy to just throw a faster, more expensive microcontroller at the problem, but then nobody would have learned anything. We’ve featured a great many Dreamcast hacks over the years; [Nicholas]’s work here builds upon [Dmitry]’s work in 2017. We can’t wait to see what comes next out of the underground Sega hacking scene!

Running 57 Threads At Once On The Arduino Uno

When one thinks of the Arduino Uno, one thinks of a capable 8-bit microcontroller platform that nonetheless doesn’t set the world alight with its performance. Unlike more modern parts like the ESP32, it has just a single core and no real multitasking abilities. But what if one wanted to run many threads on an Uno all at once? [Adam] whipped up some code to do just that.

Threads are useful for when you have multiple jobs that need to be done at the same time without interfering with each other. The magic of [Adam]’s ThreadHandler library is that it’s designed to run many threads and do so in real time, with priority management as well. On the Arduino Uno, certainly no speed demon, it can run up to 57 threads concurrently at 6ms intervals with a minumum timing error of 556 µs and a maximum of 952 µs. With a more reasonable number of 7 threads, the minimum error drops to just 120 µs.  Each thread comes with an estimated overhead of 1.3% CPU load and 26 bytes of RAM usage.

While we struggle to think of what we could do with more than a handful of threads on an Arduino Uno, we’re sure you might have some ideas – sound off in the comments. ThreadHandler is available for your perusal here, and runs on SAMD21 boards as well as any AVR-based boards that are compatible with TimerOne. We’ve seen other work in the same space before, such as ChibiOS for the Arduino platform. Video after the break.

Continue reading “Running 57 Threads At Once On The Arduino Uno”

Arduino Micro Pushes Animal Crossing’s Buttons

Repetitive tasks in video games often find a way of pushing our buttons. [Facelesstech] got tired of mashing “A” while catching shooting stars in Animal Crossing, so he set out to automate his problem away. After briefly considering rigging up a servo to do the work for him, he recalled a previous effort that used an Arduino Teensy to automate a bowling mini-game in Zelda: Breath of the Wild and decided to use a microcontroller to catch stars for him.

[Facelesstech] programmed an Arduino Pro Micro to fake controller button presses. It starts with a couple of presses to identify itself to the Switch, before generating an endless stream of button presses that automatically catch every shooting star. Hooking it up is easy—an on-the-go adapter allows the Switch’s USB-C port to connect directly to the Arduino’s Micro-USB port, even supplying power!

[Facelesstech] also designed a compact 3D-printed case that packages up the Arduino Pro Micro along with an ISP header for easy updating. The case even lets the Arduino’s power LED shine through so you know that it’s working!

If you, too, need to automate video game button-pushing, [Facelesstech] has kindly uploaded the source code and 3D designs for you to try. If you’d prefer something a little more low-tech, perhaps you might try a mechanical button pusher.

Continue reading “Arduino Micro Pushes Animal Crossing’s Buttons”

12-Note Polyphony On An Arduino Synth

When synthesizers first hit the scene back in the mid-20th century, many were monophonic instruments, capable of producing just one pitch at a time. This was a major limitation, and over time polyphonic synthesizers began to flood into the scene, greatly expanding performance possibilities. [Kevin] decided to build his own polyphonic synthesizer, but far from taking the easy route, he built it around the Arduino Uno – not a platform particularly well known for its musical abilities! 

[Kevin]’s build manages 12-note polyphony, an impressive feat for the ATmega328 at the heart of the Arduino Uno. It’s done by running an interrupt on a timer at a steady rate, and implementing 12 counters, one per note. When a counter overflows, a digital IO pin is flipped. This outputs a square wave at a certain pitch on the IO pin, producing the given note. The outputs of 12 digital IO pins are mixed together with a simple resistor arrangement, producing a basic square wave synth. Tuning isn’t perfect, but [Kevin] notes a few ways it could be improved down the line.

[Kevin] has added features along the way, expanding the simple synth to work over several octaves via MIDI, while also building a small tactile button keyboard, too. It’s a project that serves as a great gateway into basic synthesis and music electronics, and we’re sure [Kevin] learned a lot along the way. We’ve seen other microcontroller synths before too, like this tiny device that fits inside a MIDI plug. Video after the break.

Continue reading “12-Note Polyphony On An Arduino Synth”