Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:avr:timers [2015/02/19 16:40] raivo.sellet:avr:timers [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 23: Line 23:
 } }
  
-int main() {+int main(void) {
  // Et esimene ületäitumise katkestus tekiks 10 ms pärast,  // Et esimene ületäitumise katkestus tekiks 10 ms pärast,
  // tuleb ka siinkohal loendur algväärtustada  // tuleb ka siinkohal loendur algväärtustada
  TCNT0 = 178;  TCNT0 = 178;
- 
  // Sagedusjaguri teguriks 1024  // Sagedusjaguri teguriks 1024
  TCCR0 = 0x07;  TCCR0 = 0x07;
- 
  // Loenduri täitumise katkestuse lubamine  // Loenduri täitumise katkestuse lubamine
  TIMSK |= (1 << TOIE0);  TIMSK |= (1 << TOIE0);
Line 54: Line 52:
  
 <box 100% round #EEEEEE|Näide> <box 100% round #EEEEEE|Näide>
- 
 Vaja on 8 MHz taktsagedusel töötava ATmega128-ga mõõta välise 122 Hz - 100 kHz loogilise nelinurksignaali sagedust 1 Hz täpsusega. Programm on tehtud 16-bitise loendur 1 sündmuste püüdjaga. Vaja on 8 MHz taktsagedusel töötava ATmega128-ga mõõta välise 122 Hz - 100 kHz loogilise nelinurksignaali sagedust 1 Hz täpsusega. Programm on tehtud 16-bitise loendur 1 sündmuste püüdjaga.
  
Line 85: Line 82:
 } }
  
-int main() {+int main(void) {
  // Tõusva frondi registreerimine, sagedusjaguri tegur 1  // Tõusva frondi registreerimine, sagedusjaguri tegur 1
  TCCR1B = (1 << ICES1) | (1 << CS10);  TCCR1B = (1 << ICES1) | (1 << CS10);
Line 101: Line 98:
  
 Programmis tekib välise signaali tõusva frondi ajal sündmuse katkestus. Katkestuse jooksul kontrollitakse, ega loenduri ületäitumine pole toimunud - see saab juhtuda, kui signaali sagedus on alla 122 Hz (8 MHz / 2<sup>16</sup>), ja sel juhul ei kajasta loenduri väärtus reaalset perioodi. Sagedus arvutatakse 32-bitiste arvudega pöördväärtusena perioodist. Esimese asjana aga nullitakse loendur, sest taimer töötab samal taktil mis protsessor ja iga instruktsiooni täitmine, mis toimub pärast välist sündmust, lühendab mõõdetavat perioodi ning sellest tulenevalt rikub ka mõõtetulemust. Maksimaalsele mõõdetavale sagedusele seab piiri katkestuse programmiosa tööaeg. Programmis tekib välise signaali tõusva frondi ajal sündmuse katkestus. Katkestuse jooksul kontrollitakse, ega loenduri ületäitumine pole toimunud - see saab juhtuda, kui signaali sagedus on alla 122 Hz (8 MHz / 2<sup>16</sup>), ja sel juhul ei kajasta loenduri väärtus reaalset perioodi. Sagedus arvutatakse 32-bitiste arvudega pöördväärtusena perioodist. Esimese asjana aga nullitakse loendur, sest taimer töötab samal taktil mis protsessor ja iga instruktsiooni täitmine, mis toimub pärast välist sündmust, lühendab mõõdetavat perioodi ning sellest tulenevalt rikub ka mõõtetulemust. Maksimaalsele mõõdetavale sagedusele seab piiri katkestuse programmiosa tööaeg.
- 
 </box> </box>
  
Line 112: Line 108:
 Mõnedel signaali genereerimise režiimidel on määratav ka loenduri suurim väärtus - loenduri füüsiline suurus jääb küll samaks, kuid mängus on võrdlusregister, mille väärtust ületades loendur nullitakse. Seda võimalust kasutades saab eespool toodud ülesandeid täpse ajalise katkestuse tekitamise kohta lahendada, kuid mõeldud on see pigem signaali perioodi muutmiseks. Lisaks sellele on võimalik loendurit seadistada režiimi, kus see toimib nii juurde- kui mahalugemisel. Mõnedel signaali genereerimise režiimidel on määratav ka loenduri suurim väärtus - loenduri füüsiline suurus jääb küll samaks, kuid mängus on võrdlusregister, mille väärtust ületades loendur nullitakse. Seda võimalust kasutades saab eespool toodud ülesandeid täpse ajalise katkestuse tekitamise kohta lahendada, kuid mõeldud on see pigem signaali perioodi muutmiseks. Lisaks sellele on võimalik loendurit seadistada režiimi, kus see toimib nii juurde- kui mahalugemisel.
  
-Loendurid ja nende abil genereeritavate signaalide režiimid on ühed keerulisemad perifeeriamoodulid AVR-il. Kõigist neist kirjutamine läheks pikaks ja enamasti pole nende kasutamisel kõike detailselt teada. Seetõttu on järgnevalt kirjeldatud vaid üht levinuimat PWM signaali robootikas. Ülejäänut saab juba AVR dokumentatsioonist järgi uurida.+Loendurid ja nende abil genereeritavate signaalide režiimid on ühed keerulisemad perifeeriamoodulid AVR-il. Kõigist neist kirjutamine läheks pikaks ja enamasti pole nende kasutamisel vaja kõike detailselt teada. Seetõttu on järgnevalt kirjeldatud vaid üht levinuimat PWM signaali robootikas. Ülejäänut saab juba AVR dokumentatsioonist järgi uurida.
  
 ==== Pulsilaius-modulatsioon ==== ==== Pulsilaius-modulatsioon ====
Line 125: Line 121:
 #include <avr/io.h> #include <avr/io.h>
  
-int main() {+int main(void) {
  // Viigud väljundiks  // Viigud väljundiks
  DDRB |= (1 << PIN5) | (1 << PIN6);  DDRB |= (1 << PIN5) | (1 << PIN6);
et/avr/timers.1424364026.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0