*arg max *arg min
CSCE 236 Embedded Systems, Spring 2014
Lab 2 Pre-Assignment

Started: Wednesday, February 5, 2014
Due: Beginning of class Monday, February 10, 2014
Instructions: This pre-lab assignment is an individual assignment, collaboration is not allowed. If you discuss any problems with others, please note this on the assignment as described in the syllabus. Also note any materials outside of lecture notes, course textbooks, and datasheets that you used. Show your work and describe your reasoning to get partial credit if your solution is incorrect. This pre-lab is due on the date listed above before the start of class.

How much time did the total assignment take?

1  Detecting Button Bounces

In class, you saw how to use Timer1, configured with pin T1/PD5 as the button input to count the number of times the button was pressed. Download this code from the course website (in the assignments section next to pre-lab2). Examine this code and determine which pins the LEDs and button should be connected to. Connect everything and verify the functionality of the code by pressing the button and observing the counter output on the serial console.
As you saw in class, occasionally the counter incremented more than once for a single press due to the button "bouncing." Bouncing occurs when the button is being pressed and it rapidly oscillates between logical zero and one. In this section, you will look at two different ways to detect this.

1.1  Manual Delay

First, modify the code so that it only prints the value of the register TCNT1 when it changes. Be aware that TCNT1 may change at any point, so you should only read it once in each iteration of your main loop() to ensure that the value you are using is consistent.
One way to detect that the button bounced is if TCNT1 has increased by more than one since the last iteration. However, since the main loop runs very quick, you should add a delay in the main loop so that you only check it periodically, perhaps every 100 milliseconds.
Implement this approach and print a warning every time the button bounces. In addition to printing a warning, turn on the red LED for 500 milliseconds every time the button bounces.
Submit your code via handin (http://cse.unl.edu/~cse236/handin/) AND bring a printout of your code with your name on it to turn in at the start of class. Also remember to include the amount of time it took you to complete this assignment. In addition, please include a printout of the output of your programing showing an example where it bounced.

1.2  Checking Time

Using a manual delay is somewhat wasteful in that nothing else can occur during the delay. There is a preexisting Arduino sketch Examples->Digital->Debounce which implements debouncing by using the command millis() to record when the button was pressed and then to only check the state again after a fixed delay period. Look at this code to see how they implemented it and make sure you understands the code. Ask the instructors if you have questions on how it functions.

1.3  Datasheet on Timers

Read section 16.6 of the datasheet before lab.

File translated from TEX by TTH, version 3.89.
On 6 Feb 2014, 10:07.