Advanced Embedded Systems Prototyping and Programming with the PIC32 based Arduino
Duration: 5 Days
Intended 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 Overview
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 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 chipKIT
- Anatomy, layout and programming of arduino boards
- the "wiring" metaphor underlying Arduino programming
- 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
PIC32 - A Technical Overview
- The PIC32 MIPS Processor Architecture
- PIC32 standard peripherals - I/O, analog input and A/D, and timers
- Serial ports - USART, I2C, SPI
- USB - and 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
- The PONT Scheduler approach to multi-tasking
- The RTOS approach to multi-tasking - using FreeRTOS as an example
Motors, Servo and basic motor control systems
- Foundations of feedback and feedback control
- Strategies for controlling multiple servos and multiple motors
- Implementing a line tracking system
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 PIC based USB devices and getting them to communicate with PCs and mobile devices
Course format
The course is approximately involves approximately 40% teaching and 60% hands on practical work. There is a vast amount of material to cover and the detailed running of an individual course will depend on the interests of the course participants
