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 9th, 5pm
 | 
| HW 1 (pdf,code)
 | Start of class, Thurs, Jan 17th
 | 
| Lab 1 (pdf)
 | Thurs, Jan 24th in class
 | 
| HW 2 (pdf)
 | Start of class, Thurs, Jan 31st
 | 
| Lab 2 (pdf,lab2_button_count.ino)
 | Thurs, Feb 7th in class
 | 
| HW 3 (pdf,code)
 | Start of class, Thurs, Feb 14th
 | 
| Test 1 from prior years: 2012, 2013, 2014, 2015, 2016
 | For review for test on Thurs, Feb 21st in class 
 | 
| Lab 3 (pdf,Ultrasonic Sensor Datasheet,Servo Datasheet)
 | Start of class, Thurs, Feb 28th
 | 
| HW 4 (pdf,code)
 | Start of class, Tues, Mar 5th
 | 
Project 1 (pdf) 
Project 1 Cutsheet (Cutsheet) 
Project Report Template (Word Doc) 
Project Report Rubric (pdf) 
L298N Datasheet (pdf) 
 | 
Bitbucket Repos: Thursday, March 7th (in Lab) 
Checkpoint 1 - "Robot Assembly/Schematic" Thursday, March 7th (in Lab) 
Checkpoint 2 - "Robot Motion", Tuesday, March 12th (in morning Lab) 
Competition, Thursday, March 14th (in Lab) 
Written Report: Tuesday, March 26th, 2019 (beginning of class) 
Competition Times 
 | 
Lab 4 (pdf, Lab 4 Code(Lab4_irq.ino)
 
 | Thursday, April 4th
 | 
| HW 5 (pdf)
 | Start of class, Thurs, April 11th
 | 
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 9(in Lab) 
Checkpoint 2 "Robot Motion with IR Remote", Tuesday, April 16(in Lab) 
A-Functionality "Wall Following with Obstacle Avoidance, Tuesday, April 23 (in Class and Lab) 
Competition, Tuesday, April 23 (in Class and Lab) 
Written Report, Thursday, April 25 at beginning of class 
Competition Times 
 | 
| Test 2 from prior years: 2012, 2013, 2014, 2015
 | For review for test on Thurs, Apr 25th in class
 | 
For assignments that require electronic code submission, you can do so on Canvas 
| Week | 
Class Topics | 
Lab | 
Reading | 
| Week 1, Jan 8 | 
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 15 | 
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 22 (NO CLASS Monday) | 
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) 
AVR program counter 
Reading the program counter (not straight forward, but sometimes useful) 
 | 
| Week 4, Jan 28 | 
registers and memory, debugging | 
 | 
W3.1, R7.* | 
| Week 5, Feb 5 | 
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 12 | 
timers and PWM | 
PWM and servos | 
R8.* | 
| Week 7, Feb 19 | 
analog to digital converters (A2D) and review  | 
 | 
test 1(tentative) | 
 
|  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, Feb 26 | 
CPU bus, communication protocols (UART, SPI, RS485) | 
A2D | 
W4.1, R10.1 to R10.1.3 | 
| Week 9, March 5 | 
project | 
 | 
 | 
 
|  Week 8 and 9 Additional Readings: | 
Parallel versus Serial, UART (sparkfun) 
Serial and Parallel Comms (a bit of history too) 
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 12 | 
 | 
project 1 competition | 
 | 
| NO CLASS SPRING BREAK | 
| Week 11, March 26 | 
interrupts | 
interrupts, communication | 
W3.1.4, W3.2, R9.* | 
| Week 12, April 2 | 
I2C, peripherals, sensors  | 
i2c | 
R10.1.2 | 
 
|  Week 11 and 12 Additional Readings: | 
Interrupts 
More Interrupts 
Even 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 9 | 
Embedded Operating Systems, review | 
project checkpoint | 
W6.1, W6.2, W6.3 | 
| Week 14, April 16 | 
power management, embedded algorithms, program optimization | 
project checkpoint, test 2(tentative) | 
W5.5, W5.6, W5.7 | 
| Week 15, April 23 | 
final project competition | 
final project competition | 
test 2(tentative) |