Advanced Arduino Programming with ARM Cortex M3/M4 Devices
Duration: 5 Days
Course Background
The aim of this 5 day course is to extend the techniques and philosophy of Arduino interactive programming and prototyping by exploring object oriented programming techniques for embedded systems, exploring more advanced data structures , classes, and algorithms and object oriented programming techniques. The course will cover finite state machines as well as extended hierarchical statemachines and state machine based approaches to multi-tasking. It will also cover the implementation of a simple scheduler and introduce multi-tasking using the FreeRTOS operating system. Another important aspect of this course is the introduction of UML notation and its uses in embedded systems design and implementation. The course will also explore the design and implementation of the Arduino libraries and introduce techniques for designing, implementing and deploying custom libraries.
Course Prerequisites and Target Audience
This course is suitable for those who already have some experience with embedded systems prototyping and programming, e.g. as might have been acquired by building and experimenting with classical AVR based Arduinos.
Course Outline
- Overview of the Arduino Culture, Philosophy and Community
- A brief history of the Arduino
- Interactive programming and Creativity
- Classical Arduino programming and prototyping - Demonstration
- Experimenting with the Arduino - Getting Acquainted with the Arduino DUE and the Olimexino STM32
- Anatomy, layout and programming of arduino boards
- Breadboarding 101 - lights, buttons, timers and analog I/O
- Arduino - C/C++ Programming in greater depth
- Overview of C programming fundamentals
- Arrays, pointers, and data structures
- Dynamic memory allocation in C
- Function pointers and their uses
- Circular buffers
- Linked lists
- Stacks and Queues
- C++ as an extension of C
- Classes, instances, inheritance and polymorphism - the basic concepts
- Current extent of C++ support in the PIC32 Arduino IDE
- ARM Cortex M3/M4 - A Technical Overview
- The ARM Cortex M3/M4 Processor Architecture
- ARM Cortex standard peripherals - I/O, analog input and A/D, and timers
- Serial ports - USART, I2C, SPI
- USB - an overview
- Ethernet and TCP/IP - Foundations
- CAN - Foundations
- Capture-Compare, PWM, using timers for periodic analog data sampling
- Beyond the basic polling infinite loop
- The fundamental Arduino programming paradigm - its strengths and limitations
- Combining timer interrupts and polling - for more effective multi-tasking
- Finite State Machine based approaches to multi-tasking
- Controlling and co-ordinating multiple motors
- The PONT Scheduler approach to multi-tasking
- The RTOS approach to multi-tasking - using FreeRTOS as an example
- Control, Motors and Servos
- Motors - DC and stepper - an overview
- Driving higher current and higher voltage devices
- Foundations of feedback and feedback control
- Implementing a line tracking system
- Controlling and co-ordinating multiple motors and multiple servos
- Buses and Protocols
- RS232 and Arduino to PC communication
- I2C, SPI and sensor interfacing
- Creating useful sensor libraries
- CAN bus - foundations and applications
- Ethernet and TCP/IP - and web server enabled PIC32 Arduinos
- Basics of implementing ARM Cortex M3/M4 based USB devices and getting them to communicate with PCs and mobile devices
- Wireless - Foundations