Introduction#
While the Arduino tool set, (both the Arduino IDE and Arduino software framework) are outstanding for quickly developing a working prototype, they do so with a combination of a graphical-user-interface (GUI), the C++ language and Arduino-only classes. This in itself, isn’t a problem, one can be quite efficient and productive using this approach.
This approach is an issue if you are at a university or job which expects a standards-based C language proficiency. It is also an issue, if your class or job, requires understanding how to use command-line-interface (CLI)-based tools. The C language, and not C++, is the basis of a significant number of embedded systems development.
This set of entries are written to help you learn how develop embedded ANSI C programs for the AVR family and specifically the ATmega328P (Arduino Uno R3). While doing so, it will also use a set of tools which can serve as the basis of an intermediate-level software programmer.
Important Links#
- ATmega328P Datasheet - critical for understanding how to program the ATmega328P
- Definitive UNO pinout - easy to use reference for the ATmega328P pinout
- Arduino in C | Freedom Embedded - another site describing how to program the ATmega32P in Standard C
- Make: AVR Programming - phenomenal book on programming the AVR family, highly recommended
- Commentary: 10 Things I Wish I Knew Before Learning Embedded Systems - if you want to know why learning how to program embedded systems has value
Course Pages of Significant Interest#
- Writings - always shows latest entries, very important to review for new content!
- Developing in C on the AVR ATmega328P: Frequently Asked Questions (FAQ) Like all FAQ’s, if you have a question, check here first.
- Developing in C on the AVR ATmega328P: Frequently Found Errors (FFE) Similar to an FAQ, describes errors found while creating code, best place to check when you have an error you do not understand.
- Example Code Example code for all of the functions, if you have a problem with a function, review the example!
Course Material#
Developing in C for the ATmega328P#
This course uses the AVR_C repository for a detailed approach to learning C for the AVR-family of microcontrollers
All entries below begin with “Developing in C for the ATmega328P: “
- Why This Is Worth It - optional commentary and explanation as to this approach
-
Raspberry Pi and VS Code Remote Setup (Trixie) STRONGLY RECOMMENDED METHOD
-
Raspberry Pi and VS Code Setup Serial Communication
Other System Setup (If you aren’t able or don’t wish to use the Raspberry Pi approach)#
AVR Datasheet Notes#
Technical tutorial using specific capabilities of the ATmega328P chip. This content is intended to help somone understand how to use the datasheet to implement a specific function using the ATmega328P.
Programming Examples#
Intermediate tutorials focused on using the AVR-gcc library or examples from the library.
- Comparison of Languages
- AVR-gcc Note: Simple Project
- Using the Standard C Framework
- Writing Multitasking Programs
- Using Makefiles to Automate Development
- PRNG, FSM and more!
- GCC 12 AVR array subscript error
Hardware Debugging#
Technical tutorials on using Bloom, gdb, debugWIRE, a hardware debugger such as the Microchip SNAP or the one on the ATmega328PB Xplained Mini board to debug programs on the microcontroller.
- Hardware Debug: Using gdb to debug
- Hardware Debug: Setup Bloom and gdb to Debug
- Hardware Debug: Examples of Bloom with gdb to Debug
- Hardware Debug: Hints on Solving Issues Bloom and gdb
- Hardware Debug: Exploring the ATmega328PB Xplained Mini
- Hardware Debug: Command and Configuration Reference for Bloom and gdb
Reference Content on C#
Reference books which are important for understanding C
- The C Programming Language Kernighan and Ritchie - available in PDF and paper copy
- Barr Group: Embedded C Coding Standard
- SEI CERT C Coding Standard
- Arduino Resources page
- comp.lang.c FAQ