The ‘delay’ function as used in the workshops is limited because it depends on approximate timing based on how long the processor takes to execute the ‘NOP’ instruction, and the limitations of the size of an integer means that the maximum delay will be approximately 65 seconds. Furthermore, the processor cannot do anything else while the delay is going on, and any interrupts run during the ‘delay’ will cause the delay to be longer than intended. The Atmel ATmega168 does provide the facility to maintain more accurate and longer timings through the use of the crystal oscillator and the timer/counter circuitry in the processor. Your task is to work out how to use these components so that programs can be written to accurately trigger events after an amount of time, specified in minutes and seconds. The system should be able to handle delays from a minimum of 1 second up to at least 60 minutes after ‘set’. The function should allow for the timer interval to be set (input) in minutes and seconds. Note: Assume the processor is setup as in the lab sessions (including crystal oscillator used with the frequency specified in Nerdkit Guide).
Your solution should include the following: 1. Overall description of the principles of operation of your solution 2. Description of all timer/counters, registers, and interrupts used and their function 3. Details of all configuration information to get the processor to perform this function (e.g. what needs to be written to different configuration registers, including explanations on WHY particular bits are set or cleared) 4. Description of the overall algorithm(s) to implement the function Note: This can be in the form of pseudocode. Code fragments (lines of code) can be used to demonstrate where appropriate. Note: You do NOT have to write the whole program for this assignment.