<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:bib="http://bibtexml.sf.net/" xmlns:m="http://www.w3.org/1998/Math/MathML" id="Module.2004-05-27.0538">
	<name>4.4 - Lab 4: Timers and Interrupts</name>
	<metadata>
  <md:version>1.2</md:version>
  <md:created>2006/06/06 17:24:11 GMT-5</md:created>
  <md:revised>2006/06/07 11:20:17.700 GMT-5</md:revised>
  <md:authorlist>
      <md:author id="nanand">
      <md:firstname>Naren</md:firstname>
      
      <md:surname>Anand</md:surname>
      <md:email>nanand@rice.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="nanand">
      <md:firstname>Naren</md:firstname>
      
      <md:surname>Anand</md:surname>
      <md:email>nanand@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>ez430</md:keyword>
    <md:keyword>timers</md:keyword>
  </md:keywordlist>

  <md:abstract>In this lab, we will cover various timing options for the ez430 and their implementation with interrupts.</md:abstract>
</metadata>
	<content>
		<para id="p1a">In this lab, we will cover the timing options for the ez430.  The first part explains the clocking system of the processor and the options it allows while the second part covers the timers and timer interrupts available on the ez430.  Each of these sections is strongly related to real time programming, but that topic will be dealt with separately in another lab. In general, a real-time application is one which responds to its inputs as fast as they happen.  The microprocessor is generally expected to take less time to handle an interrupt or stimulus than the time before the next event will happen.  The timer system is broken into two primary parts on the ez430 Timer A and the Watchdog timer. 
      </para>
		
			
			
			<exercise id="exercise5.1">
        <problem><name>Timer A</name>
					<para id="p4a">Refer to <term>Chapter 8: Timer_A</term> User's Guide to get a detailed description of all the options in Timer A.  Basically, setting up the timers requires that you define a source for the timer and to specify a direction for the count.  It may also be helpful to clear the timer register before you begin to guarantee and accurate count from the first instance.  Set up Timer A in Continuous Mode and sourced from SMCLK.  Set TACCR0 and TACCR1 to have two different values.  Output TA0 and TA1 from Pins 3 and 4 (off of P1.1 and P1.2) of the board so that you may directly observe the output of Timer A.  </para>
          <para id="p1">Using two different channels of the Oscilloscope try to recreate parts of <term>Figure 8-13. Output Example- Timer in Continuous Mode</term>.  On Channel 1 show <term>Output Mode 4: Toggle</term> and on Channel 2 show <term>Output Mode 6: Toggle/Set</term>.  Vary the TACCTLx in order to get as close to the orginal figure as possible.  Take a screenshot of the scope and include it in your lab report.
          </para>
          



          </problem>
			</exercise>
		
		
			<exercise id="e2">
      <problem><name>Timer</name>
			<para id="p6">Set up the timers to fire interrupts to calculate time intervals and redo the SOS problem from <cnxn document="m13625">Lab 1</cnxn> using the timer to simulate the "dot" and "dash" time intervals.  There should be <emphasis>NO COUNTING LOOPS</emphasis> in your program, and your program should be entirely interrupt driven.  It is possible to have each Capture Control Register to fire an interrupt once it reaches its max value.  Explain how you setup Timer A to simulate each time interval.  </para>
        </problem>
        </exercise>
			<exercise id="exercise5_3"><problem>
<name>Duty Cycle</name>

<para id="p8">We have discussed earlier that the Duty Cycle is related to the width of a pulse.  If we trigger an LED with a relatively high frequency square wave, it will appear to be lit constantly even though it is actually switching on and off quickly.  As we vary the duty cycle of our trigger signal, the LED may appear to get dimmer or brighter depending on which way we vary it.
          </para>
					<para id="p9">Set up the timer to toggle the LED.  Without changing the frequency of your timing pulse, change the duty cycle so that the LED appears to fade in and out.  The time it takes to go from completely off to max brightness shouldn't take more than a second, then it should repeat.  Once again, there should be no counting loops in your program, and you can use Timer A in any way you wish.  
          </para>
          <para id="p10">Once you get a single light to fade in and out, create another program with a function to set the LED at a certian brightness level when given atleast a 12 bit integer.  For example, if I were to call <code>LED_level(0x111)</code>, the LED should appear very dim; if I were to call <code>LED_level(0xFA0)</code>, the LED should appear very bright.  It may be helpful to have an extra function that initializes the Timer settings so that the use of this application is self contained.  In the future, we will use this function to provide visual feedback when using other components.  
          </para>
				</problem>
			</exercise>
		
	</content>
</document>
