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

Yogesh Modi · November 12, 2018 at 3:10 am

How can i take this course?

    Crazy Engineer · November 12, 2018 at 8:21 am

    Hi Yogesh, Thanks a lot to check this course. I am currently writing the Tutorial and it is in progress. It will take a couple of Months to complete. This Course is completely Industry Specific. I am writing and hosting each topic one after another. So You can come back to the page each week and see a new topic and follow the sequence. Till then you can explore other free websites for tutorials. I will let you know when I finish the write-up.

      photon · April 6, 2019 at 5:58 pm

      Ummm. How do I ACTUALLY view the course??? There’s only a few things open. Are you still working on this, or is this it?

      Thanks for having atleast something. Its been really hard to find good tutorials teaching this exact topic!

        Crazy Engineer · April 16, 2019 at 8:15 pm

        Hi, Thanks for Appreciating. I am currently working on this. I will be Updating the rest of the topics. Till then Happy Making and Programming.

          Dandi · December 21, 2019 at 2:12 pm

          Hey, any updates? I’d love to have see more content by you. the tutorials so far are very professional and instructive. Kudos

          Crazy Engineer · December 31, 2019 at 7:35 pm

          Thanks, Dandi. I am trying my best to have time to write the full tutorial.

Njoku Okechukwu Valentine · December 30, 2018 at 10:15 am

Good day Sir.
What a good work you are doing! Keep it up. But how can linux (mint 19) try out this program codes and stuff.
I have browsed and there seems not to be Atmel Studio for linux users.
Thanks in advance

MANIKANTAN K V · March 26, 2020 at 4:49 pm

Im very much intrested on the content of the tutorial,how can i access it .still some contents are not available. is it complete soon?

    Crazy Engineer · March 31, 2020 at 10:02 pm

    I am under progress to add more content. Please explore the web meantime.

PETER · May 23, 2020 at 8:35 pm

HOW CAN I TAKE THIS COURSE PLEASE

George E Cole · January 29, 2021 at 1:18 am

Ditto Peter. I’d be interested in having access to more of the course content. I stumbled over your taster article which detailed some of the concepts of register/port/pin manipulation I had gleened from (various) other resources. The contents of your trutorial would seem to put together a lot of what I want to learn. I’ve ditched Arduino (using it as a bootstrap loader) for naked ATMega328Ps – as I’m as interested in the glue electronics and pcb assembly as software. Link Njoku, I’m no Windoze fan, so am using Visual Studio Code / Platformio (on Mac – which looks like Linux 😉 ) and is a pretty nice environment. I’m a retired and rusty embedded systems engineer revisiting my past. How things have changed since the 80’s 🙂

    Crazy Engineer · February 6, 2021 at 11:32 pm

    Thank you, George, for visiting my tutorial. Thank you for sharing your experience and views. I am working hard for delivering more tutorials. Stay Tuned.

rene caillet · February 2, 2021 at 5:10 pm

Bonjour,
Ce que vous avez fait jusqu’à présent est super et j’apprends beaucoup. Vivement la suite, je ne trouve pas de meilleurs tutoriel que le votre.
Encore merci pour le temps consacré aux autres.
René

    Crazy Engineer · February 6, 2021 at 11:35 pm

    Dear Rene, Thank You for visiting my page and finding my tutorial interesting and helpful. I am working hard to deliver more tutorials, Stay Tuned.

    Cher René, Merci d’avoir visité ma page et d’avoir trouvé mon tutoriel intéressant et utile. Je travaille dur pour fournir plus de tutoriels, Restez à l’écoute.

Chirag · April 7, 2021 at 4:29 pm

Is this course open source or any fees for this course?

    Crazy Engineer · April 14, 2021 at 3:26 pm

    Hi Chirag, This course is completely free and open. Please learn from this and share it with your friends.

Sangaran D K · September 2, 2021 at 8:56 am

When your full course is will be available? Kindly answer me.

    Crazy Engineer · September 2, 2021 at 9:40 pm

    Some Part is Available for Access, Thanks For Choosing

uttam · September 15, 2021 at 6:13 pm

How can i take this course?

Dhruv · September 7, 2022 at 4:06 pm

Please make it accessible as soon as possible…course looks interesting

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.