All posts by Baird Soules

Circuits & Code! Saturday, 7 Dec 2019

Circuits & Code is here again!!!

Circuits & Code is the all-ages, end-of-semester, free student project showcase at M5, the UMass Amherst Makerspace for Solid-State Electronics and Computing Machinery.

Students will be demonstrating projects they created this semester. Bring yourself, your friends, and your family to interact with all manner of tech projects.

Circuits & Code will take place on Saturday, 7 December 2019 at M5 from 1 to 4 p.m.

M5 is a 5,000 sq. ft. makerspace located in the lower level of Marcus Hall, 100 Natural Resources Road, Amherst: 

There are multiple parking lots behind Marcus Hall that are available on the weekend. The lots that comprise Lot 65 are nearest M5.
Google maps:

We hope to see you at Circuits & Code! Tell your friends. Bring your friends.


Baird Soules and your friendly M5 friends who help humans make machines, friendly machines

Baird Soules
Sr. Lecturer
Director of Experiential Learning
Department of Electrical and Computer Engineering
University of Massachusetts Amherst
soules       at

event graphic by Otto Benson ’21

Stephen Collins ’81 on Cloud Engineering

[ NEW LOCATION: Integrative Learning Center, Room S331 (South 331) ]

Opportunities In Cloud Engineering
by Stephen Collins

Principal Consultant, 1024tm
UMass Amherst, 1981
B.S. Computer Systems Engineering, Summa Cum Laude

4 p.m., Wednesday October 2, 2019
Integrative Learning Center, Room S331 (South 331)
University of Massachusetts Amherst

>>> In addition to this 4 PM talk, we are excited to announce that Mr. Colliins is available to meet with students, faculty and staff at lunch and dinner on the same day. If you would like to submit a request for lunch and/or dinner with Mr. Collins please complete this Google form:

Since about 1980, there have been four successive waves of unprecedented technological innovation that have reshaped our world. It began with the PC revolution in the 1980’s, the Internet explosion in the 1990’s, mobile smartphones in the 2000’s and the rise of cloud computing this past decade. Amazon, Apple, Facebook, Google and Microsoft are building out massive hyperscale data centers delivering cloud-based applications and services to billions of users worldwide. These industry titans are creating a radically new generation of cloud-scale computing infrastructure, capitalizing on technological advances in merchant silicon, off-the-shelf hardware, software-defined networking, distributed computing software and Big Data analytics.

While these impressive cloud computing achievements boggle the mind, there is still a tremendous amount of engineering work to be done. Over the next decade, cloud-scale infrastructure will be deployed in support of mission-critical use cases spanning business digital transformation and real-time machine-to-machine communication for industrial IoT, environmental sensing, healthcare IT, smart cities and autonomous vehicles. Technology is advancing rapidly across such a broad front that even the most dedicated researchers and practitioners strain to keep pace. Graduating students step into a bewildering world in which their academic training barely scratches the surface.

This talk will take a brief look at the evolution of “the cloud” and then break down the full stack of cloud-scale infrastructure, layer by layer. How is technology innovation driving breakthroughs at different layers? What are the outstanding engineering challenges for ensuring scalability, performance, security and operational efficiency? What are possible career opportunities for new graduates in computer engineering and computer science? Why will a life long approach to learning be so important?

Stephen Collins is principal consultant at 1024tm, providing business strategy and product marketing services to startups, emerging growth companies and other technology-driven organizations. He has almost four decades of experience in networking and telecommunications, spanning many segments of both the enterprise and service provider markets.

Over the course of his career, Stephen has served in a wide range of executive, managerial, engineering, consulting, analyst and advisory roles and has a proven track record introducing new products and solutions into rapidly evolving markets.

Most recently, Stephen worked as a networking and telecom industry analyst, creating and leading ACG Research’s practice in network visibility and analytics. Prior to that, he served as VP of product marketing at Active Broadband Networks, VP of marketing at Acme Packet, VP of marketing and business development at Tatara Systems and VP of marketing at Sonus Networks.

In the late 90’s, Stephen cofounded Spring Tide Networks, which developed a new class of IP service switch, and was acquired by Lucent Technologies for $1.5 billion. He began his career in 1981 at Bell Labs developing data communications systems and then was first exposed to IP networking and the original ARPANET while at BBN Communications.

After BBN, Stephen joined Wellfeet Communications as founding engineer and served as software engineering manager and then director of product management, bringing two generations of multiprotocol routers to market. After Wellfleet merged with Sypoptics, he served as director of product marketing for Bay Networks.

Stephen is an active blogger, frequent speaker at industry conferences and has authored numerous articles for trade publications. He holds an M.S. in Computer, Information and Control engineering from the University of Michigan and a B.S. in Computer Systems Engineering, Summa Cum Laude, from the University of Massachusetts, Amherst.



This technical talk is presented by the
Department of Electrical and Computer Engineering
University of Massachusetts Amherst

201 Marcus Hall


DP123 Monday Madness Crazy!!!

Who gave M5 a welder, and a grinder?  And all that safety gear and clothing that renders one anonymous, and rather frightening-looking?

Team Proteus5, subdivided into further teams, now has a cacophony of grinding and sawing noises to accompany their workings-on as the build team fires up the power tools in the corner of the backroom, the future site of the M5 fabrication lab, dubbed Fab5.

Fab5 is a the future facility that will expand the build capabilities of M5 to include metalworking, woodworking, and plastic and glass work.  We have, so far, a welder and grinder.

At this week’s Play the Room, we decided against playing the room in the literal sense, with solenoids on the pipes and ducts and such throughout the Good Room, primarily to cut down on the amount of tubing and mounting hardware required for such an endeavor, as to save time and fully realize our goal of an electromechanical, MIDI-controlled instrument.
We have decided, instead, to use a metal cabinet that housed some sophisticated-looking engineering equipment, including a piece at the bottom (the power supply, perhaps) that features a sign: DANGER / LETHAL VOLTAGE.
We gutted all the cables out of it and found some promising locations for the pneumatic actuators we have arriving soon.  Also–our arduino software is looking good!  More on all of this soon!

Programming an AVR using the Arduino (based on instructables)

So recently I was hoping I could start programming AVRs. I like using the Arduino IDE because it is incredibly easy, however, programming a chip using C or even Assembly is far more powerful. I was looking through everything to try and find a feasible solution to get my AVR programming started, so I searched through programming cables, dongles, DYI things, Sparkfun, Atmel, etc etc etc… I found out programming cables can get to be expensive, especially if your computer doesn’t have an RS-232 port.
Luckily, exists and saved the day, since they have a pretty good step by step process on how to program an AVR using an Arduino!!! Making the Arduino a middleman in order to program your AVR… so brilliant and convenient! (an arduino costs about 20 dollars, much less than a USB stk mkii programming cable). The instructable is really good and I recommend following it, however I will explain the process I went through to burn a bootloader onto an ATMega168, and the same process can be used to burn a bootloader to any other AVR supported by the Arduino. I’ll also show how you can upload a hex file (from a C or ASM file) to your AVR through this Arduino circuit.

You can find the instructable here .

For the case and purpose of this blogpost, all you really need from this instructable is the Arduino circuit and where to get the code (which I’ll post a link to later on). The circuit involves hooking up the Arduino to the AVR and hooking up some nifty LED’s for debugging purposes (and because they look kind of cool when you reset the ARduino/do your AVR programming/etc). Installing WinAVR is recommendable! To do so, go to this site and get it donee!!!

The first thing to keep in mind is that these Atmel AVRs have an ISP programming option (acronym for In-System Programming). Also, the communication protocol that you can use for the programming of the hardware is SPI (Serial Peripheral Interface). Lucky for us, there are well labeled pinout diagrams for these AVR chips all over the internet, and there is a built in SPI interface on the Arduino boards (obviously, since the Arduino is based on the ATmega168/328/etc et al).
SPI is a basic protocol, but all that you need to know at this point is that you want to connect each respective Arduino pin to their “counterparts” on the AVR you wish to program.

Ok. Now, in order for your Arduino to work as a ‘middleman’ programmer, you’ll have to upload the proper code to it so that it does it’s job. I’m not taking credit for this code, because I obviously didn’t write it, so I’ll link the word after the semi-colon to the website you can find it: here. Download the latest and extract the code to your computer and upload it to the Arduino.

Bam! Now the LED’s in the circuit start flashing, and the last one is getting brighter, dimmer, brighter, dimmer, etc etc etc..Like a heartbeat! Its alive! You know your circuit is working! And the Arduino is ready to receive its instructions… How will it do that?? Serial Port?? nope! You’ll have to talk to avrdude from you command prompt (quite frankly it makes you feel like a pretty cool hacker). In order to have avrdude installed in your computer, you’ll need to either have Arduino installed (since you burned the code to the ARduino you probably already have that) or you can just download avrdude from its site… i think this one is pretty recent/legit. Anyhow, just make sure you have avrdude installed on your computer before proceeding, or else you’ll be communicating with a non existing entity on your computer, and your computer will think you’re crazy.

Ok. To talk to avrdude, all you have to write in the command prompt (regardless in which directory you’re in) is:

to see a list of commands, type in
to your command prompt, you should get the following:

pretty easy right?!?! now let’s actually talk to the Arduino! Make sure you know what SERIAL PORT your Arduino is connected to. Usually Com5 for windows, dev/tty/USB for Mac etc.. To find what port you communicate to, open the Device manager in your control panel and see which one is active ***OR*** just open the Arduino IDE and look for the Serial Port option (like you would usually do to program the Arduino). Ok, so now you know what Port you’ll be talking to, time to find out what CHIP you have! For this part, just look at the AVR thats in your circuit and read the AT***** part. OK, now type the following in your command line

>avrdude -c avrisp

You’ll get an error message and a long list with recognizable MCU names!

Great, now just look for the MCU you have and know which one it is… I’ll be using the ATMega168 as an example because that’s the chip i used. Likewise, my COM port was COM6.
So type in the following, just modify COM6 or m168 IF NECESSARY:

>avrdude c -avrisp -b 19200 -p m168 -P COM6
(then press enter)

I usually get an error message the first time I type that in saying:
avrdude:stk500_getsync(): not in sync: resp=0x15
So i try it again (shortcut, press the up arrow for the last command you typed)
You’ll see your circuit LEDs do a weird blinking cycle, and your command prompt should look like something like this:

Great, so now your computer is successfully talking to the Arduino!
Now let’s go step-by-step to see what that command did

>avrdude -c avrisp -b 19200 -p m168 -P COM6

-c avrisp => (avrdude, I would like to use the avrisp programmer!)
-b 19200 => (avrdude, I want to change the baudrate to 19200 baud)
-p m168 => (avrdude, the part I’m using is the ATMega168)
-P COM6 => (… my Arduino is on port COM6)

We will also use a -U command which writes a specified file or fuse bit to the AVR and the -e command which erases the AVR

Ok, so now to burn the bootloader to the Arduino, you must find the bootloader file on the arduino hardware\atmega folder. If you’re using the 168, you’re lookingfor the ATmegaBOOT_168_diecimila.hex file,if you’re not using the ATmega168, use some common sense to find out what file to specify. Ok so now you have the path that the bootloader file is located in, in my case it was .
Now write these commands (**adjusting it to your configurations**)(press enter after each line, or just copy the entire thing and paste it to the command line)

>avrdude -c avrisp -p m168 -P COM6 -b 19200 -e
>cd C:\Program Files\arduino-0016\hardware\bootloaders\atmega
>avrdude -c avrisp -p m168 -P COM6 -b 19200 -U lock:w:0x3f:m -U efuse:w:0x00:m -U hfuse:w:0xDD:m -U lfuse:w:0xFF:m
>avrdude -c avrisp -p m168 -P COM6 -b 19200 -U flash:w:ATmegaBOOT_168_diecimila.hex

(If you get error messages, check your configurations!!!!!)

All we in that code was say “Hey avrdude, erase whatevers on the chip, then i want you to overwrite the fuses (-U xfuse:w:#x##:m) and this program on the flash memory (-U flash:w:ATmegaBOOT_168_diecimila.hex) I’ll leave it up to you to figure out what the fuse bits are adjusted to (but essentially you need it to se the AVR to work off an external oscillator).

To burn a HEX file, you’ll need to convert the C or ASM file to HEX (using WinAVR or AVRStudio). When you build the project, there will be a folder that saves the HEX version of your code.

now just modify the following according to your computer specifications and type

>avrdude -c avrisp -p m168 -P COM6 -b 19200 -e
>avrdude -c avrisp -p m168 -P COM6 -b 19200 -U lock:w:0x3f:m -U efuse:w:0x00:m -U hfuse:w:0xDD:m -U lfuse:w:0xFF:m
>avrdude -c avrisp -p m168 -P COM6 -b 19200 -U flash:w:.hex

GREAT! You can use and Arduino to program an AVR and to burn bootloaders.

Any question feel free to find me at M5 or e-mail me at:

PartyDuino Update

Hey y’all!

We are back with an update on the design of partyduino. The team has made significant progress with the project and is getting ready for production. The design group finished their design by adding a low-pass filter to the output. Dan and Mat created a barebones version of the partyduino that closely represents the actual PCB. They ran into issues with the bootloader but overcame those issues swiftly and had the partyduino up and running by the end of the lab. While the other teams were working on design aspects of the circuit, Mike was preparing the parts list and datasheets that will assist in the design of the PCB. The datasheets will be used to gather the dimensions of each part and to help design the footprint of the parts to be out on the PCB.

We will be back next week with another update!!!