CSCE 236: Embedded Systems
Spring 2019


Jeffrey Falkinburg
Computer Science and Engineering
203A Military & Naval Sciences Building
Office Hours:
Tuesday 3:30-4:30am: Falkinburg in 203A M&N
and by appointment.

Teaching Assistant

Graduate TA: Sai Lamba-Karanam,
Undergraduate TA: Bryan Borer,
Undergraduate TA: Alex Czarnick,
Undergraduate TA: Avinash Nooka,
Undergraduate TA: Ryan Wallace,

Office Hours:
Monday 10:30am-1:20pm: Avinash Nooka in SRC
Monday 2:30pm-5:30pm: Bryan Borer in SRC
Tuesday 9:30am-12:20pm: Alex Czarnick in SRC
Tuesday 2:00pm-5:00pm: Ryan Wallace in SRC
Tuesday 3:30pm-4:30pm: Sai Suman in SRC
Tuesday 3:30pm-4:30pm: Falkinburg in 203A in M&N
Wednesday 10:30am-11:30pm: Sai Suman in SRC
Wednesday 10:30am-1:20pm: Avinash Nooka in SRC
Wednesday 2:30pm-5:30pm: Bryan Borer in SRC
Thursday 9:30am-12:20pm: Alex Czarnick in SRC
Thursday 2:00pm-5:00pm: Ryan Wallace in SRC
Friday 10:30am-1:20pm: Avinash Nooka in SRC
Friday 2:30pm-5:30pm: Bryan Borer in SRC

Course Information

Tuesday Lab: 9:30-10:45am in Scott Engineering Center (SEC) 146
Tuesday Lecture: 2:00-3:15 pm in Avery 106
Thursday Lecture: 9:30-10:45am in Avery 19

For detailed information on this course please see the course syllabus in html or pdf format.

Course Description

Embedded Systems are everywhere. Every time you look at your watch, answer the phone, take a picture, or turn on the TV you are interacting with an embedded system. Embedded systems are also found in cars, airplanes, and robots. They far outnumber traditional computers (which also contain embedded processors) and learning to design and program embedded systems is a critical skill that is necessary for many industry and scientific jobs.

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.

Datasheets and other useful documents


See the course schedule below for reading assignments and the general topics covered in the course. Unless otherwise noted, assignments are due at the start of class on the due date.

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
*Note html versions of assignments may lack some formatting or pictures found in the pdf version.

Course Books

Marilyn Wolf, Computers as Components, Fourth Edition: Principles of Embedded Computing System Design, 4th ed. Morgan Kaufmann, 2016
Available in the book store or purchase online. Readings from this book are specified in the format Wx.x, where x.x indicates the chapter and subsection.

David Russell, Introduction to Embedded Systems, 2010.
Available for free download when on the UNL campus. Good reference for embedded C programming. Do not print out this book, it is less expensive to order a printed copy than to print it yourself. Readings from this book are specified in the format Rx.x, where x.x indicates the chapter and subsection. Note: this book is specifically designed for the Arduino platform, but there are some differences between the version of the Arduino used in the book and the version we are using in class. So be careful!

Edward Lee and Sanjit Seshia, Introduction to Embedded Systems, A Cyber-Physical Systems Approach, 2011.
Available for free download. Do not print out this book, it is less expensive to order a printed copy than to print it yourself. There are no specific readings from this book, but it is a good reference for those interested in exploring some subjects further.

Brian W. Kernighan and Dennis M. Ritchie, C Programming Language (2nd Edition), 1988. ISBN: 0131103628
Learn C The Hard Way, Zed Shaw
A wiki-style C "text book" alternative
Another online C text book
C Frequently Asked Questions from the days of Usenet
Suggested references for those with little prior C programming experience. There are no specific readings from these, but they are good references.

Course Schedule

Below is an approximate schedule of course topics. These are subject to change, assignments will be announced in class. Readings are recommended and will be added as the semester progresses, so make sure to check back often; however, the best resource for this course is attending class and taking good notes. The course is roughly broken into regular class lectures on Monday and Wednesday and then lab-style lectures on Fridays where a Labture is specified. Typically during labtures there will be a short topic-specific lecture followed by a hands-on, small group, in class lab assignment.

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)
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
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
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)