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:digi:switch_debounce [2010/02/08 12:11] – Links to et:software:library:pin changed to et:software:homelab:library:pin mikk.leiniet:examples:digi:switch_debounce [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Lüliti väreluse filtreerimine ======+====== Lüliti põrkumise filtreerimine ======
  
 //Vajalikud teadmised: [HW] [[et:hardware:homelab:digi]], [AVR] [[et:avr:io]], [LIB] [[et:software:homelab:library:pin]],  [LIB] [[et:software:homelab:library:delay]], [PRT] [[et:examples:digi:switch]]// //Vajalikud teadmised: [HW] [[et:hardware:homelab:digi]], [AVR] [[et:avr:io]], [LIB] [[et:software:homelab:library:pin]],  [LIB] [[et:software:homelab:library:delay]], [PRT] [[et:examples:digi:switch]]//
Line 7: Line 7:
 [{{  :examples:digi:switch:switch_bounce.png?200|Lüliti kontaktide põrkumine}}] [{{  :examples:digi:switch:switch_bounce.png?200|Lüliti kontaktide põrkumine}}]
  
-Nii nagu lüliteid tutvustavas peatükis öeldud, eksisteerib mehhaaniliste lülititega kontaktide põrkumise probleem, mida siin materjalis on nimetatud väreluseks. Kuna kontaktid on tehtud metallist, millel on teatav elastsus, siis kontaktide ühendamise või lahti-ühendamise hetkel need põrkuvad ning tulemusena tekib hulga väärlülitusi. Lülituste arv ja kestus sõltub lülitist, kuid enamasti jääb see mõne millisekundi piiresse. Kui lülitit kasutatakse mõne elektriseadme töölelülitamiseks, siis pole see suur probleem, kuid kui lüliti on kasutusel seadme juhtimiseks, võib mitmekordne vajutamine kahjulik olla.+Nii nagu lüliteid tutvustavas peatükis öeldud, eksisteerib mehhaaniliste lülititega kontaktide põrkumise probleem. Kuna kontaktid on tehtud metallist, millel on teatav elastsus, siis kontaktide ühendamise või lahti-ühendamise hetkel need põrkuvad ning tulemusena tekib hulga väärlülitusi. Lülituste arv ja kestus sõltub lülitist, kuid enamasti jääb see mõne millisekundi piiresse. Kui lülitit kasutatakse mõne elektriseadme käivitamiseks, siis pole see suur probleem, kuid kui lüliti on kasutusel seadme juhtimiseks, võib mitmekordne lülitumine probleemiks olla.
  
 [{{  :examples:digi:switch:switch_input_rc_filter.png?200|Lüliti RC-filter}}] [{{  :examples:digi:switch:switch_input_rc_filter.png?200|Lüliti RC-filter}}]
  
-Põhiline sädelust välistav meetod on filtreerimine. Filtreerida saab nii elektriliselt kui ka tarkvaraliselt. Elektriliseks filtreerimiseks tuleb lüliti järgi lisada madalpääsfilter – näiteks RC filter - mis silub pingemuutusi ja sellest tulenevalt mikrokontrolleri viik ei omanda hetkelisi väärtusi. Tarkvaraline filtreerimine toimub põhimõttel, et viigu, kuhu lüliti on ühendatud, väärtust loetakse mitmel korral ja kui kõikidel kordadel on viigu väärtus sama, siis sellest järeldatakse, et lüliti omab kindlat asendit ning tegu pole värelusega. Igasugusel filtreerimisel peab aga arvestama viitega, mis tekib oleku kindlaksmääramisega.+Põhiline kontaktide põrkumisest tekkinud väärlülitusi välistav meetod on filtreerimine. Filtreerida saab nii elektriliselt kui ka tarkvaraliselt. Elektriliseks filtreerimiseks tuleb lüliti ühendada läbi madalpääsu filtri – näiteks RC filter - mis silub pingemuutusi ja sellest tulenevalt ei omanda mikrokontrolleri viik hetkelisi väärtusi. Tarkvaraline filtreerimine toimub põhimõttel, et viigu, kuhu lüliti on ühendatud, väärtust loetakse mitmel korral ja kui kõikidel kordadel on viigu väärtus sama, siis sellest järeldatakse, et lüliti omab kindlat asendit ning tegu pole põrkumisega. Igasugusel filtreerimisel peab aga arvestama viitega, mis tekib oleku määratlemisel.
    
 ===== Praktika ===== ===== Praktika =====
Line 20: Line 20:
 // //
 // Kodulabori digitaalse sisend-väljundmooduli // Kodulabori digitaalse sisend-väljundmooduli
-// nuppude põrkumise demonstreerimise programm.+// nuppude kontaktide põrkumise demonstreerimise programm.
 // //
 #include <homelab/pin.h> #include <homelab/pin.h>
Line 29: Line 29:
 pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) }; pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) };
 pin button  = PIN(C, 0); pin button  = PIN(C, 0);
 +
 +
 +
  
 // //
Line 73: Line 76:
 </code> </code>
  
-Tarkvaraliseks filtreerimiseks on mitmeid meetodeid. Seda võib teha lihtsalt ja keeruliselt, mõlemal juhul oma eeliste ja puudustega. Kui programm on selline, et nupuvajutusi oodatakse harva, võib pärast nupu allavajutamise registreerimist lisada pika pausi, mis välistab reageerimise põrkumisest tekkinud lisalülitustele. Samas tuleb sellise lahenduse puhul arvestada, et kui kasutaja hoiab nuppu pikalt all, reageerib programm ka nupu lahtilaskmisel tekkinud väärlülitustele.+Tarkvaraliseks filtreerimiseks on mitmeid meetodeid. Seda võib teha lihtsalt ja keeruliselt, mõlemal variandil on oma eelised ja puudused. Kui programm on selline, et nupuvajutusi oodatakse harva, võib pärast nupu allavajutamise registreerimist lisada pika pausi, mis välistab reageerimise põrkumisest tekkinud lisalülitustele. Samas tuleb sellise lahenduse puhul arvestada, et kui kasutaja hoiab nuppu pikalt all, reageerib programm ka nupu lahtilaskmisel tekkinud väärlülitustele. 
 + 
 +<pagebreak>
  
 Töökindlam on programm, mis kontrollib nupu olekut teatud aja jooksul mitu korda (mida rohkem ja mida pikema aja jooksul, seda kindlam). Järgnevalt on toodud Digitaalse sisend-väljundmooduli nupu filtreeritud väärtuse lugemise funktsioon: Töökindlam on programm, mis kontrollib nupu olekut teatud aja jooksul mitu korda (mida rohkem ja mida pikema aja jooksul, seda kindlam). Järgnevalt on toodud Digitaalse sisend-väljundmooduli nupu filtreeritud väärtuse lugemise funktsioon:
Line 110: Line 115:
  
  // Paus 1 millisekund  // Paus 1 millisekund
- // See funktsioon sisaldub kodulabori teegis+ // See funktsioon sisaldub Kodulabori teegis
  sw_delay_ms(1);  sw_delay_ms(1);
  }  }
Line 120: Line 125:
 </code> </code>
  
-See funktsioon kasutab viite tekitamise funktsiooni, millest räägib lähemalt vastav harjutusülesanne. Siinkohal pole viite funktsiooni kohta vaja suurt midagi teada peale selle, et see tekitab 1-millisekundilise viite iga nupu oleku lugemise tsükli lõpus. Kui nupp on kaheksal lugemise korral samas asendis, tagastab see loetud asendi. Kogu protseduur võib nupu ebastabiilsuse korral kesta kuni 100 ms. Funktsioon sisaldub juba viikude teegis, nii et näite läbimiseks ei pea seda oma programmi lisama. Selle proovimiseks tuleb ülesande esimest poolt natukese muuta – kaasata programmi viite tekitamise teek ja kohas, kus nupu väärtust otse loeti, kasutada filtriga funktsiooni. Tulemus on järgmine:+See funktsioon kasutab viite tekitamise funktsiooni, millest räägib lähemalt vastav harjutusülesanne. Siinkohal pole viite funktsiooni kohta vaja suurt midagi teada peale selle, et see tekitab 1-millisekundilise viite iga nupu oleku lugemise tsükli lõpus. Kui nupp on kaheksa lugemise korral samas asendis, tagastab see loetud asendi. Kogu protseduur võib nupu ebastabiilsuse korral kesta kuni 100 ms. Funktsioon sisaldub juba viikude teegis, nii et näite läbimiseks ei pea seda oma programmi lisama. Selle proovimiseks tuleb ülesande esimest poolt natukese muuta – kaasata programmi viite tekitamise teek ja kohas, kus nupu väärtust otse loeti, kasutada filtriga funktsiooni. Tulemus on järgmine: 
 + 
 +<pagebreak>
  
 <code c> <code c>
 // //
 // Kodulabori digitaalse sisend-väljundmooduli // Kodulabori digitaalse sisend-väljundmooduli
-// nuppude põrkumise filtreerimise programm.+// nuppude kontaktide põrkumise filtreerimise programm.
 // //
 #include <homelab/delay.h> #include <homelab/delay.h>
et/examples/digi/switch_debounce.1265631086.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