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 and Information Quiz | Weds, Aug 26th, 5pm |
| HW 1 (pdf,code) | Start of class, Thurs, Sep 3rd |
| Lab 1 (pdf) | Start of class, Thurs, Sep 10th |
| HW 2 (pdf) | Start of class, Thurs, Sep 17th |
| Lab 2 (pdf, lab2_button_count.ino, lab2_button_count.cpp) | Start of class, Thurs, Sep 24th |
| HW 3 (pdf,code) | Start of class, Thurs, Oct 1st |
| Test 1 from prior year: Sample Test 1 | For review for test on Tuesday, Oct 6th in class |
| Lab 3 (pdf,Ultrasonic Sensor Datasheet,Servo Datasheet) | Friday, Oct 9th (close of business) |
| HW 4 (pdf,code) | close of business, Fri, Oct 16th |
| Project 1 (pdf) Project Report Template (Word Doc) Project Report Rubric (pdf) L298N Datasheet (pdf) |
Bitbucket Repos: Tuesday, Oct 13th (end of class) Checkpoint 1 - "Robot Assembly/Schematic" Thursday, Oct 15th (close of business) Checkpoint 2 - "Robot Motion", Tuesday, Oct 27th (end of class) B-Functionality - "Wall Following", Thursday, Oct 29th (in Lab) Competition, Thursday, Oct 29th (in Class/Lab) Code and Written Report: Tuesday, Nov 3rd (beginning of class) Competition Times |
| Lab 4 (pdf, Lab 4 Code(Lab4_irq.ino or Lab4_irq.cpp)
| End of Class, Thurs, Nov 12th |
| HW 5 (pdf) | close of business, Tues, Nov 24th |
| Project 2 (pdf) Checkpoint 1 Code: (test.ino) Checkpoint 2 Code: (project2.ino, ir_decoder.cpp, ir_decoder.h) Project Report Template (Word Doc) Project Report Rubric (pdf) IR Sensor Datasheet (pdf1,pdf2) |
Checkpoint 1 - "IR Decoding", Thursday, Nov 19th (in Lab) Checkpoint 2 - "Robot Motion with IR Remote", Tuesday, Dec 1st (end of Lab) A-Functionality - "Wall Following with Obstacle Avoidance, Thursday, Dec 10th (in Class and Lab) Competition, Thursday, Dec 10th (in Class and Lab) Written Report, Friday, Dec 11th by close of business (4:30pm) Competition Times |
| Test 2 from prior year: Sample Text 2 | For review for test on Tuesday, Dec 8th in class |
| Lab 5 - Bonus Lab (pdf)
Lab 5 Code(LCD_Starter_Code.cpp, pong.cpp, pong.h) Joystick Module Datasheet | Friday, Dec 11th (Close of Business) |
| Week | Class Topics | Lab | Reading |
| Week 1, Aug 24 | 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 Pointers Function Pointers Apollo Guidance Computer |
||
| Week 2, Aug 31 | embedded system design, arduino intro, basic circuit diagrams | R2.5, R2.6, R2.7, R2.8, W1.1, W1.2, W1.3 | |
| Week 3, Sep 7 | 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 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) 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, Sep 14 | registers and memory, debugging | W3.1, R7.* | |
| Week 5, Sep 21 | debugging, timers | timers and I/O | R4.* |
| Week 4 and 5 Additional Readings: |
Debugging an Arduino UNO without a debugger Platform IO Debugging Documentation More debugging suggestions JTAG Another JTAG link Yet another JTAG link Viewing assembly output Arduino build process overview AVR timers |
||
| Week 6, Sep 28 | timers and PWM | PWM and servos | R8.* |
| Week 7, Oct 5 | analog to digital converters (A2D) and review | Begin Project 1 | |
| 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 How servos work More on how servos work Wikipedia ADC Sparkfun ADC More ADC |
||
| Week 8, Oct 12 | CPU bus, communication protocols (UART, SPI, RS485) Continue Project 1 | A2D | W4.1, R10.1 to R10.1.3 |
| Week 9, Oct 19 | Fall Break 19-20 Oct | ||
| 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, Oct 26 | Project 1 Competition | ||
| Week 11, Nov 2 | Begin Project 2 | ||
| Week 12, Nov 9 | interrupts | interrupts, communication | W3.1.4, W3.2, R9.* |
| Week 13, Nov 16 | I2C, peripherals, sensors, Embedded Operating Systems, power management, embedded algorithms, program optimization, review | i2c | R10.1.2, W6.1, W6.2, W6.3 |
| Week 12 and 13 Additional Readings: |
Interrupts Interrupts, very broadly (wikipedia) I2C (warning code examples not for Arduino) I2C (sparkfun) I2C (wikipedia) I2C aka Wire Library (arduino) | ||
| Week 14, Nov 23 | W5.5, W5.6, W5.7 | ||
| Week 15, Nov 30 | Working on Project 2 | Robot Motion with IR Remote | |
| Week 16, Dec 7 | Project 2 Competition | ||