
Explore embedded systems as special purpose computers with limited resources built around an AVR ATMEGA32 microcontroller, and see real-time, deterministic, interactive behavior in robots, drones, and smart homes.
Explore microcontrollers as compact computers on a chip. Learn about AVR-based ATmega32, CPU, memory types (RAM, ROM, SRAM, DRAM, flash, EEPROM), and peripherals like ADC, DAC, UART, SPI, and I2C.
Explore bitwise operations on an 8-bit register, covering left and right shifts and how to set, clear, and toggle bits using or, and, xor.
Explore embedded C basics for the AVR ATMEGA32, covering the preprocessor, macro substitution, include and conditional compilation, plus volatile and typedef for hardware-driven variables and clean types.
Explore digital i/o with avr atmega32, learning how to configure ddr, port, and pin registers to wire up a push button and an led using pull-up and pull-down resistors.
Explore dio code on an ATmega32 to drive a push button and led, using bitwise operations and volatile port registers. Structure the project with headers and source files.
Demonstrate how a seven segment display works, count up with each clock, increment the displayed digit via a push button, and drive it with a BCD driver to reduce pins.
Increment the seven-segment display with each push button press, addressing debouncing with a flag and a while loop, or a delay from the Utils library.
Learn to initialize and drive an LCD, wire pins like RS, RW, and EN, adjust contrast, and switch between command and data modes to display ASCII characters.
Learn to implement an LCD driver for AVR ATmega32 in four-bit mode, including initialization, command and data transmission, and displaying numbers and strings by ASCII conversion.
Learn to input numbers at runtime with a 4x4 keypad connected to an AVR ATmega32 and display them on the LCD by scanning columns and reading rows.
Learn to implement a 4x4 keypad driver on an AVR ATmega32, including scanning a matrix, pull-up resistors, debouncing with delay, ASCII conversion, and displaying results on an LCD.
Control a dc motor with a microcontroller through an edge bridge of four transistors to rotate clockwise or anti-clockwise. Avoid direct motor connection to protect the microcontroller.
Learn to control a dc motor with an edge bridge using a microcontroller, rotating clockwise and anticlockwise by alternately driving two inputs high and low with a separate power source.
Master interrupts to replace the simple superloop, stopping a blinking LED with a push button, and learn ISR handling, external and internal interrupts, PIC, and vector table for responsive code.
Learn to configure external interrupts on AVR ATmega32, focusing on external pins and a push button, sense control options, and implementing an ISR via the vector table.
Understand analog to digital conversion on the ATmega32 via sampling and quantization of sensor voltages, with ten-bit resolution, 5-volt range, eight single-ended inputs, seven differential channels, and two amplified inputs.
Explore designing an ADC driver for the AVR ATmega32, configuring reference voltage, channels, prescaler, and trigger modes, reading 10-bit results from ADCL/ADCH, and displaying values via LCD with a potentiometer.
Explore hardware timers on the avr atmega32, including timer0 8-bit, timer1 16-bit, and timer2 8-bit, and learn normal overflow and ctc modes to generate a led blink every 2 seconds.
Use timers to implement pulse width modulation for motor speed control and LED brightness. Apply duty cycle, OCR values, and pwm modes such as phase correct to produce averaged voltage.
Learn how a servo motor, a motor with feedback, reaches a target angle via pwm within a 20 ms period, linking duty cycle to angles from 0 to 180 degrees.
Configure pwm to drive a servo motor on avr atmega32 using timer1 with icr1 as top and ocr1a for 1.5, 1, and 2 ms pulses within a 20 ms period.
Define what a communication protocol is and its seven specifications—medium, serial vs parallel, direction, synchronization, relationship, throughput, and digital level—emphasizing wired, serial-focused protocols and data integrity across nodes.
Explore uart, a universal asynchronous serial protocol that uses a 10-bit frame (start, 8 data, stop) and optional parity. Connect tx to rx with a common ground on microcontrollers.
Explore the ATmega32 uart driver, covering udr, ucsr, ubrr registers, asynchronous mode, eight data bits, no parity, one stop bit, and a two-microcontroller pushbutton-led example.
Explore SPI, a single master multi slave synchronous full duplex protocol. Use clock, MOSI, MISO, and SS for daisy-chain and cascading connections; throughput depends on the number of slaves.
Explore the SPI driver on an AVR ATmega32, covering SPCR fields (SPE, MSTR, CPOL, CPHA, DORD) and full duplex data transfer via SPDR, MOSI, MISO, SCK, and SS.
Explore the I2C protocol, a multi master, multi slave, synchronous half‑duplex bus with start conditions, addresses, data frames, acknowledgments, stop conditions, arbitration, clock stretching, and dominant bits.
Explore implementing an i2c (twi) driver on avr atmega32, covering master and slave initialization, start/stop/repeated start, address handling, data transfer, status checks, and general call features.
The Intro to Embedded Systems with AVR ATMEGA32 Course is the gate and start point for anyone interested in learning embedded systems and using the ATMEGA32 microcontroller. The course starts from scratch with
1) An introduction to embedded systems
to know what are embedded systems and where we see them in our everyday life then the course takes you to
2) An introduction to Microcontrollers
and then you will get to know
3) How to deal with bits
and
4) Embedded C
By having this solid ground you will be able to work with the ATMEGA32 and know its different capabilities and peripherals and how to interface with it. You will start with the
5) Input and output pins
Then seeing data on a
6) 7-segment
and
7) LCD
and entering data with
8) Keypad
After that you will learn how to use
9) Dc motor
as well as different analog input devices by using
10) Analog Digital Converter
then you will control a
11) Servo motor
after learning more about
12) Timers
and last but not least communication between microcontrollers and creating a network using
13) UART
14) SPI
and
15) I2C
The course is mainly divided into
1) Theoretical lectures
for understanding the concept,
2) Practical coding lectures
to implement what you have learnt,
3) A quiz after each section
to make sure that you have understood that part before going on with the course and
4) Some assignments
to exercise by yourself and do some coding . Also at the end of the course you will get a final exam on all the topics as well as a big project to get your hands dirty with embedded systems and make your first own project. The project is a simple model for a smart home.
The course requires that you have a background in C programming language only. No need for any hardware, only your PC or Laptop.