This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:timer:hardware_delay [2010/02/12 07:08] – toimetaja | et:examples:timer:hardware_delay [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | < |
| + | ====== | ||
| //Vajalikud teadmised: [HW] [[et: | //Vajalikud teadmised: [HW] [[et: | ||
| Line 15: | Line 16: | ||
| ===== Praktika ===== | ===== Praktika ===== | ||
| - | Allpool olev programmikood on taimeril põhinev viitefunktsioon, | + | Allpool olev programmikood on taimeril põhinev viitefunktsioon, |
| Tsüklis toimub loenduri algväärtustamine ja ületäitumise lipukese nullimine (sellesse 1 kirjutades). Seejärel oodatakse, kuni loendur loendab algväärtusest 256-ni, ehk ületäitumiseni. Ületäitumise hetkel läheb ületäitumise lipuke kõrgeks ja 1 ms viide ongi toimunud. Funktsiooni lõpus taimer peatatakse. | Tsüklis toimub loenduri algväärtustamine ja ületäitumise lipukese nullimine (sellesse 1 kirjutades). Seejärel oodatakse, kuni loendur loendab algväärtusest 256-ni, ehk ületäitumiseni. Ületäitumise hetkel läheb ületäitumise lipuke kõrgeks ja 1 ms viide ongi toimunud. Funktsiooni lõpus taimer peatatakse. | ||
| Line 21: | Line 22: | ||
| <code c> | <code c> | ||
| // | // | ||
| - | // Riistvaraline viide millisekundites | + | // Riistvaraline viide millisekundites |
| // | // | ||
| void hw_delay_ms(unsigned short count) | void hw_delay_ms(unsigned short count) | ||
| Line 54: | Line 55: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | Esitatud viite funktsioon kasutab aga taimerite teeki, mille lähtekood Atmega kontrollerile näeb välja järgmine: | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Taimer 0 taktijaguri valiku tüüp | ||
| + | // | ||
| + | typedef enum | ||
| + | { | ||
| + | TIMER0_NO_PRESCALE | ||
| + | TIMER0_PRESCALE_8 | ||
| + | TIMER0_PRESCALE_32 | ||
| + | TIMER0_PRESCALE_64 | ||
| + | TIMER0_PRESCALE_128 | ||
| + | TIMER0_PRESCALE_256 | ||
| + | TIMER0_PRESCALE_1024 | ||
| + | } | ||
| + | timer0_prescale; | ||
| + | |||
| + | // | ||
| + | // Taimer 0 normaalrežiimi seadistamine | ||
| + | // | ||
| + | inline void timer0_init_normal(timer0_prescale prescale) | ||
| + | { | ||
| + | TCCR0 = prescale & 0x07; | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Taimer 0 peatamine | ||
| + | // | ||
| + | inline void timer0_stop() | ||
| + | { | ||
| + | TCCR0 = 0x00; | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Taimer 0 loenduri väärtuse määramine | ||
| + | // | ||
| + | inline void timer0_set_value(unsigned char value) | ||
| + | { | ||
| + | TCNT0 = value; | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Taimer 0 ületäitumise lipukese nullimine | ||
| + | // | ||
| + | inline void timer0_overflow_flag_clear(void) | ||
| + | { | ||
| + | bit_set(TIFR, | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Taimer 0 ületäitumise lipukese oleku lugemine | ||
| + | // | ||
| + | inline bool timer0_overflow_flag_is_set(void) | ||
| + | { | ||
| + | return (bit_is_set(TIFR, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | < | ||
| Järgnevalt on toodud samasugune programm nagu tarkvaralise viite näiteski. Lühemal 100 ms poolperioodil LED süüdatakse, | Järgnevalt on toodud samasugune programm nagu tarkvaralise viite näiteski. Lühemal 100 ms poolperioodil LED süüdatakse, | ||
| Line 59: | Line 123: | ||
| <code c> | <code c> | ||
| // | // | ||
| - | // Kodulabori | + | // Kodulabori |
| // Programm vilgutab ~1 sekundi järel hetkeks LED-i. | // Programm vilgutab ~1 sekundi järel hetkeks LED-i. | ||
| // | // | ||