The repository contains AVR lab exercises for bachelor course Digital Electronics 2 at Brno University of Technology, Czechia. The course focuses on digital circuits, microprocessor technology, embedded systems and uses the C and ASM languages for programming 8-bit Arduino microcontrollers in PlatformIO and Visual Studio Code IDE.
PlatformIO is a cross-platform build system that can be used to develop software platforms for Arduino, ESP32, PIC32, and AVR. PlatformIO can be used with VS Code to provide a powerful set of tools to assist you in development [1], [2].
-
Download and install Visual Studio Code source code editor.
-
Run Visual Studio Code, open up the extensions viewer in menu View > Extensions Ctrl+shift+X, and then typing
PlatformIO
into the search bar. Press Install button on the resultPlatformIO IDE
.It may take a few minutes depending on your connection speed. Do not close any window and do not open other folders until the installing process is completed. After that, restart the Visual Studio Code.
-
Install Arduino framework: Click on the PlatformIO icon in the left-hand margin, then in menu PIO Home > Platforms > Embedded. Type
AVR
as a platform's filter and select Atmel AVR. Click on the Install button.
-
Create a new project: Click on the PlatformIO icon in the left-hand margin, then in menu PIO Home > Open > New Project. Type
blink
as project name, selectArduino Uno
board, keepArduino
framework, and select location to your working folder. Click on the Finish button. -
Code the application: Copy/paste blink example code from this repository to your
BLINK > src > main.cpp
file.Rename source file
main.cpp
tomain.c
, ie change the extension to.c
. -
Compile and upload the code: The handy shortcuts for building and uploading the code is available on the blue footer taskbar. Hover over the icon to get its functionality. First, compile (Build) the project and then Upload it to Arduino Uno board. You can Clean up generated files as well.
Command Palette: All available commands in VS Code are also accessible by
F1
orCtrl+Shift+P
shortcut and followed by a command. Most useful commands in this course are:PlatformIO: Build
PlatformIO: Upload
PlatformIO: Clean
PlatformIO: Upload and Monitor
PlatformIO: PlatfomrIO Home
Other common shortcuts in VS Code are:
Shortcut | Usage |
---|---|
F1 or Ctrl+Shift+P |
Command Palette. Access to all of the VS Code functionality |
Ctrl+K+O |
Open folder |
Ctrl+K F |
Close folder |
Ctrl+Tab |
Switch between open files |
Ctrl+O |
Open a file |
Ctrl+Shift+S |
Save all open files |
Ctrl+Shift+V |
Open Markdown preview |
Ctrl+K V |
Open Markdown preview to the side |
Ctrl+B |
Toggle Sidebar visibility |
- Programming in C
- Control of GPIO pins
- Timers
- Liquid Crystal Display (LCD)
- Universal Asynchronous Receiver-Transmitter (UART)
- Inter-Integrated Circuits (I2C)
- Assembly language and project documentation
- Project
- Basic C template, blink a LED
- 7-segment display
- ADC
- Project documentation with Doxygen
- Autonomous slot car
The following hardware and software components are mainly used in the lab.
Component | Link(s) |
---|---|
ATmega328P microcontroler | data sheet, instruction set |
Arduino Uno board | schematic |
LCD and keypad shield | schematic |
Multi-function shield | schematic |
DHT12 | I2C humidity and temperature sensor: data sheet |
MPU6050 | I2C gyroscope and accelerometer: data sheet |
DS3231 | I2C real time clock: data sheet |
AT24C32 | I2C EEPROM memory module: data sheet |
HC-SR04 | Ultrasonic sensor: datasheet |
Joystick PS2 | Analog joystick PS2 |
Rotary encoder | tutorial |
Touch sensor | TTP223 touch sensor module: tutorial |
IR module | HW-201 IR obstacle avoidance module: tutorial |
GPS module | GPS module NEO-6M GYNEO6MV2 |
Bluetooth modules | HC-05 |
Servos | Micro servo SG90 |
Soil moisture sensor | tutorial |
Relays | Modules with 1, 2, and 4 relays |
Displays | HD44780-based, Nokia displays, 4-digit LED display TM1637, 8x8 LED display MAX7219 |
OLED display | I2C OLED display 128x64, driver SH1106 |
Keypad | 4x4 keypad: tutorial |
Basic components | Pasive and active components: push buttons, resistors, 10kohm potenciometers, (multicolor) LEDs, LED bargraphs, N-MOSFET transistors 2N7000, [light dependent resistor LDR, photoresistor](Light Dependent Resistor LDR, Photoresistor), IR LED 940 nm, IR receiver |
Current sensor | Current sensor 5A ACS712 |
ESP8266 Wi-Fi module | AT commands |
Logic analyzer | 24MHz 8-channel logic analyzer: software |
Osciloscope DSOX3034T | Oscilloscope Keysight Technologies DSOX3034T (350 MHz, 4 analog channels), including 16 logic timing channels DSOXT3MSO and serial protocol triggering and decode options D3000BDLA |
Multimeter | Multimetrix DMM230 |
Visual Studio Code | web page |
PlatformIO | web page |
GCC Compilers for AVR | web page |
SimulIDE | Real time electronic circuit simulator. With PIC, AVR and Arduino simulation: web page |
Git | git |
Version | Result (yyyy-mm-dd) | Note |
---|---|---|
macOS Sonoma 14.6.1 | OK (2024-10-13) | MacBook |
Linux Mint 21.2 (Victoria) | OK (2024-01-20) | Laptop |
Windows 10 | OK (2022-09-08) | Lab SC 6.61 |
Linux Mint 20.3 (Una) | OK (2022-02-23) | Laptop |
Windows 10 | OK (2021-11-25) | Office |
# FYI: How to check OS version in Linux
cat /etc/os-release
# Or by Neofetch
neofetch
# For Windows with CMD
WINVER
-
Peter Fleury, AVR-GCC libraries
-
Barr Group, Embedded C Coding Standard
-
4Geeks. How to use Gitpod