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