CSCE 236: Embedded Systems
Spring 2015


Dr. Carrick Detweiler
Computer Science and Engineering
220 Schorr Center
carrick _at_
Office Hours:
Wednesday 11:00-12:00, schedule online, and by appointment.

Teaching Assistant

Graduate TA: Zhe Zhang
Undergraduate TA: Dylan Fromm
Undergraduate TA: Christain Laney
Undergraduate TA: Jake Thiem

Office Hours:
Monday 9:30am-10:30am; Zhe in SRC
Monday 2:00pm-3:00pm; Jake in 223 Schorr
Tuesday 9:30am-10:30am; Christian in 223 Schorr
Tuesday 2:00pm-3:00pm; Dylan in 223 Schorr
Wednesday 2:00pm-3:00pm; Jake in 223 Schorr
Wednesday 4:00pm-5:00pm Zhe in 223 Schorr
Thursday 9:30am-10:30am; Christian in 223 Schorr

Course Information

Lecture: Tuesday and Thursday 8:00-9:15am in Avery 110

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 14th, 5pm
HW 0 (pdf) Start of class, Tuesday, Jan 20
HW 1 (pdf,code) Start of class, Tuesday, Jan 27
HW 2 (pdf) Start of class, Thursday, Feb 5
Lab 1 (pdf,html*) Thursday, Jan 29
HW 3 (pdf,code) Start of class, Tuesday, Feb 17
Pre-Lab 2 (pdf,html*,code) Start of class, Thursday, Feb 12
Lab 2 (pdf,html*) Thursday, Feb 12
Lab 3 (pdf,html*,manual delay,pwm) Thursday, Feb 19
Test1 from prior years: 2012, 2013, 2014 For review
HW 4 (pdf,code) Start of class, Thursday, March 12
Lab 4 (pdf,html*) Thursday, March 5
Project 1 (pdf) Checkpoint, Thursday, March 12 (in class)
Competition, Thursday, March 19 (Schorr 2nd floor, 8:00-10:00)
Written report, Thursday, April 2 start of class
Project 1 Results (top 10)
HW 5 (pdf) Start of class, Thursday, April 16
Lab 5 (pdf,html*,blink irq)
VCNL4000 Ranger Info:
Sparkfun, Datasheet, Application Note, Sample Code
Thursday, April 9
Project 2 (pdf) Checkpoint Wall Following: Thursday, April 16 in class
Checkpoint Obstacle Avoidance: Thurs, April 23 in class
Competition: Tuesday and Thursday, April 28 + 30 in class
Written Report, Video, and Survey: Friday, May 2nd by noon
Lab 6 (pdf,html*) Thursday, April 16
Test2 from prior years: 2012, 2013, 2014 For review
For assignments that require electronic code submission, you can do so at:
*Note html versions of assignments may lack some formatting or pictures found in the pdf version.

Course Books

W. Wolf, Computers as Components, Second Edition: Principles of Embedded Computing System Design, 2nd ed. Morgan Kaufmann, 2008.
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 (thanks to Dr. Bourke for some of these 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 Labture Reading
Week 1, Jan 12 course intro, c programming R2.1, R2.2, R2.4
Week 2, Jan 19 (NO CLASS Monday) embedded system design, arduino intro, basic circuit diagrams R2.5, R2.6, R2.7, R2.8, W1.1, W1.2
Week 3, Jan 26 instruction sets, registers and mem access, digital I/O Arduinos W2.1, W2.2, R6.*
Week 4, Feb 2 timers, debugging W3.1, R7.*
Week 5, Feb 9 debugging, pulse width modulation (PWM) timers and I/O R4.*
Week 6, Feb 16 PWM and analog to digital converters (A2D) PWM and servos
Week 7, Feb 23 review test 1(tentative) R8.*
Week 8, March 2 CPU bus, communication protocols (UART, SPI, RS485) A2D W4.1, R10.1 to R10.1.3
Week 9, March 9 interrupts
Week 10, March 16 project 1 competition W3.1.4, W3.2, R9.*
Week 11, March 30 I2C, peripherals, sensors interrupts, communication R10.1.2
Week 12, April 6 Embedded Operating Systems i2c W6.1, W6.2, W6.3
Week 13, April 13 embedded systems applications, review project checkpoints
Week 14, April 20 power management, embedded algorithms, program optimization test 2(tentative) W5.5, W5.6, W5.7
Week 15, April 27 final project competition final project competition