This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:examples:digi:timer [2009/03/25 06:45] – raivo.sell | en:examples:digi:timer [2010/02/04 12:28] (current) – removed mikk.leini | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Timer ====== | ||
| - | Timers are frequently used when programming controllers. They can be used in many | ||
| - | different ways, such as counting time within code or giving an interrupt when the | ||
| - | timer has counted up or down to a certain value. For example, the time between two | ||
| - | pulses from outside could be detected, or the timers could be used as counters, | ||
| - | counting pulses coming from a sensor. One common way of using a timer is as a realtime | ||
| - | clock. The task of the timer would then be to give an interrupt at a specific | ||
| - | interval. Every time an interrupt occurs, as part of the interrupt routine you could, for | ||
| - | example, sample the sensors. This way, you will always be sure of having the same | ||
| - | time between two samples from the same sensor. | ||
| - | ===== Blinking LED example ===== | ||
| - | |||
| - | |||
| - | <code c> | ||
| - | /* | ||
| - | Labor 2 example | ||
| - | |||
| - | Blincking LED using timer | ||
| - | Raivo Sell 2008 | ||
| - | |||
| - | LED = 0 (ON) LED = 1 (OFF) | ||
| - | PORT direction: 1-output 0-input | ||
| - | */ | ||
| - | |||
| - | #include < | ||
| - | #include < | ||
| - | #include < | ||
| - | |||
| - | static int i; //globale variable | ||
| - | int SAGEDUS = 10; // blincking frequency | ||
| - | |||
| - | #define INV(x) ^=(1<< | ||
| - | #define LED 4 // Blincking LED (in this example LED2 (yellow) | ||
| - | |||
| - | // Interrupt function - starts on timer buffer overrun | ||
| - | |||
| - | ISR (TIMER1_OVF_vect){ | ||
| - | i++; // increments every time when function is executed | ||
| - | if (i> | ||
| - | PORTC INV(LED); // Inverting LED | ||
| - | i=0; // repeater is set to zero | ||
| - | } | ||
| - | } | ||
| - | |||
| - | int main (void) { | ||
| - | // Timer control regiters | ||
| - | TCCR1A = 0x00; | ||
| - | TCCR1B = _BV(CS10); //clk/1 (No prescaling) | ||
| - | | ||
| - | DDRC = 0x38; // DDRC 0bXX111000 | ||
| - | PORTC = 0x3F; // PORTC 0bXX111111 | ||
| - | |||
| - | TIMSK = _BV (TOIE1); // Overrun interrupt is enabled | ||
| - | sei (); // Global interrupts are enabled | ||
| - | |||
| - | while(1); // endless loop | ||
| - | // No action here, LED is inverted through the interrupt function | ||
| - | } | ||
| - | </ | ||