This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:examples:digi:switch [2014/10/08 07:32] – heikopikner | et:examples:digi:switch [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | < | ||
====== Lüliti ====== | ====== Lüliti ====== | ||
- | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
+ | [HW] [[et: | ||
+ | [AVR] [[et: | ||
+ | [LIB] [[et: | ||
+ | [PRT] [[et: | ||
===== Teooria ===== | ===== Teooria ===== | ||
Line 18: | Line 23: | ||
|{{: | |{{: | ||
| {{: | | {{: | ||
+ | |||
+ | Lüliti kasutamiseks andurina mikrokontrolleri juures ühendatakse lüliti üks kontakt mikrokontrolleri viiguga, mis määratakse programmis sisendiks. Kui toimub kontakti ühendamine maa- või toitepotentsiaaliga, | ||
[{{ : | [{{ : | ||
- | |||
[{{ : | [{{ : | ||
- | |||
- | Lüliti kasutamiseks andurina mikrokontrolleri juures ühendatakse lüliti üks kontakt mikrokontrolleri viiguga, mis määratakse programmis sisendiks. Kui toimub kontakti ühendamine maa- või toitepotentsiaaliga, | ||
Häired teevadki lülitite kasutamise keerukamaks. Üks peamine meetod määramata olekute vältimiseks on mikrokontrolleri sisend ühendada läbi takisti kas maa- või toitepotentsiaaliga. Sellises funktsioonis olevat takistit nimetatakse inglise keeles kas // | Häired teevadki lülitite kasutamise keerukamaks. Üks peamine meetod määramata olekute vältimiseks on mikrokontrolleri sisend ühendada läbi takisti kas maa- või toitepotentsiaaliga. Sellises funktsioonis olevat takistit nimetatakse inglise keeles kas // | ||
Line 43: | Line 47: | ||
// Lõputu tsükkel | // Lõputu tsükkel | ||
- | while (true) | + | while (1) |
{ | { | ||
- | // nupule | + | // Nupule |
// 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 72: | Line 76: | ||
===== Praktika ===== | ===== Praktika ===== | ||
- | Kodulabori Kasutajaliidese mooduli plaadil on kolm surunupp-lülitit. Lülitid ühendavad | + | Kodulabori Kasutajaliidese mooduli plaadil on kolm surunupp-lülitit. Lülitid ühendavad |
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 119: | Line 123: | ||
See funktsioon kasutab viite tekitamise funktsiooni, | See funktsioon kasutab viite tekitamise funktsiooni, | ||
- | Järgnev näide illustreerib nuppude kasutamist ja mitmekordse loenduse | + | Järgnev näide illustreerib nuppude kasutamist ja mitmekordse loenduse |
<code c> | <code c> | ||
- | // Kodulabori | + | // Kodulabori nuppude kontaktide põrkumise filtreerimise näidisprogramm |
- | // nuppude kontaktide põrkumise filtreerimise näidisprogramm | + | |
#include < | #include < | ||
Line 134: | 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 | + | // Lõputu |
- | while(1) | + | while (1) |
{ | { | ||
- | // Kontrollime, | + | // Nupu alla vajutamise kontroll |
if(button_read(S1)) | if(button_read(S1)) | ||
{ | { | ||
- | // Loenduri väärtusele vastava | + | // Loenduri väärtusele vastava |
if(counter == 0) led_on(led_green); | if(counter == 0) led_on(led_green); | ||
else led_off(led_green); | else led_off(led_green); | ||
Line 154: | Line 158: | ||
counter = (counter + 1) % 3; | counter = (counter + 1) % 3; | ||
- | // Ootame nupu lahtilaskmist | + | // Nupu vabastamise ootamine |
while(button_read(S1) != 0); | while(button_read(S1) != 0); | ||
} | } | ||
Line 161: | Line 165: | ||
</ | </ | ||
- | Kui nüüd programmi proovida, siis LED-id süttivad täpselt sellises järjekorras nagu kasutaja nupplülitit vajutab. | + | Kui nüüd programmi proovida, siis LED-id süttivad täpselt sellises järjekorras nagu kasutaja nupplülitit vajutab. Nuppude kasutamise näidiskood põhineb Kodulabori viikude teegil, mida on tutvustatud valgusdioodi näites. |
- | + | ||
- | Nuppude kasutamise näidiskood põhineb Kodulabori viikude teegil, mida on tutvustatud valgusdioodi näites. | + | |
Tabelis on näha teegis kirjeldatud nuppude konstandid ja vastavad Kontrollermooduli viigud. | Tabelis on näha teegis kirjeldatud nuppude konstandid ja vastavad Kontrollermooduli viigud. | ||
Line 169: | Line 171: | ||
|S0|PC2|PQ2|Kontrollermoodulil olev testnupp| | |S0|PC2|PQ2|Kontrollermoodulil olev testnupp| | ||
|S1|PC0|PH2|Kasutajaliidese moodulil olev alumine nupp| | |S1|PC0|PH2|Kasutajaliidese moodulil olev alumine nupp| | ||
- | |S2|PC1|PH1|Kasutajaliidese moodulil olev keskmine nupp| | + | |S2|PC1|PH1|Kasutajaliidese\ moodulil\ olev\ keskmine\ nupp| |
|S3|PC2|PH0|Kasutajaliidese moodulil olev ülemine nupp| | |S3|PC2|PH0|Kasutajaliidese moodulil olev ülemine nupp| | ||
<code c> | <code c> | ||
- | // Kodulabori | + | // Kodulabori nuppude testimise |
- | // nuppude testimise | + | |
#include < | #include < | ||
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 | + | // mis süttib |
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); |