Crash Course Arduino and Microcontroller Development
- Descrição
- Currículo
- FAQ
- Revisões
Crash Course Arduino and Microcontroller Development is designed to transform the complex world of embedded engineering into an accessible and enjoyable experience for students and hobbyists alike. This unique course covers a wide range of topics from the ground up, requiring no impossible prerequisites. With over 128 lectures and 111+ hours of video content, my aim was to create a comprehensive guide that takes you from a novice to a confident master in embedded engineering, microcontrollers, and Arduino.
We will explore everything from basic electronics and microprocessor architecture to the intricacies of the Arduino platform, ARM, and programming. You’ll learn essential C/C++ programming skills to write your own code, optimize it, and understand advanced concepts like interrupts, data structures, multitasking, and object-oriented programming. Using simulators, compilers, IDEs, CAD, schematic entry programs, and various electrical test equipment, we will uncover the mysteries of communication protocols and signals, allowing you to see and understand the underlying processes.
Our journey will be hands-on and practical, with each lecture combining theory, calculations, and real-world examples. We’ll build simulations, construct physical hardware, test, and run our creations. This is not a scripted course but a genuine, one-on-one learning experience where I share my 40+ years of expertise in electronics and coding. Expect to have fun, learn deeply, and maybe even blow a few things up along the way!
Additionally, this course includes my college textbook, “Design Your Own Video Game Console” (aka “The Black Art of Video Game Console Design”), free of charge in PDF format. This 800+ page book will serve as a valuable reference throughout the course.
Join me in this exciting adventure into the world of embedded engineering and unlock your potential to create anything you can imagine.
-
1Course Overview and Welcome!Vídeo Aula
This short lecture talks about how Crash Courses work and what to expect. I will cover the breadth of the course and outline my goals for you as a student and what I hope you learn. Finally, we will take a look at this document, the parts list, and discuss the different ways to take the course.
-
2Installation and SetupVídeo Aula
In this lecture, we are going to talk about all the software and applications we use in the course, as well as online tools and simulators. We’ll install EasyEDA and the Arduino IDE tool, and make a short list of online tools you should get accounts on. This lecture is up here in front, so we don’t have to slow our momentum with a big tool install in the middle of the course. Also, in the future, I will add installation lectures and videos to this section if students need them.
-
3Installation and Setup - CodeLite IDE and CompilerVídeo Aula
In this lecture, we are going to install the CodeLite IDE and C/C++ compiler. If you like, you can skip this until you need it, but I suggest you just get it over with :) Also, make sure to download the latest README file for the compiler installation. You can find it in the resources link/tab for this lecture.
-
4Microprocessors and Computer Architecture FundamentalsVídeo Aula
This lecture introduces the course and we start discussing classic microprocessors and basic computer architecture.
-
5Microprocessors, Microcontrollers, ALUs, Assembly Language and MoreVídeo Aula
This lecture covers how microprocessors work internally. We cover classic 8-bit processors like the 6502, learn how an ALU works, Von Neumann vs. Harvard Architecture. We learn what machine and assembly language are as well as covers microcontrollers which are complete computers on a single IC, or otherwise known as systems on a chip or SOCs. Lastly, we learn what a "datasheet".
-
6Processor Design Primer: ALU, Control Unit, RTL Logic and Processor FundamentalsVídeo Aula
This lecture covers lower level processor design and how exactly machine "instructions" are implemented at the machine code level. We review RTL or "Register Transfer Logic" as a shorthand used to describe these operations as well as learn that a processor is nothing more than a conmplex state machine with gates and enables directing the flow of data. We deconstruct single machine or assembly language instructions to really understand how a processor performs computation. Finally, we continue learning about the elements or blocks of typical processors/microcontrollers and finish off with some simulation and seeing how C/C++ is converted to assembly language with an online tool.
-
7Introduction to the Arduino, Hardware, Software, Documentation and DatasheetVídeo Aula
In this lecture we take a look at the Arduino Technology platform, the hardware, software, API, IDE. See some physical development boards as well as review some other processors from history on the bench as well as a surpise guest embedded system featuring "Baby Yoda"!
-
8Introduction to the Arduino UNO, Hardware, IDE, API, Programming and SimulationVídeo Aula
In this lecture, we introduce the Arduino hardware, the IDE, how to find information on the Arduino site. We talk about C/C++ a bit and how source code is compiled into machine code and the entire process of how the compiler and tool chain works from end to end.
-
9Hands on with the Arduino, Parts Kits, Solderless boards and Component IntrosVídeo Aula
In this lecture, we introduce the Arduino hardware, the IDE, how to find information on the Arduino site. We talk about C/C++ a bit and how source code is compiled into machine code and the entire process of how the compiler and tool chain works from end to end.
-
10Blinking an LED with C++ in HardwareVídeo Aula
In this lecture, we use real Arduino UNO hardware, the IDE and some C++ code to blink LEDs, and make changes in real-time, so you can see how things fit together. This is the quintessential “Hello World”, but in hardware rather than software!
-
11Simulating our Arduino Hardware and Code Online with TinkerCAD and WokwiVídeo Aula
In this lecture, we take a look at two of the most popular online simulators for Arduino and how they work. We will take our simple blinking LED program and port it to these simulators, see how to work with these tools and the pro's and con's between them. This is important since it allows rapid prototyping of your Arduino and other embedded platforms as well as for those that do NOT have physical hardware.
-
12More Simulation with Code API Emulation on ReplitVídeo Aula
In this lecture, we write a very crude "Arduino Simulator" online in C++ on the replit.com platform (which you should have a free account on at this point). The simulator runs our blink LED program on virtual hardare and uses "print" statements to turn on/off the LEDs. This is a great lecture to understand how more advanced tools are written and used.
-
13Building a Game From Scratch: The Simon Memory Game, Hardware DesignVídeo Aula
In this lecture, we do the electrical design for a classic "Simon" memory game using the Arduino as the hardware platform.
-
14Building a Game From Scratch: The Simon Memory Game, Hardware BuildVídeo Aula
In this lecture, we build the physical hardware by adding in all the LEDS, buttons, power management, and rest of our previous hardware design.
-
15Building a Game From Scratch: The Simon Memory Game, Coding and FirmwareVídeo Aula
In this lecture, we write the foundation of the firmware for our Simon game. We add button presses, LED output, buzzer and tone generation.
-
16Finishing the Simon Game and Introduction to Serial DebuggingVídeo Aula
In this lecture, we explore crude "debugging" via the serial terminal and test it out on our Simon hardware platform.
-
17Porting Simon to Online SimulationVídeo Aula
In this lecture, we port the Simon hardware and firmware to the TinkerCAD simulation platform to show how you can completely simulate a hardware/firmware design (within reason) with online simulators.
-
18Basic Hand Tools for ElectronicsVídeo Aula
In this lecture, we review a number of basic hand tools for working with electronics and small parts.
-
19Working with Soldering Irons and Hot Air Machines without Burning Yourself!Vídeo Aula
This lecture introduces the course and we start discussing classic microprocessors and basic computer architecture.
-
20Multimeters, Oscilloscopes, Logic Analyzers, Signal Generators and PowerVídeo Aula
In this lecture, we take a look at electronic test equipment such as multimeters, oscilloscopes, logic analyzers, signal generators, power supplies and more.
-
21Hands on with Test Equipment and Real-Time Experiments with Logic AnalyzersVídeo Aula
In this lecture, we learn how to use the oscilloscope as well as the logic analyzer to investigate the Arduino firmware uploading/downloading protocol and understand the strengths and weaknesses of each tool.
-
22The Fundamentals of Electricity, Charge, Current, Voltage, Resistance and FieldsVídeo Aula
In this lecture, we cover the fundamentals of charge, electric and magnetic fields as they relate to current and voltage.
-
23Ohm’s Law, Basic Circuit Analysis, Series and Parallel CircuitsVídeo Aula
In this lecture, we delve into the single most important law in electronics, Ohm's Law. We learn how to analyze simple series and parallel DC circuits, as well as different approaches to the process.
-
24Understanding Power, Series and Parallel Batteries, Voltage Dividers and EasyEDAVídeo Aula
In this lecture, we continue our electronics basic with some more circuit analysis techniques, we learn about "power", as well as fire up the PCB tool we will be using for simulation called EasyEDA.
-
25Ohm's Law++, Kirchhoff's Laws; KVL and KCLVídeo Aula
In this lecture, we are going to delve into more advanced circuit analysis tools such as Kirchhoff's current and voltage laws, work some problems, build some hardware and then move onto simulation to check out our results.
-
26Capacitors, Electric Fields, Physics, Charging and DischargingVídeo Aula
In this lecture, we learn more about capacitors, their construction, modeling equations, and how they charge and discharge. We build and simulate our findings.
-
27Inductors, Magnetic Fields, Flux, Lenz’s & Faraday’s Law, Charging/DischargingVídeo Aula
In this lecture, we learn about inductors, how they work, and the laws that govern them. Finally, we take a look at engergizing and de-energizing them and compute current and voltage.
-
28Reactance, Impedance, Phasors, AC Analysis of Series Capacitive CircuitsVídeo Aula
In this lecture, we delve into the black art of "reactance", "impedance" and AC circuit analysis techniques that will be helpful to understand how to analyze simple AC circuits.
-
29Low Pass Filters, Transfer Functions, Gain, DecibelsVídeo Aula
In this lecture, we learn about filters, transfer functions (how a network changes an input signal at its output), gain, and work through a number of problems filter problems.
-
30Low Pass Filter Bench Build, Simulation, Arduino Tone GeneratorVídeo Aula
In this lecture, we take the theory learned about filters and apply it to a bench build and simulation of the tone generator.
-
31Basic Semiconductor Devices, Diodes, Rectification, LEDs, SimulationVídeo Aula
In this lecture, we learn about diodes (used for rectification and steering currents), their theory, and run some simulations.
-
32Transformers, DC Rectification, Understanding DatasheetsVídeo Aula
In this lecture, we learn about transformers and how to design a simple half wave rectifying power supply. Additionally, we cover some tips on how to read data sheets.
-
33Transistor Theory and ApplicationsVídeo Aula
In this lecture, we cover the bipolar transistor and its operation, theory, and run some experiments with it using a motor and Arduino.
-
34Mosfet Theory and Practical ApplicationsVídeo Aula
In this lecture, we learn about MOSFETs and how to use them primarily as switches to switch large currents. Then we redesign our previous motor control circuit based on a BJT transistor and upgrade it to use a mosfet.
-
35Introduction to Digital Electronics, Boolean Algebra, Gates, and Logic FamiliesVídeo Aula
In this lecture, we delve into the digital realm and learn about Boolean logic, gates, truth tables, base 2 math, and finish with an introduction to popular logic families like TTL, CMOS and LVTTL.
-
36TTL/CMOS Logic Gates, Driving, Sinking Current, Packages and PrototypingVídeo Aula
In this lecture, we learn more about the signaling in TTL and CMOS, how to interface to them, how to mix them, and about sinking and driving current. We finish up with looking at various packaging options for prototyping and how to work with this devices.
-
37Review of Common TTL/CMOS ICs and Bench Demo of GatesVídeo Aula
In this lecture, we build a TTL gate tester on the bench and compare results with simulation as well as see a couple problems that are common when building circuits and how to handle them.
-
38Simulating a Digital Logic Gate Module Using the ArduinoVídeo Aula
In this lecture, we use the Arduino as a platform to build a universal logic simulator. We write firmware, build hardware, and re-create our previous virtual simulation in real hardware.
-
39A Tour of Programmable Logic (RAM, FLASH, PALs, GALs, CPLD, FPGA) and Bench DemoVídeo Aula
In this lecture, we learn about programmable memories such as ROM, PROM, EEPROM, FLASH, and more. Then we take a look at programmable logic such as PALs, GALs, CPLDs, and FPGAs. We finish off with actually desiging an IC and programming it in CUPL (a hardware programming language), downloading, and testing our creation!
-
40Introducing C/C++, History and Programming Concepts for Embedded SystemsVídeo Aula
In this lecture, we begin our study of C++ formally. We begin with the fundamentals of the language, its roots, history, and why its so popular in embedded development.
-
41Understanding C/C++ Compilers, Code Generation and ToolsVídeo Aula
In this lecture, we go on a tour de force of how a compiler works. All of the questions you ever had about, ”how exactly does a line of code get compiled and ran on a piece of target hardware”, are answered here in gory detail. Additionally, we take a look at an array of tools that we will use to code with from desktop compilers to online tools and emulators.
-
42Working with IDEs, Compiling C++ Programs, and a Bit of Arduino CodeVídeo Aula
In this lecture, we start writing some simple code to print to the screen and see how the process changes from tool to tool as well as how coding on the Arduino is different from desktop C++ coding. Additionally, we learn about workspaces, projects, and compiler setup details that are very important.
-
43C++ Primer Crash Course, Arduino Emulation and CodingVídeo Aula
In this lecture, we begin writing code in C/C++ in three different environments; CodeLite, the Arduino IDE, and Replit.com online. Additionally, we take a deeper look out how the classic entry function in C/C++ main() implements the Arduino functions setup() and loop(), which is a point of confusion for everyone learning Arduino C/C++ programming differences.
-
44Setting up our C++ Test PlatformsVídeo Aula
In this lecture, we take a look at how C/C++ gets converted into a final executable and how we can dissassemble that file and see the assembly language generated for your programs. Additionally, we setup our programming environments for our C++ development online, on the desktop and on the Arduino.
-
45C++ Fundamentals, Headers, External Libraries, PrintingVídeo Aula
In this lecture, we start working with C++, learning about main(), the syntax of C/C++, and how to print to the console with printf(), as well as a deep dive into the infamous problems with carriage return and linefeed on terminals and consoles.
-
46C++ Variables, Intrinsic Types, Naming Conventions, and more printf() FormattingVídeo Aula
In this lecture, we start coding with a gentle introduction to variables, built in types, some naming conventions, and revisit the printf() function since we will be using it a lot to print results out.
-
47C++ Variables, Globals, Locals, Basic Types, Math Operators, and PrecedenceVídeo Aula
In this lecture, we continue our work with C++, learn more about data types, sizes of data, math operations and precedence, and a painless introduction to loops and the pre-processor.
-
48C++ Mathematics, Understanding Base-N Number Systems with Binary, Hex & OctalVídeo Aula
In this lecture, we take a short detour and review binary, hex and octal number systems.
-
49C++, Programming Style Guide and Conventions, Macros, Conditional CompilationVídeo Aula
In this lecture, we take a closer look at the C/C++ pre-preprocessor and how to use it to create constants, macros and conditional compilation. Additionally, we talk about coding style and review some time tested conventions that many programmers use to write understandable code.
-
50C++, Built in Math Operators, Binary Bitshift Operations and Using the DebuggerVídeo Aula
In this lecture, we review more math operators including bitwise logic operations and the shift operators. We also, delve into using the debugger to see our code execute and step thru it.
-
51More C++ Logical Operators, Conditionals and the "if" Statement, Type CastingVídeo Aula
In this lecture, we cover a few more math operators then we take a look conditional statements and how to write "if" statements with boolean expressions, finally we cover type casting.
-
52C++ Looping Constructs, "for" and "while"Vídeo Aula
In this lecture, we take a look at how to write code that repeats using "while," and "for" loops. We also look at some of the new syntax available in C++ 11 and newer versions to help simplify loop iteration.
-
53C++ Switch Statements, Arrays, StringsVídeo Aula
In this lecture, we take a look at a more efficient way to compute a n-way conditional using the "switch" statement, next we dig deeper into arrays and their memory layout. Finally, we talk a bit about the "string" class.
-
54C++ Strings, Arrays, Arduino Strings and FunctionsVídeo Aula
In this lecture, we take a closer look at some NULL terminated strings, as well as arrays, functions and the String object in the Arduino API.
-
55C++ Measuring Time, Nested Loops and Hardware Build (Finally!)Vídeo Aula
In this lecture, we take a look at some of the time keeping API functions for fun and then we work more on loops, and repeatitive processing. Additionally, we break out EasyCAD, design a circuit, copy it into TinkerCAD, and then build it all on the bench as well as compile and upload the code from the Arduino API. A lot to cover!
-
56C++ Console IO C and C++ methods, VT100 Gamepad Hardware DemoVídeo Aula
In this lecture, we lay the foundation to display characters on the serial terminal, learn about VT100 emulation, and a little bit of hardware demo with a poor man's "game pad".
-
57C++ Data Structures, Structs, Enums, Linked Lists and TreesVídeo Aula
In this lecture, we start our discussion of "data structures" and their theoretical basis as well as how to implement them in C++.
-
58C++ Pointers and References (The Dreaded Duo)Vídeo Aula
In this lecture, we cover one of the most feared subjects in Computer Science; the pointer! And in fact, you will see that pointers (and their C++ brothers "references") are quite easy to understand and you will wonder what all the drama has been about.
-
59C++ Classes, Methods, Properties and Object Oriented BasicsVídeo Aula
In this lecture, we delve into object oriented programming (OOP), learn the basics and how to create classes in C++, what properties and methods are, and the syntax of it all.
-
60C++ Advanced Classes, Constructors, Destructors, Operator OverloadingVídeo Aula
In this lecture, we continue our discussion of classes and look into class methods, static data, constructors, destructors, copy constructors and much more.
-
61C++ More Advanced Class Topics, Copy Constructors, Assignments, Deep and ShallowVídeo Aula
In this lecture, we go deeper into C++ objects and learn more about constructors, destructors, shallow and deep copying as well as operator overloading and function overloading.
-
62C++ Built in Objects and Including External Arduino LibrariesVídeo Aula
In this lecture, we take a look at some built in objects that are parts of the standard libraries of C++ and the Arduino variant. These include the "string" objects as well as a brief look at SD card support on the Arduino.
-
63C++ Understanding Microcontroller Memory Management, Globals, Locals, StaticsVídeo Aula
In this lecture, we learn about memory management on microcontrollers and the various memory regions, types, and keywords used in firmware to assert more control of the precious SRAM resources on microcontrollers.
-
64C++ Memory Management and the Heap - Part IIVídeo Aula
In this lecture, we finish up our discussion of memory management with exploring in depth how the heap, and stack works. How to allocate dynamic memory in C and C++ and the various issues you need to be aware of when using dynamic memory allocation, especially on microcontrollers with limited RAM resources.
-
65C++ Working with Arduino External Libraries and Objects and a Little RecursionVídeo Aula
In this lecture, we see how to work with external source and header files in both the desktop C/C++ compiler as well as the quirky Arduino IDE. Additionally, I sneak in discussions of basic "recursion" and how to make code call itself, call itself, call itself… Get ready for your brain to explode!
-
66Introduction to Arduino AVR 8-Bit Architecture; 8-bit Ports, GPIOs and ADCVídeo Aula
In this lecture, we take a detailed look at the inside of the ATMega328P processor used in the Arduino Uno. Learn how the block of the processor fit together, how to find information in the datasheet, and how the GPIO blocks as well as others work at the low level.
-
67Interfacing to 7-Segment Displays, Switches, Keypads, Rotary Encoders and MoreVídeo Aula
In this lecture, we review some basics about switches and terminology and then take a look at some hardware like membrane keypads, 7-segment displays and drivers, and rotary encoders. We prepare for a hardware build later down the line.
-
68Interfacing to 7-Segment Displays, Keypads, Rotary Encoders, & Bench Build IIVídeo Aula
In this lecture, we build the hardware we have been discussing and see how to use the membrane keypad as well as how rotary encoders work and quadrature encoding schemes.
-
69Filtering and Debouncing Deep DiveVídeo Aula
In this lecture, we work on switch debouncing using our rotary switch as the device under test. We look at both hardware switch debouncing as well as software solutions and implement both as well as take a look in real-time with the oscope at mechanical debouncing problems.
-
70Analog Interfacing to Potentiometers and JoysticksVídeo Aula
In this lecture, we write code and build up a test fixture to experiment with the analog capabilities of the Arduino and read POTs (potentiometers) and analog thumb sticks. We take this tech and then integrate it into a graphical VT100 demo that moves a cursor around the PC screen via serial terminal.
-
71C++ Exercise Converting the Joystick Code to a ClassVídeo Aula
In this lecture, we take the code we wrote previously with "C" style functional programming, and convert it to a more object oriented, class based approach. A good example of how to do this as well, as well, as you can decide for yourself if it makes the code easier to understand and use.
-
72Interfacing to LEDs and NeoPixelsVídeo Aula
In this lecture, we learn how to interface to neopixels, and in general how the protocol works for these serial RGB LEDs. Additionally, we write a software "bit-bang" driver, so you can see exactly how these drivers would be written bare metal without use of an API.
