Learn, Implement and Share

Embedded C Firmware Programming on Atmel AVR 8-bit Atmega328p Microcontroller, Learn Register Level Firmware Development in Embedded C for GPIO, I2C, SPI, UART, Timer, PWM, ADC, Memory, Interrupt and more…

Key Points

  • MOVE FORWARD TOWARDS A SUCCESSFUL FIRMWARE DEVELOPER
  • HARDWARE USED > ARDUINO UNO / NANO / MEGA
  • IDE USED > PROFESSIONAL GRADE ATMEL STUDIO
  • THERE WILL BE NO ARDUINO STYLE PROGRAMMING
  • THERE WILL BE NO 3RD PARTY LIBRARIES
  • THERE WILL BE NO BLIND CODING
  • YOU WILL LEARN LAYERED PROGRAMMING ARCHITECTURE
  • YOU WILL LEARN PROFESSIONAL CODING STANDARDS
  • YOU WILL LEARN EMBEDDED C
  • YOU WILL LEARN DEBUGGING AND SAVE THE COST OF A DEBUGGER
  • YOU WILL LEARN REGISTER LEVEL PROGRAMMING
  • YOU WILL LEARN TO WRITE YOUR OWN PERIPHERAL DRIVER
  • YOU WILL LEARN BOTH THEORY AND LAB EXPERIMENTS
  • YOU WILL BE ENABLED TO MAKE YOUR OWN PROJECT / PRODUCT

Who can take this course?

  •  School students, college students, professionals, and hobbyists.
  •  Anyone who wants to dive into Register Level Microcontroller Peripheral Programming using Embedded C.
  • Anyone who uses Arduino and wants to know about its in-depth working.
  • Anyone who wants to make IOT / Embedded projects or products.

Brief Description

This course explains in accessible, understandable detail the internal working of the AVR Atmega328p Microcontroller and its Peripherals. Most Microcontrollers work similarly so what you learn in this course can easily be used for other Microcontrollers such as Atmega8, 16, 32, 2560, PIC, MSP, NXP etc. After taking this course, you will be able to develop your own projects and products employing the AVR and similar Microcontrollers.
We will be coding and conducting lab experiments for each and every peripheral in an in-depth and step by step manner and will develop software drivers completely from scratch using the hardware registers by employing information from the datasheet and reference manual of the Microcontroller.

In many industries such as consumer appliance, automotive, and aerospace, Microcontrollers are widely used and programs for them are written in Register level using either Embedded C or C++. An understanding of Microcontroller’s internal working and peripheral programming is therefore essential for designing a successful project or product related to these industries. This will be one key takeaway from this course.

  • The average salary for Firmware developer $61,118 PA.
  • Used by top industries across various business verticals. Ex: Amazon, Intel Corporation, Microsoft, Microsemi Corporation, Samsung, LG, Bosch etc.

How is this Course Different From Other Arduino Courses?

In this course, we will be employing Arduino Hardware, which is widely available, inexpensive, and reliable, but we will not be using Arduino IDE or any of its precooked libraries, which are simplistic in design and below professional industry standards. Rather we will be designing our own superior software from scratch using the professional Atmel Studio. In the process, we will learn the use of Serial COM port for debugging the Arduino Hardware, which does not have its own debugger. This will save you the cost of buying an external debugger like the ATMEL ICE. I will cover important topics like Interrupt, which you can use to make your own scheduler including different Industry standard communication protocols.

Pros of using Arduino Hardware Board

  • Arduino Uno / Nano / Mini has 8-bit AVR AtMega328p Microcontroller and Arduino Mega has 8-bit AVR AtMega2560 with all necessary hardware required for up and running.
  • Very cheap hardware.
  • Widely available around the globe.
  • No need for separate expensive programmer hardware, internal bootloader takes care of serial programming.

Cons of using Arduino style Programming

  • Arduino IDE is not professional.
  • 3rd party libraries.
  • No Register level learning.
  • No learning about Microcontroller’s internal and on-chip peripherals like GPIO, SPI, UART, TIMER etc.
  • Not industry standard and never recommended for a product design.

My Promise

You can proceed in this course with confidence as I always will be available to answer your questions and assist your understanding. I love to share my knowledge with others and I warmly welcome you to this course!

Curriculum for this Course

  1. Course Introduction and Welcome
    1. Course Introduction and Welcome
    2. Motivation to learn AVR Microcontroller
    3. Prerequisite S/W and H/W
  2. Software and Hardware Setup
    1. Why Atmel Studio for Arduino programming
    2. Installing Atmel Studio
    3. Installing Arduino Drivers
    4. Configuring Atmel Studio to flash Arduino UNO / NANO / MEGA
    5. Configuring Atmel Studio to use USB ASP for flashing
    6. Write the first Blinky Test Application
    7. Flash the Blinky Application
    8. Quiz
  3. Introduction to Embedded Systems
    1. What is Embedded Systems?
    2. Embedded System vs General Purpose System
    3. A case study of an Embedded System
    4. Microprocessor vs Microcontroller
    5. Product Development Lifecycle of Embedded Systems
    6. Quiz
  4. AVR Architecture and Atmega328p
    1. AVR Microcontroller Family
    2. AVR Architecture Overview
    3. Atmega328p Specification
    4. Pin Configuration and IO Multiplexing
    5. AVR CPU Core Execution and Operation
    6. AVR Memory Architecture
    7. AVR System Clock
    8. Internal Interrupt and External Interrupt
  5. IO Ports and Programming Lab
    1. GPIO Concepts
    2. GPIO Registers
    3. GPIO Programming
    4. Switch / Push Button Interfacing
    5. 7 Segment LED Display Interfacing
    6. Running LED Light
    7. IR Reflective Module / Sensor Interfacing
    8. Keypad Interfacing
    9. LED Matrix Interfacing
    10. GPIO Library File
  6. Timer, Counter, PWM and Programming Lab
    1. Timer 0
    2. Timer 1
    3. Timer 2
    4. Using a timer for System Delay
    5. PWM LED Brightness Control
    6. PWM Motor Control
    7. Buzzer interfacing and Music Generation
    8. Input Capture Example
    9. Servo Motor interfacing
    10. Interrupt based example
    11. Timer 0 Library File
  7. SPI Communication and Programming Lab
    1. SPI Concept
    2. SPI Register Description
    3. SPI Programming
    4. SPI Library File
    5. SPI Questions and Answers
  8. UART Communication and Programming Lab
    1. UART Concept
    2. UART Register Description
    3. UART Programming
    4. UART Library File
    5. UART as SPI
    6. UART Questions and Answers
  9. I2C or TWI Communication and Programming Lab
    1. I2C Concept
    2. I2C Register Description
    3. I2C Programming
    4. I2C Library File
    5. I2C Questions and Answers
  10. Analog Comparator
    1. Analog Comparator
    2. Example
  11. ADC and Programming Lab
    1. ADC Concept
    2. ADC Register Description
    3. ADC Conversion Programming
    4. Potentiometer to PWM example
    5. Temperature Sensor LM35 Interfacing
    6. Interrupt Example
    7. ADC Library File
  12. Memory Programming 
    1. EEPROM Programming
    2. Flash Programming
  13. Modules and Hardware Interfacing
    1. Light Sensor
    2. Temperature Sensor
    3. Atmospheric Pressure Sensor or Barometer Interfacing
    4. IR / Photo Interruptor
    5. Ultrasonic Senor or Range Finder
    6. Tilt / Gyroscope Sensor
    7. Accelerometer Interfacing
    8. LCD 16×2 Interfacing
    9. PCD8544 Nokia GLCD Interfacing
    10. TFT Display Interfacing
    11. Stepper Motor Interfacing
    12. Bluetooth
    13. WiFi  Interfacing
    14. NRF24L01 Interfacing
    15. SD Card Interfacing
    16. Thermistor
    17. Microphone Interfacing
    18. Hall Effect Sensor
    19. RFID / NFC Interfacing
    20. GPS Interfacing
    21. GSM Module Interfacing
    22. Xbee Interfacing
    23. Relay Interfacing
  14. Advanced Topics
    1. Multi-Processor Mode
    2. Sleep Modes
    3. Capacitive Touch

 

26 Comments

Rahul Barnwal · December 15, 2022 at 3:45 pm

Please Update the I2C part as soon as possible.

Ben · March 5, 2023 at 12:43 pm

Sir, it’s 2023, is the course still actively updated? I’m amazed and really intrested in your course structure, and glad it is free. However even if it’s not free i’d be happy to pay for full access to the finished course contents. If there’s a way to support (donate) you to finish the contents i’d be happy to help sir. Thanks

    Crazy Engineer · April 5, 2023 at 11:03 am

    Ben, I am short of time and thus slow in adding new content to the course, feel free to explore the internet.

Amir · December 8, 2023 at 2:49 am

New for learning

Abdullah · May 25, 2024 at 3:25 pm

Hey man, just wanted to say keep it up and take your time, this seems like an amazing course and its awesome that its free!

Also bit of a common and overused question, but I have experience with Python, a little bit of C/C++ (made a crappy and very basic text editor in C and done some projects for Arduino) but would like to ask what would be a good way to get into assembly (thought learning AVR assembly would be a good idea since arduino is such an open microcontroller) or what could be some projects I can make with AVR asm.Thanks!

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.