Embedded Programming

1. Description and Important Parts

The Embedded Programming class in the FabAcademy program was designed to introduce the fundamentals of programming microcontrollers using the Arduino development environment. The course focused on practicing basic instructions and understanding how code interacts with hardware through clear explanations and practical examples.

Topics covered included board sources, functions, architectures, and application examples. The main objective was to provide a broad overview of the wide range of possibilities in embedded programming by categorizing different types of boards and highlighting the most relevant ones for different kinds of projects.

One of the key aspects discussed was the relationship between analogue and digital systems. Since most phenomena in the physical world are analogue, they must be converted into digital signals through translation processes so that programmable instructions can control interactions between humans and machines. To improve this conversion and enable smoother transitions between analogue and digital signals, electronic components such as Digital-to-Analog Converters (DACs) can be used to generate multiple levels of information.

The class also introduced fundamental electronic and computational concepts, including processor architectures ranging from 8-bit to 64-bit systems. We learned how information is processed through registers, how data can be stored within microcontrollers, and why understanding technical specifications is important, especially details that are often hidden from users who are not accustomed to reading datasheets or technical documentation.


2. Microcontroller Datasheet

List of electronics I got inteterested along the class:


3. Types of Boards

  • ATtiny (Level 1) — Suitable for small and simple projects with limited functions and low power consumption.

  • SAMD (Level 2) — Offers greater processing power and more integrated features compared to ATtiny boards.

  • Arduino (Level 3) — A complete microcontroller ecosystem with multiple boards, shields, and extensive community support.

  • Raspberry Pi (Level 4) — A full computer capable of running an operating system and handling complex computational tasks.

The board used during this week was the Barduino, which is based on the ESP32-S microcontroller.


4. Programming Ways

4.1 Programming from board to board:

As one of the examples learned during the class, SAMD and ATtiny need extra help to be coded: an external device (Programmer) that converts the information from the computer's Arduino digital interface to the physical microcontroller and then sends it to the ATtiny.

  • Computer → USB → Programmer → SAMD

  • Computer → USB → Programmer → ATtiny

4.2 Programming from Arduino (software) to the board

The simplest and most practical example given in class was programming the code in the Arduino software and uploading it directly to the microcontroller. Depending on which board is being programmed, it is uploaded directly from the main interface or using a Programmer, but in the case of Arduino's family is not needed.

4.3 Programming from Terminal (Mac) to Arduino

In the last case scenario, the use of a Windows or Mac Terminal was to upload a binary code directly into the chip. The idea remains basically in using the terminal as a console, where you direct the files that should be uploaded to the chips, still while suing a Arduino as a Programmer to upload the code give power to the chips.


5. Programming Workflow

5.1 Tools Used

  • Computer (MacOS)

  • USB cable

  • Barduino board (ESP32-S)

  • Arduino IDE

5.2 Installing Arduino IDE

  1. Download Arduino IDE from the official Arduino website.

  2. Install and open the Arduino IDE.

  3. Connect the board via USB.

5.3 Installing Board Definition (ESP32)

  1. Open Arduino IDE

  2. Go to:

  1. Add ESP32 board manager URL:

  1. Open:

  1. Search for ESP32

  2. Install the ESP32 package.

5. Selecting the Board

Go to:

Then select the correct port:

5.4 Uploading Code

Example test program:

Upload steps:

  1. Click Verify to compile.

  2. Click Upload.

  3. Wait for compilation and flashing.

  4. The onboard LED starts blinking.


6. Digital Simulation

Wokwi Website

7 Codes Programmed

7.1 S.O.S - Barduino Buzzer


8 Reflection

Within the knowledge obtained in the course and from the feedback provided through the assignments delivered, I perceived a lack of misinformation that sometimes is obtained through different platforms and general assumptions about the topic, something that goes specifically throughout the terminology and understanding of what boards are technically described. This came from a reflection on previous projects developed in the past, and how they are being communicated through their classification, as a very common general assumption I've been perceiving as Arduino being considered as microcontrollers and not as frameworks.

Since I'm from MDEF, and not Fabacademy, the class itself wasn't completely a revelation of new knowledge in terms of practical action, but a clarification of the technical terminology I'm not usually aware of using in my projects. However, the last day was mainly part of the class, which situated me in the new types of boards that weren't introduced in my master's program, such as the ATtiny and SAMD boards, and how they could be programmed by using programmers, or even the Terminals for it, and possibly some applications I've could do with those boards consiering my master thesis project.

Last updated