For detailed information on this course please see the course syllabus in html or pdf format.
In this course you will learn the basics of designing, interfacing, configuring, and programming embedded systems. We will make use of the Arduino platform, which is an inexpensive, popular embedded system used by hobbyists, researchers, and in industry, to implement the techniques learned in class. By the end of the course you will have mastered the basics of embedded system design and programming. This course will help to prepare you for cutting edge careers in industry and research.
Assignment | Due Date |
Course Survey | Weds, Jan 15th, 5pm |
HW 1 (pdf,code) | Start of class, Thurs, Jan 23rd |
Lab 1 (pdf) | Thurs, Jan 30th in class |
HW 2 (pdf) | Start of class, Thurs, Feb 6th |
Lab 2 (pdf, lab2_button_count.ino, lab2_button_count.cpp) | Thurs, Feb 13th in class |
HW 3 (pdf,code) | Start of class, Thurs, Feb 20th |
Test 1 from prior years: 2012, 2013, 2014, 2015, 2016, 2019 | For review for test on Tuesday, Mar 3rd in class |
Lab 3 (pdf,Ultrasonic Sensor Datasheet,Servo Datasheet) | Start of class, Thurs, Mar 5th |
HW 4 (pdf,code) | Start of class, Tues, Mar 10th |
Project 1 (pdf) Project 1 Cutsheet (Cutsheet) Project Report Template (Word Doc) Project Report Rubric (pdf) L298N Datasheet (pdf) |
Bitbucket Repos: Thursday, March 12th (in Lab) Checkpoint 1 - "Robot Assembly/Schematic" Thursday, March 12th (in Lab) Checkpoint 2 - "Robot Motion", Tuesday, March 17th (in morning Lab) Competition, Thursday, March 19th (in Lab) Written Report: Tuesday, March 31st, 2019 (beginning of class) Competition Times |
Lab 4 (pdf, Lab 4 Code(Lab4_irq.ino or Lab4_irq.cpp)
| Thursday, April 9th |
HW 5 (pdf) | Start of class, Thurs, April 16th |
Project 2 (pdf) Checkpoint 1 Code: (test.ino) Checkpoint 2 Code: (project2.ino, ir_decoder.cpp, ir_decoder.h) Project 2 Cutsheet (pdf) Project Report Template (Word Doc) Project Report Rubric (pdf) IR Sensor Datasheet (pdf1,pdf2) |
Checkpoint 1 - "IR Decoding", Tuesday, April 14(in Lab) Checkpoint 2 "Robot Motion with IR Remote", Tuesday, April 21(in Lab) A-Functionality "Wall Following with Obstacle Avoidance, Thursday, April 30 (in Class and Lab) Competition, Thursday, April 30 (in Class and Lab) Written Report, Friday, May 1 by close of business (4:30pm) Competition Times |
Test 2 from prior years: 2012, 2013, 2014, 2015, 2019 | For review for test on Tuesday, Apr 28th in class |
Week | Class Topics | Lab | Reading |
Week 1, Jan 13 | course intro, c programming | R2.1, R2.2, R2.4 | |
Week 1 Additional Readings: |
Basic C Types More on Basic C Types Bit Operations More Bit Operations Fixed width types Why use uint8_t C Pre-Processor and Macros How not to write code and the output (really, try compling it) Pointers Function Pointers Apollo Guidance Computer |
||
Week 2, Jan 20 (NO CLASS Monday) | embedded system design, arduino intro, basic circuit diagrams | R2.5, R2.6, R2.7, R2.8, W1.1, W1.2, W1.3 | |
Week 3, Jan 27 | instruction sets, registers and mem access, digital I/O | Arduinos | W2.1, W2.2, R6.* |
Week 2 and 3 Additional Readings: |
Basic circuit elements How to read a schematic Arduino Uno R3 schematic How to read a datasheet Atmega328 datasheet Register-based digital I/O Another register-based digital I/O (just make sure to use bit operations (|=,&=) and not binary value!) Arduino-function digital I/O AVR memory map overview (see datasheet as well) Directly accessing memory/registers with C macros (but for ARM, not AVR) Directly accessing memory in assembly Program counter (general info) Read up on the AVR Program Counter in the datasheet. Reading the program counter is not straight forward, but somtimes necessary. |
||
Week 4, Feb 3 | registers and memory, debugging | W3.1, R7.* | |
Week 5, Feb 10 | debugging, timers | timers and I/O | R4.* |
Week 4 and 5 Additional Readings: |
Suggestions for debugging ES More debugging suggestions JTAG Another JTAG link Yet another JTAG link Viewing assembly output Arduino build process overview General info on timers AVR timers |
||
Week 6, Feb 17 | timers and PWM | PWM and servos | R8.* |
Week 7, Feb 24 | analog to digital converters (A2D) and review | ||
Week 6 and 7 Additional Readings: |
Read section 16 in the datasheet on the Timer/Counter1 with PWM Details of Arduino millis fuction (and how it uses Timer0) Sparkfun PWM Arduino PWM (including analogWrite) Wikipedia PWM Fast versus Phase/Freq Correct PWM How servos work More on how servos work Wikipedia ADC Sparkfun ADC More ADC |
||
Week 8, Mar 2 | CPU bus, communication protocols (UART, SPI, RS485) | A2D | W4.1, R10.1 to R10.1.3 |
Week 9, March 9 | project | ||
Week 8 and 9 Additional Readings: |
Parallel versus Serial, UART (sparkfun) Serial Communication (Wikipedia) Parallel Communication (Wikipedia) Serial Comms, UART, RS232, RS485 UART (Wikipedia) UART (sparkfun) More UART (but beware, code examples for a different processor) Interfacing a UART to USB-UART converter (TTL, RS232, USB, etc) SPI (sparkfun) SPI (wikipedia) SPI (arduino) |
||
Week 10, March 16 | project 1 competition | ||
Week of March 23 | NO CLASS SPRING BREAK | ||
Week 11, March 30 | interrupts | interrupts, communication | W3.1.4, W3.2, R9.* |
Week 12, April 6 | I2C, peripherals, sensors | i2c | R10.1.2 |
Week 11 and 12 Additional Readings: |
Interrupts More Interrupts Interrupts, very broadly (wikipedia) List of all interrupts on AVR AVR Libc Interrupt Reference AVR pitfalls of reentrant code I2C (warning code examples not for Arduino) I2C (sparkfun) I2C (wikipedia) I2C aka Wire Library (arduino) | ||
Week 13, April 13 | Embedded Operating Systems, review | project checkpoint | W6.1, W6.2, W6.3 |
Week 14, April 20 | power management, embedded algorithms, program optimization | project checkpoint, |
W5.5, W5.6, W5.7 |
Week 15, April 27 | final project competition | final project competition |