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/10 21:22] – peetersalong | 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 5: | Line 6: | ||
| ===== Teooria ===== | ===== Teooria ===== | ||
| - | Tarkvaraline viide pole ainus meetod pausi tekitamiseks. Sama asja saab teha ka taimeriga. Taimer on riistvaraline kindla sagedusega suurenev või vähenev loendur. Loenduri taktsignaali saab enamasti tekitada mikrokontrolleri töötaktist või mingist välisest taktist. Taktsignaali sagedust saab üldjuhul ka läbi jagada, et väiksem | + | Tarkvaraline viide pole ainus meetod pausi tekitamiseks. Sama asja saab teha ka taimeriga. Taimer on riistvaraline kindla sagedusega suurenev või vähenev loendur. Loenduri taktsignaali saab enamasti tekitada mikrokontrolleri töötaktist või mingist välisest taktist. Taktsignaali sagedust saab üldjuhul ka mingi teguriga |
| [{{ : | [{{ : | ||
| 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. | ||
| // | // | ||