This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:examples:digi:led [2014/09/16 09:48] – rellermaa | et:examples:digi:led [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | < | ||
====== Valgusdiood ====== | ====== Valgusdiood ====== | ||
//Vajalikud teadmised: | //Vajalikud teadmised: | ||
- | [HW][[et: | + | [HW][[et: |
- | [ELC][[et: | + | [ELC][[et: |
+ | [AVR][[et: | ||
[LIB][[et: | [LIB][[et: | ||
Line 14: | Line 16: | ||
[{{ : | [{{ : | ||
- | Päripingestamisel rakendatakse LED-i anoodile positiivne ja katoodile negatiivne pinge. LED-i päripinge sõltub selle värvusest – pikema lainepikkusega LED-ide (punased) puhul on see ~2V, lühema lainepikkusega (sinised) on see ~3V. Tavaliselt on LED-ide võimsus mõnikümmend millivatti, sellest tulenevalt peab ka vool samas suurusjärgus olema. Suurema pinge või voolu rakendamisel LED-ile on oht see lihtsalt läbi põletada. | + | Päripingestamisel rakendatakse LED-i anoodile positiivne ja katoodile negatiivne pinge. LED-i päripinge sõltub selle värvusest – pikema lainepikkusega LED-ide (punased) puhul on see ~2 V, lühema lainepikkusega (sinised) on see ~3 V. Tavaliselt on LED-ide võimsus mõnikümmend millivatti, sellest tulenevalt peab ka vool samas suurusjärgus olema. Suurema pinge või voolu rakendamisel LED-ile on oht see lihtsalt läbi põletada. Kui LED-e kasutatakse spetsiaalselt valgustamiseks, |
- | Kui LED-e kasutatakse spetsiaalselt valgustamiseks, | + | [{{ : |
- | + | ||
- | [{{ : | + | |
LED-e toodetakse mitmesugustes kestades. Kõige levinumatel „jalgadega“ LED-idel on 3 mm või 5 mm läbimõõduga ümmargune kest ja 2 pikka metallist viiku. Pikem viik tähistab anoodi, lühem katoodi. Pindliides kestas (SMD) LED-idel on polaarsuse tähistamiseks põhja all T-kujuline tähis, kus T katus tähistab anoodi ja teravik katoodi asukohta. | LED-e toodetakse mitmesugustes kestades. Kõige levinumatel „jalgadega“ LED-idel on 3 mm või 5 mm läbimõõduga ümmargune kest ja 2 pikka metallist viiku. Pikem viik tähistab anoodi, lühem katoodi. Pindliides kestas (SMD) LED-idel on polaarsuse tähistamiseks põhja all T-kujuline tähis, kus T katus tähistab anoodi ja teravik katoodi asukohta. | ||
Line 24: | Line 24: | ||
===== Praktika ===== | ===== Praktika ===== | ||
- | Kodulabori | + | Kodulabori |
- | + | ||
- | Peaaegu kõik Kodulabori praktilised näited, kaasa arvatud LED-i süütamise näide, kasutavad Kodulabori viikude teeki. Viikude teegis on andmetüüp //pin//, mis sisaldab viiguga seotud registrite aadresse ja viigu bitimaski. Kui programmi tekitada // | + | |
<code c> | <code c> | ||
- | // | + | // Kodulabori Kontrollermooduli LED-i testimise |
- | // Kodulabori Kontrollermooduli LED-i testimise | + | // mis põhineb |
- | // Põhineb | + | |
- | // | + | |
#include < | #include < | ||
- | // LED-i viiguga seotud parameetrite määramine muutujale | + | // LED-i viigu defineerimine |
- | pin debug_led | + | pin led_debug |
// Põhiprogramm | // Põhiprogramm | ||
Line 42: | Line 38: | ||
{ | { | ||
// LED-i viigu väljundiks seadmine | // LED-i viigu väljundiks seadmine | ||
- | pin_setup_output(debug_led); | + | pin_setup_output(led_debug); |
// LED-i süütamine | // LED-i süütamine | ||
- | pin_clear(debug_led); | + | pin_clear(led_debug); |
} | } | ||
</ | </ | ||
<code c> | <code c> | ||
- | // | + | // Kodulabori |
- | // Kodulabori Kontrollermooduli LED-i testimise | + | // mis põhineb registritel |
- | // Põhineb otsesel registrite muutmisel. | + | |
- | // | + | |
#include < | #include < | ||
Line 71: | Line 65: | ||
Mis siis on viikude teegi ja registrite kasutamise vahe? Vahe on kasutusmugavuses - teegiga on see lihtsam, sest ei pea registrite nimesid ja nende toimet teadma. Kõige olulisem teegi eelis on aga kohandatavus. Registreid kasutades tuleb viigu muutmiseks kogu programmis registrite nimed ja bitimaskid ümber muuta, teegi puhul tuleb seda teha vaid programmi alguses, kus viigu muutuja algväärtustatakse. Otsesel registrite kasutamisel on üks näiline eelis - viigu kasutamine on vahetu ja see ei toimu läbi programmimälu ja aeganõudvate funktsioonide. Tegelikult on aga uuemad AVR-GCC kompilaatori versioonid niivõrd taibukad, et teisendavad teegi funktsioonid täpselt sama vahetuks registrite manipuleerimise käskudeks, nagu oleks seda otse programmis tehtud. Täpsustuseks tuleb öelda, et kompilaatori teisendusoskus kehtib ainult konstantsete // | Mis siis on viikude teegi ja registrite kasutamise vahe? Vahe on kasutusmugavuses - teegiga on see lihtsam, sest ei pea registrite nimesid ja nende toimet teadma. Kõige olulisem teegi eelis on aga kohandatavus. Registreid kasutades tuleb viigu muutmiseks kogu programmis registrite nimed ja bitimaskid ümber muuta, teegi puhul tuleb seda teha vaid programmi alguses, kus viigu muutuja algväärtustatakse. Otsesel registrite kasutamisel on üks näiline eelis - viigu kasutamine on vahetu ja see ei toimu läbi programmimälu ja aeganõudvate funktsioonide. Tegelikult on aga uuemad AVR-GCC kompilaatori versioonid niivõrd taibukad, et teisendavad teegi funktsioonid täpselt sama vahetuks registrite manipuleerimise käskudeks, nagu oleks seda otse programmis tehtud. Täpsustuseks tuleb öelda, et kompilaatori teisendusoskus kehtib ainult konstantsete // | ||
- | Järgnevalt on osaliselt toodud viikude teegi lähtekood, mille eesmärk on selgitada teegis toimuvat. Paraku ei pruugi see algajale päris arusaadav olla kuna kasutusel on C-keele viidad (inglise keeles // | + | Järgnevalt on osaliselt toodud viikude teegi lähtekood, mille eesmärk on selgitada teegis toimuvat. Paraku ei pruugi see algajale päris arusaadav olla kuna kasutusel on C-keele viidad (inglise keeles // |
<code c> | <code c> | ||
+ | // Viikude defineerimine pin struktuuris | ||
+ | // pin nimi = PIN(PORDI TÄHT, VIIGU NUMBER PORDIS); | ||
+ | pin led_green = PIN(H,5); | ||
+ | |||
// Viigu seadmine väljundiks | // Viigu seadmine väljundiks | ||
- | inline void pin_setup_output(pin pin) | + | inline void pin_setup_output(pin pin) { |
- | { | + | |
bitmask_set(*pin.ddr, | bitmask_set(*pin.ddr, | ||
} | } | ||
// Viigu seadmine kõrgeks | // Viigu seadmine kõrgeks | ||
- | inline void pin_set(pin pin) | + | inline void pin_set(pin pin) { |
- | { | + | |
bitmask_set(*pin.port, | bitmask_set(*pin.port, | ||
} | } | ||
// Viigu seadmine madalaks | // Viigu seadmine madalaks | ||
- | inline void pin_clear(pin pin) | + | inline void pin_clear(pin pin) { |
- | { | + | |
bitmask_clear(*pin.port, | bitmask_clear(*pin.port, | ||
} | } | ||
</ | </ | ||
- | Peale Kontrollermooduli asuvad LED-id ka Kasutajaliidese | + | Peale Kontrollermooduli asuvad LED-id ka Kasutajaliidese |
+ | Järgnevas tabelis on näha teegis kirjeldatud LED-ide konstandid ja vastavad Kontrollermooduli viigud. Roheline, kollane ja punane LED asuvad Kasutajaliidese moodulil. | ||
+ | ^Konstandi nimi^Alternatiivne nimi ^ Kodulabor I & II viik^Kodulabor III viik^Kirjeldus^ | ||
+ | |led_debug|LED0|PB7|PQ2 |Kontrollermoodulil olev test LED| | ||
+ | |led_green|LED1|PC3|PH5| roheline LED| | ||
+ | |led_yellow|LED2|PC4|PH4| kollane LED| | ||
+ | |led_red|LED3|PC5|PH3| punane LED| | ||
+ | |||
+ | Kodulabori | ||
<code c> | <code c> | ||
- | // | + | // Kodulabori Kasutajaliidese mooduli LED-ide testimise |
- | // Kodulabori Kasutajaliidese mooduli | + | |
- | // LED-ide testimise | + | |
- | // | + | |
#include < | #include < | ||
Line 110: | Line 110: | ||
pin_setup_output(led_green); | pin_setup_output(led_green); | ||
- | // Punase ja rohelise LED-i põlema panek | + | // Punase ja rohelise LED-i süütamine |
led_on(led_red); | led_on(led_red); | ||
led_on(led_green); | led_on(led_green); | ||
- | |||
// Kollase LED-i kustutamine | // Kollase LED-i kustutamine | ||
led_off(led_yellow); | led_off(led_yellow); | ||
} | } | ||
</ | </ |