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:examples:timer:delay [2014/10/07 10:21] raivo.sellet:examples:timer:delay [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~ 
 ====== Viide ====== ====== Viide ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [AVR] [[et:avr:architecture]], [AVR] [[et:avr:timers]],\\ [LIB] [[et:software:homelab:library:pin]], [LIB] [[et:software:homelab:library:delay]], [LIB] [[et:software:homelab:library:timer]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:controller]],  
 +[AVR] [[et:avr:timers]], 
 +[LIB] [[et:software:homelab:library:pin]], [LIB] [[et:software:homelab:library:delay]], [LIB] [[et:software:homelab:library:timer]]//
  
 ===== Teooria ===== ===== Teooria =====
Line 61: Line 63:
  while (count-- > 0)  while (count-- > 0)
  {  {
- // 1ms viide spetsiaalse funktsiooniga+ // 1 ms viide spetsiaalse funktsiooniga
  _delay_ms(1);  _delay_ms(1);
  }  }
Line 70: Line 72:
  
 <code c> <code c>
-// Kodulabori tarkvaralise viite demonstratsioonprogramm. +// Kodulabori tarkvaralise viite näidisprogramm 
-// Programm vilgutab ~1 sekundi järel hetkeks LED-i.+// Programm vilgutab ~1 sekundi järel hetkeks LED-i
 #include <homelab/pin.h> #include <homelab/pin.h>
 #include <homelab/delay.h> #include <homelab/delay.h>
Line 78: Line 80:
 int main(void) int main(void)
 { {
 + // LED-i viigu väljundiks seadmine
 + pin_setup_output(led_debug);
  
  // Lõputu tsükkel   // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  // LED-i süütamine  // LED-i süütamine
Line 88: Line 92:
  sw_delay_ms(100);  sw_delay_ms(100);
    
- // LED kustutamine+ // LED-i kustutamine
  pin_set(led_debug);  pin_set(led_debug);
  
Line 100: Line 104:
  
  
-Järgnev programmikood on taimeril põhinev ehk riistvaraline viitefunktsioon, mida on natuke lihtsustatud. Loendamise põhimõte on sama, mis tarkvaralise viite funktsioonilgi - tekitatakse soovitud arv 1 ms pikkuseid viiteid. Viite tekitamiseks on kasutusel 8-bitine loendur 0. Eelnevalt on juba välja arvutatud, et 14,7456 Mhz taktsageduse puhul peab loenduri taktsignaal olema vähemalt 64-ga jagatud, et 1 ms jooksul 8-bitine loendur üle ei täituks. See, mis väärtust loendur omama peab, et ületäitumine toimuks 1 ms järel, on esitatud avaldise kujul ja omistatud muutujale //timer_start//. //F_CPU// on makro-keele konstant, mis näitab taktsagedust hertsides. Nimetatud taktsageduse puhul peaks loenduri väärtus 25,6 olema, kuid kuna murdarve kasutada ei saa, siis loenduri algväärtuseks saab 26. Siin tekib paraku ka viga viite ajas, kuid see on üsna väike (-1,7 μs).+Järgnev programmikood on taimeril põhinev ehk riistvaraline viitefunktsioon, mida on natuke lihtsustatud. Loendamise põhimõte on sama, mis tarkvaralise viite funktsioonilgi - tekitatakse soovitud arv 1 ms pikkuseid viiteid. Viite tekitamiseks on kasutusel 8-bitine loendur 0. Eelnevalt on juba välja arvutatud, et 14,7456 MHz taktsageduse puhul peab loenduri taktsignaal olema vähemalt 64-ga jagatud, et 1 ms jooksul 8-bitine loendur üle ei täituks. See, mis väärtust loendur omama peab, et ületäitumine toimuks 1 ms järel, on esitatud avaldise kujul ja omistatud muutujale //timer_start//. //F_CPU// on makro-keele konstant, mis näitab taktsagedust hertsides. Nimetatud taktsageduse puhul peaks loenduri väärtus 25,6 olema, kuid kuna murdarve kasutada ei saa, siis loenduri algväärtuseks saab 26. Siin tekib paraku ka viga viite ajas, kuid see on üsna väike (-1,7 μs).
  
 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.
  
 <code c> <code c>
-// Riistvaraline viide millisekundites Atmega kontrolleril+// Riistvaraline viide millisekundites ATmega kontrolleril
 void hw_delay_ms(unsigned short count) void hw_delay_ms(unsigned short count)
 {  {
Line 138: Line 142:
 </code> </code>
  
-Esitatud viite funktsioon kasutab aga taimerite teeki, mille lähtekood Atmega kontrollerile näeb välja järgmine:+Esitatud viite funktsioon kasutab aga taimerite teeki, mille lähtekood ATmega kontrollerile näeb välja järgmine:
  
 <code c> <code c>
Line 196: Line 200:
 int main(void) int main(void)
 { {
 + // LED-i viigu väljundiks seadmine
 + pin_setup_output(led_debug);
  
  // Lõputu tsükkel   // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  // LED-i süütamine  // LED-i süütamine
et/examples/timer/delay.1412677314.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