Developing in C on the AVR ATmega328P

3 minute read

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.

Course Pages of Significant Interest

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: “

  1. Raspberry Pi and VS Code Remote Setup (Trixie) STRONGLY RECOMMENDED METHOD

  2. Raspberry Pi and VS Code Setup: Developing Remotely

  3. 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)

  4. Using git

  5. Edit

  6. Build

  7. Upload

  8. AVR_C Library Functions

  9. Using a Serial Monitor

  10. Functions - Serial input/output

  11. Function - analogWrite()

  12. Functions - Serial input/output

  13. Function - digitalWrite()

  14. Function - pinMode()

  15. Function - digitalRead()

  16. Struct - buttons[]

  17. Function - analogRead()

  18. Hints

  19. Mapping Values

  20. Using Data Types and Math

  21. Marking Time and Measuring Time

  22. User Functions

  23. Multi-tasking the Arduino - Part 1

  24. Function - tone()

  25. Using PROGMEM

  26. structures

  27. Code vs. Cost

  28. Pointers

  29. Servos

  30. I/O Ports

  31. Make, Makefile and env.make

  32. Better Serial Input

  33. Using the GNU Linker to Enhance printf()

  34. Serial Applications for Embedded Development

  35. Using the GNU Linker to Enhance printf()

  36. Better Serial Input

  37. A Second Serial Port

  38. Buffer Overflow

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.

  1. AVR Datasheet Note: Blink
  2. AVR Datasheet Note: PWM
  3. AVR Datasheet Note: analogWrite

Programming Examples

Intermediate tutorials focused on using the AVR-gcc library or examples from the library.

  1. Comparison of Languages
  2. AVR-gcc Note: Simple Project
  3. Using the Standard C Framework
  4. Writing Multitasking Programs
  5. Using Makefiles to Automate Development

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.

  1. Hardware Debug: Using gdb to debug
  2. Hardware Debug: Setup Bloom and gdb to Debug
  3. Hardware Debug: Examples of Bloom with gdb to Debug
  4. Hardware Debug: Hints on Solving Issues Bloom and gdb
  5. Hardware Debug: Exploring the ATmega328PB Xplained Mini
  6. Hardware Debug: Command and Configuration Reference for Bloom and gdb

Reference Content on C

Reference books which are important for understanding C

  1. The C Programming Language Kernighan and Ritchie - available in PDF and paper copy
  2. Barr Group: Embedded C Coding Standard
  3. SEI CERT C Coding Standard
  4. Arduino Resources page
  5. comp.lang.c FAQ

Comments powered by Talkyard.