Embedded Systems Prototyping

CPSC 4820/6820 — Fall 2015 — Clemson University

TTh, 11:00AM — 12:15PM (Lehotsky 268)

Josiah Hester
jhester at clemson dot edu
223 McAdams

Tuesday 12:30pm—1:30pm
Thursday 12:30pm—1:30pm
By appointment as needed.

Project deliverables, lecture notes, and recommended readings will be posted on the online course schedule, found at the following URL.


This site is a living document and I will be updating the content throughout the semester. Please check it regularly.

The goal of this course is give you the tools and skills necessary to start being a hardware hacker. Course topics will include...

This is not a course on how to program, but programming is required and you will likely be a stronger programmer, when you're done.

There are no required textbooks for this course. All readings will be distributed by me, or be available online. However, if you would like a book, this one is recommended:

Davies, J. H. MSP430 Microcontroller Basics. Oxford: Newnes, 2008 (Book Companion Site)

Proficient with C, familiar with the GNU tool chain (gcc, make, binutils, gcov) comfortable in a UNIX/Linux command-line environment. Previous embedded experience (with Arduino, etc) is helpful but not required.

Each student will be loaned a MSP430FR6989 Launchpad with LCD display and a nRF24L01+ Ultra low power 2.4GHz Transceiver. It is your responsibility to return both at the end of the year (you break it you buy it), grades will not be submitted until hardware is returned. If hardware is not returned, you will fail the course. If you need more hardware for your project (and you will) then you can borrow it from the Workshop. If the hardware you need is not available, then you will need to buy it; talk to me first so I can point you in the right direction, and possibly setup a group buy.

A requirement of the project is to make your own printed circuit board, assemble it, and test it. All PCB's will be ordered from OSH Park, a batch PCB supplier. The turn time is two weeks, but prices are very cheap. Be prepared to spend $5-$30 on your PCB supplies and parts.

We will be using Piazza to facilitate communication in this course. Throughout the course, all questions and comments that might be helpful to other students should be posted on Piazza. This allows myself and other students to answer questions (meaning questions get answered more quickly), and reduces the time I spend answering the same question multiple times (meaning more time to help you learn about operating systems). Posting helpful source-code tidbits for review by your peers is encouraged, as long as it is properly documented.

The piazza url for the course is https://piazza.com/clemson/fall2015/cpsc48206820/home. You will need to enroll yourself in the class.

You are encouraged to look for help online and from your peers to get things working. This could include example code, part libraries, firmware libraries, open source projects, forum code, gists, and scriptlets. If any of the above are used, be sure to cite where it came from, and acknowledge the contribution. If resources are not cited I will consider it plagiarism.

Know that embedded source code is notoriously context sensitive, very dense, and almost never works out-of-the-box; copy-pasting code found online or borrowed from a friend without careful consideration of exactly what it does will lead to enormous frustration. Check twice before using someone elses code.

Here are some of my favorite resources for your perusal:

I will use Git for sharing source code examples with you throughout the semester. We will also use Git for collaborative programming projects; additionally your entire project needs to be tracked with Git, on Buffet. Version control systems are a useful tool and a fact of life for nearly all software developers. If you haven't used Git before, the Internet is full of tutorials. Here's the one provided by Github.

The Git repository for the course is at the following url: (anonymous@buffet.cs.clemson.edu:jhester/cpsc4820_6820-public)

Readings and other exploration activities will be assigned for most class meetings. I expect readings to be completed before class meetings.

This is a project driven course. You will go from a ridiculous idea to a tested, all-in-one, demo-able product in one semester. Projects will all have a custom printed circuit board with associated firmware designed and tested by you.

Your project could be a flame throwing BattleBot, a 3D LED lighting platform, a pet feeder combination ball thrower, a professor tracking peep cannon, a coded knock sensor, a analog synthesizer, or anything you think you can get done in a semester (I will help you figure that out).

All projects will be demoed at the end of the semester, the faculty, staff, and students in the school of computing will be invited. There will likely be a prize for the most well received project. Specific project requirements will be defined in a separate document given out later in the semester.

There will be several deliverables for the project given during the semester. They must be submitted electronically (via handin.cs.clemson.edu) by midnight on the due date. The final project report will be handed in after your demo. I don't accept late work, period. The project will be challenging. Start early, test thoroughly, and ask questions early in order to avoid last-minute crises.

Deliverables will be graded by me; each deliverable will have it's own rubric which will be distributed well before the due date. You should start early on these Deliverables, work incrementally, and test thoroughly in order to avoid painful surprises.

10% — Project Idea Approval
10% — System Design Document
13% — Schematic in EAGLE
12% — Layout in EAGLE
10% — Functional Demo, Assembly
20% — Final Report
20% — Final Demo
5%   — Participation

A - 90 — 100
B - 80 — 89.9999…
C - 70 — 79.9999…
D - 60 — 69.9999…
F - below 60

A key component of this class is based on assembling and testing of your custom devices. Much of this requires special tools (Multimeters, Oscilloscope, Reflow Oven, Power supplies). We will have a dedicated workshop place (location TBD) where these tools will live for your supervised use. We will generally spend one of the class periods in the workshop together where I will instruct on how to use certain tools, and general best practices and safety.

"Workshop hours" are my equivalent of "Office Hours." This is an opportunity to get hardware hacking help either one-on-one or in small groups. During this time you can get help debugging, designing and laying out circuit boards, finding the right parts, or learning how to use a tool. During the listed hours, you can find me in the workshop. If you are unable to attend during the posted time slots, I might be able to make an appointment.

Participation accounts for 5% of your grade. This part of your grade will be determined by whether or not you show up to workshop hours, how actively you participate (ask questions, make comments, contribute to activities) during class, and by how involved you are in answering other students' questions on Piazza. You should do these things anyway, since these activities help you better learn the material.

Class attendance is critical in this course. Lectures build on preceding lectures, and missing even a single class can make it difficult to keep up with the course material. Those who miss class miss important material and/or quizzes.

Being absent, excused or not, does not change the responsibility for assigned work or material covered during the class. Excused absences require documentation. For University-sponsored events, students must provide written notice prior to the event. For all other excused absences, students should provide written documentation to the instructor as soon as possible.

Bring a laptop to class. We will regularly do in-class coding and other exercises, for which a laptop will be helpful. Roll will also be taken electronically. Some students also find it helpful to follow along in class on their laptops as I demonstrate small programs and programming techniques in class. We will use a custom VM I will distribute as the reference computing environment for the course. Running this VM on your laptop is strongly recommended.

Additionally, you are expected to follow the following rules, both as a courtesy to your classmates, to yourself, and to me:

I do occasionally make mistakes. Any grade challenges must be emailed to the instructor, with detailed justifications, within one week of the date the grades are available.

Email is the best way to contact me for individual issues (use Piazza for generally-relevant communication). During normal working hours (9-5) on weekdays I check email frequently and I will make every effort to respond quickly (hopefully the same day). I do check email on weekends and evenings, but not nearly as frequently. So, you should expect longer delays.

Also, it's worth remembering that failure to plan and prepare on your part, does not constitute a crisis on mine. Project-related emails sent right before deadlines may not be answered in time to be helpful.

In accordance with the University's policy, I will do my best to provide reasonable accommodations to students with disabilities. Students should contact Student Disability Services and myself to discuss their individual needs for accommodation as early as possible—at least a week before special accommodations are needed.

Aug 25: Last day to register or add a class
Sep 1: Last day to drop a class without a W grade
Oct 27: Last day to drop a class without final grades

If you need help during this course, speak to your instructor or TA sooner rather than later; often a brief discussion will clarify things enough to get you back on track. The longer you wait, the harder it will be to catch up.

If you are consistently having problems with the course content, you can also seek help from the Academic Success Center and take advantage of the tutoring and supplemental instruction opportunities they offer on a regular basis. If your specific class is not listed, the ASC will begin sessions for groups of three or more. The tutoring schedule is available at the following link.

As members of the Clemson University community, we have inherited Thomas Green Clemson's vision of this institution as a "high seminary of learning." Fundamental to this vision is a mutual commitment to truthfulness, honor, and responsibility, without which we cannot earn the trust and respect of others. Furthermore, we recognize that academic dishonesty detracts from the value of a Clemson degree. Therefore, we shall not tolerate lying, cheating, or stealing in any form.

In accordance with the Clemson University Code of Student Conduct, academic dishonesty of any kind will be reported to the Clemson University Academic Integrity Committee. In the event that the committee reaches a finding of guilt, the student(s) involved in the misconduct will receive an automatic F for the semester. I will also recommend, at the board's discretion, that the participating students be dismissed from the university. I take this policy very seriously. The University's statement on academic integrity is here. The Clemson Computer Science Department Academic Honesty Policy can be found here.

Clemson University is committed to a policy of equal opportunity for all persons and does not discriminate on the basis of race, color, religion, sex, sexual orientation, gender, pregnancy, national origin, age, disability, veteran's status, genetic information or protected activity (e.g., opposition to prohibited discrimination or participation in any complaint process, etc.) in employment, educational programs and activities, admissions and financial aid. This includes a prohibition against sexual harassment and sexual violence as mandated by Title IX of the Education Amendments of 1972. This policy is located at http://www.clemson.edu/campus- life/campus-services/access/title-ix/. Mr. Jerry Knighton is the Clemson University Title IX Coordinator. He also is the Director of Access and Equity. His office is located at 111 Holtzendorff Hall, 864.656.3181 (voice) or 864.565.0899 (TDD).