ENGIN 2223

ENGIN 2223 – Microcontrollers

This is an introduction to the structure of microprocessors. The topics include architecture, instruction set, assembly language programming, assembler directives, input/output operations, C language programming for an embedded device, timers, analog-to-digital conversion, interrupts, and timing analysis.


ATmega328P Datasheet -This datasheet is probably the most useful resource that you have access to for learning more about the AVR microcontroller. This datasheet contains information on virtually every topic that we cover in class.

AVR Instruction Set Manual – This document contains every instruction allowed on AVR microcontrollers. We cover many of these in class, so this becomes a very useful guide.

Fuse Calculator – Use this online tool to determine fuse settings when programming the ATmega328P chip.

AVR Interrupts – This website has the name of every interrupt vector. Sometimes the name of the same interrupt vector is different on different microcontrollers. In case you are using something different from the ATmega328P, you may want to reference this if your interrupt isn’t working.


Arduino Uno Schematic – A complete pin-by-pin look at the Arduino Uno and how it interfaces with the ATmega328P microcontroller.

Arduino Board Pin Reference – Explains all of the pins on the Arduino Uno board.

Cheater Functions Explained – This website explains the C code behind all of the Arduino “cheater functions” (that you are definitely not allowed to use in class). See how much bloat is included in these functions that we eliminate by using C.

Smart Car

Your Smart Car comes from the SparkFun Inventor’s Kit, but has been modified with slightly different parts. Notably, you will use an Arduino Uno rather than the Redbot Mainboard. Here are the parts included in your box:

Here are the additional parts that you will need to use in your Smart Car:

Simulation, Schematics & Flowchart Tools

To create schematics for your lab reports, you may use KiCad, Eagle (there is a free download for just the PCB and schematic tool), or Fritzing. As of October 2020, I don’t believe that Fritzing is free to download anymore.

Tinkercad – This online tool allows you to simulate the hardware and software of an Arduino.

draw.io – Use this free website to create flowcharts and block diagrams for use in your design project.

Binary Codes

ASCII Code – A full table of ASCII code values in decimal, binary, octal and hexadecimal.

CPU Clock

Choosing a Microcontroller Clock – An explanation of different types of oscillators and how to choose the right clock for your microcontroller project.


NAND and NOR Flash – The differences between NAND and NOR flash memory.

Measurement Tools

How to Use an Oscilloscope – If using a ‘scope intimidates you, check out this reference that breaks it down into simple steps.

C Resources

Guide to Software Commenting – Helpful advice on how to comment your software code.

Assembly Resources

AVR Delay Loop Calculator – Want to create a delay in your AVR assembly code and don’t know how? Put in your microcontroller clock frequency and desired delay time and this handy tool will spit out the necessary code to achieve that delay.

AVR Beginners – This is an all-around good resource for writing assembly on AVR devices. (Note: it is not necessarily ATmega328P-specific but discusses AVR in general.)

View Arduino IDE Code in Assembly – If you’re interested in how the Arduino IDE translates your C code to Assembly, follow these steps to look at the output. You’ll see that the Arduino IDE severely bloats your code with a lot of unnecessary instructions that you can eliminate by writing Assembly directly.

General Resources

Glossary of Electrical Engineering Terms – Definitions of many frequently used EE terms.

How to Read a Schematic – In case you aren’t sure what all of the circuit symbols mean, here is a handy guide explaining the most common circuit symbols.

Sine Lookup Table – If you’ve ever wanted to generate a sine wave using digital values, use this to create a lookup table of numbers. Using the ATmega328P, you’ll need to build an external DAC (such as an R-2R ladder) connected to several digital pins.

Books with Cool Project Ideas

  • Make: AVR Programming: Learning to Write Software for Hardware
    by Elliot Williams

Related Textbooks

None of these textbooks is required for this course. However, they make wonderful study guides if you are in need of more resources.

  • Introduction to Embedded Systems: Using ANSI C and the Arduino Development Environment
    by David Russell

  • The Atmel AVR Microcontroller: MEGA and XMEGA in Assembly and C
    by Han-Way Huang

  • AVR Microcontroller and Embedded Systems: Using Assembly and C
    by Muhammad Ali Mazidi, Janice Mazidi

  • Atmel AVR Microcontroller Primer: Programming and Interfacing
    by Steven F. Barrett, Daniel J. Pack
  • Digital Logic & Microprocessor Design with Interfacing
    by Enoch O. Hwang