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 [2015/02/26 12:07] raivo.sellet:examples:digi:switch [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-~~PB~~+<pagebreak>
 ====== Lüliti ====== ====== Lüliti ======
  
 //Vajalikud teadmised:  //Vajalikud teadmised: 
 [HW] [[et:hardware:homelab:digi]],  [HW] [[et:hardware:homelab:digi]], 
-[AVR] [[et:avr:io]], +[AVR] [[et:avr:io]],\\
 [LIB] [[et:software:homelab:library:pin]],  [LIB] [[et:software:homelab:library:pin]], 
-[PRT] [[et:examples:digi:led]]//+[PRT] [[et:examples:digi:led]] //
  
 ===== Teooria ===== ===== Teooria =====
Line 47: Line 47:
  
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
- // nupule S1 vastab roheline LED,+ // Nupule S1 vastab roheline LED,
  // mis süttib nupu alla vajutades  // mis süttib nupu alla vajutades
  if(pin_get_value(S1) == 1)  if(pin_get_value(S1) == 1)
Line 76: Line 76:
 ===== Praktika ===== ===== Praktika =====
  
-Kodulabori Kasutajaliidese mooduli plaadil on kolm surunupp-lülitit. Lülitid ühendavad mikrkontrolleri viike maaga, kuid mitte otse, vaid läbi takisti – seda põhjusel, et juhuslikul mikrokontrolleri viikude väljundiks määramisel neid nupuvajutusel ei lühistataks. Lülititel on ka //pull-up// takistid, kuid need on palju suurema takistusega kui kaitsetakistid, nii et nupu allavajutamisel jääb vastavale mikrokontrolleri viigule ikkagi 0 V lähedane pinge.+Kodulabori Kasutajaliidese mooduli plaadil on kolm surunupp-lülitit. Lülitid ühendavad mikrokontrolleri viike maaga, kuid mitte otse, vaid läbi takisti – seda põhjusel, et juhuslikul mikrokontrolleri viikude väljundiks määramisel neid nupuvajutusel ei lühistataks. Lülititel on ka //pull-up// takistid, kuid need on palju suurema takistusega kui kaitsetakistid, nii et nupu allavajutamisel jääb vastavale mikrokontrolleri viigule ikkagi 0 V lähedane pinge.
    
 Lülitite asukohad on toodud riistvarakirjelduses. Lülitite oleku lugemiseks tuleb mikrokontrolleri vastavad viigud määrata sisendiks. AVR siseseid //pull-up// takisteid ei pea tööle rakendama, sest, nagu öeldud, viikudel juba on välised takistid. Kui nupp alla vajutada, on viigule vastaval siinil biti väärtus 0, kui nupp lahti lasta, siis väärtus 1. Selleks et näha, kas mikrokontroller sai nupuvajutusest aru, võib kasutada plaadil olevaid LED indikaatoreid. Lülitite asukohad on toodud riistvarakirjelduses. Lülitite oleku lugemiseks tuleb mikrokontrolleri vastavad viigud määrata sisendiks. AVR siseseid //pull-up// takisteid ei pea tööle rakendama, sest, nagu öeldud, viikudel juba on välised takistid. Kui nupp alla vajutada, on viigule vastaval siinil biti väärtus 0, kui nupp lahti lasta, siis väärtus 1. Selleks et näha, kas mikrokontroller sai nupuvajutusest aru, võib kasutada plaadil olevaid LED indikaatoreid.
Line 123: Line 123:
 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.  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. 
  
-Järgnev näide illustreerib nuppude kasutamist ja mitmekordse loenduse ellimineerimist kasutades tühja tsüklit, mille korral oodatakse nuppu vabastamist.+Järgnev näide illustreerib nuppude kasutamist ja mitmekordse loenduse elimineerimist kasutades tühja tsüklit, mille korral oodatakse nuppu vabastamist.
 <code c> <code c>
 // Kodulabori nuppude kontaktide põrkumise filtreerimise näidisprogramm // Kodulabori nuppude kontaktide põrkumise filtreerimise näidisprogramm
Line 137: Line 137:
  pin_setup_output(led_yellow);  pin_setup_output(led_yellow);
  pin_setup_output(led_green);  pin_setup_output(led_green);
 +
  // Nupu viigu sisendiks seadmine  // Nupu viigu sisendiks seadmine
  pin_setup_input(S1);  pin_setup_input(S1);
  
- // Lõputu stükkel + // Lõputu tsükkel 
- while(1)+ while (1)
  {  {
- // Kontrollime, kas nupp on alla vajutatud+ // Nupu alla vajutamise kontroll
  if(button_read(S1))  if(button_read(S1))
  {  {
- // Loenduri väärtusele vastava LEDi süütamine+ // Loenduri väärtusele vastava LED-i süütamine
  if(counter == 0) led_on(led_green);  if(counter == 0) led_on(led_green);
- else led_off(led_green);+ else led_off(led_green);
  if(counter == 1) led_on(led_yellow);  if(counter == 1) led_on(led_yellow);
- else led_off(led_yellow);+ else led_off(led_yellow);
  if(counter == 2) led_on(led_red);  if(counter == 2) led_on(led_red);
- else led_off(led_red);+ else led_off(led_red);
   
  // Loenduri suurendamine ja mooduli 3 võtmine  // Loenduri suurendamine ja mooduli 3 võtmine
  counter = (counter + 1) % 3;  counter = (counter + 1) % 3;
   
- // Ootame nupu lahtilaskmist tühjas tsüklis+ // Nupu vabastamise ootamine tühjas tsüklis
  while(button_read(S1) != 0);  while(button_read(S1) != 0);
  }  }
Line 175: Line 176:
  
 <code c> <code c>
-// Kodulabori nuppude testimise näidisprogramm.+// Kodulabori nuppude testimise näidisprogramm
 #include <homelab/pin.h> #include <homelab/pin.h>
  
Line 185: Line 186:
  pin_setup_output(led_yellow);  pin_setup_output(led_yellow);
  pin_setup_output(led_green);  pin_setup_output(led_green);
 +
  // Nuppude viikude sisendiks seadmine  // Nuppude viikude sisendiks seadmine
  pin_setup_input(S1);  pin_setup_input(S1);
Line 191: Line 193:
   
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  // Igale nupule vastab üks LED,  // Igale nupule vastab üks LED,
- // mis süttib nuppu alla vajutades+ // mis süttib nupu alla vajutades
  if(button_read(S1)) led_on(led_green);  if(button_read(S1)) led_on(led_green);
- else led_off(led_green);+ else led_off(led_green);
  if(button_read(S2)) led_on(led_yellow);  if(button_read(S2)) led_on(led_yellow);
- else led_off(led_yellow);+ else led_off(led_yellow);
  if(button_read(S3)) led_on(led_red);  if(button_read(S3)) led_on(led_red);
- else led_off(led_red);+ else led_off(led_red);
  }  }
 } }
 </code> </code>
et/examples/digi/switch.1424952476.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