This is an old revision of the document!


Table of Contents

Valgusdiood

Teooria

5 mm jalgadega valgusdiood

Valgusdiood on pooljuht, mille päripingestamisel kiirgab see valgust. Valgusdioodi nimetatakse inglise keelse lühendiga LED (light-emitting diode). On olemas erineva värvusega valgusdioode ja valgusdioodide kombinatsioone, millega saab tekitada ka valget valgust. Valgusdioodil on nagu tavalisel dioodilgi kaks kontakti - anood ja katood. Valgusdioodi joonistel on anood tähistatud + ja katood - sümboliga.

Valgusdioodi skemaatiline tähis ja polaarsus

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.

Kui LED-e kasutatakse spetsiaalselt valgustamiseks, on mõistlik kasutada spetsiifilisi elektriskeeme nendele täpselt õige pinge ja voolu tekitamiseks. Tihti kasutatakse LED-e aga indikaatoritena ja neid toidetakse otse mikrokontrolleri viikudelt. Kuna mikrokontrollerite toitepinge on enamasti kõrgem LED-ide päripingest ja ka voolutugevus on suurem, siis tuleb LED-iga järjestikku lisada takisti, mis piirab voolu ja tekitab vajaliku pingelangu. Takisti arvutusvalemid leiab elektroonika peatükist.

Jalgadega ja pindliides valgusdioodi viikude tähistus

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.

Praktika

Kodulabori Kontrollermooduli plaadil on üksik punane LED, mille anood on läbi takisti ühendatud +5 V toitega ja katood ATmega128 viiguga PB7. Selleks et Kontrollermooduli LED-i põlema süüdata ja kustutada, tuleb PB7 viik väljundiks defineerida ning seda vastavalt madalaks ja kõrgeks seada. Ehk siis viigu kõrges olekus LED ei põle ja madalas põleb. Põhimõtteliselt võib LED-e ka teistmoodi ühendada, nii et anood on mikrokontrolleri viiguga ja katood maaga ühendatud (kusagil vahel peab ka takisti olema) – sellisel juhul viigu kõrges olekus LED põleb ja madalas olekus ei põle.

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 pin-tüüpi muutuja ja see kohe programmi alguses makrofunktsiooniga PIN algväärtustada, saab selle muutuja abil viiku kogu programmi ulatuses vabalt kasutada, ilma et peaks oskama registreid kasutada. Järgnevalt on toodud 2 näiteprogrammi, mis teevad täpselt sama asja, kuid üks neist on kirjutatud Kodulabori teegi baasil, teine mitte.

//
// Kodulabori Kontrollermooduli LED-i testimise programm.
// Põhineb Kodulabori teegil.
//
#include <homelab/pin.h>
 
// LED-i viiguga seotud parameetrite määramine muutujale
pin debug_led = PIN(B, 7);
 
// Põhiprogramm
int main(void)
{
	// LED-i viigu väljundiks seadmine
	pin_setup_output(debug_led);
 
	// LED-i süütamine
	pin_clear(debug_led);	
}
//
// Kodulabori Kontrollermooduli LED-i testimise programm.
// Põhineb otsesel registrite muutmisel.
//
#include <avr/io.h>
 
// Põhiprogramm
int main(void)
{	
	// LED-i viigu väljundiks seadmine
	DDRB |= (1 << 7);	
 
	// LED-i süütamine
	PORTB &= ~(1 << 7);
}

Esimene näide kasutab viikude teeki (pin.h fail). Esmalt luuakse programmis pin-tüüpi debug_led-nimeline muutuja, mis hoiab infot LED viigu kohta. Põhiprogrammis toimub selle viigu väljundiks seadmine läbi funktsiooni pin_setup_output ja seejärel selle viigu madalaks määramine funktsiooniga pin_clear, mille tulemusena LED süttib. Teises näites muutujaid ei kasutata, LED-i väljundiks määramine ja süütamine toimub viigu siini B suuna- ja väljundregistrite väärtuste muutmise teel. AVR-iga rohkem kursis olev lugeja märkab kindlasti, et tegelikult pole vaja anda LED-i põlema paneku käsku kummaski näites, kuna vaikimisi on AVR väljundite väärtus nagunii 0, kuid seda on siinkohal tehtud korrektsuse pärast.

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 pin-tüüpi üksikmuutujate kohta, mitte töö ajal muutuvate muutujate ja massiivide kohta.

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 pointer), millest selle raamatu C-keele õpetuses kirjutatud pole. Viitade kohta kohta leiab huviline palju infomaterjali internetist ja programmeerimise õpikutest.

// Viigu seadmine väljundiks
inline void pin_setup_output(pin pin)
{
	bitmask_set(*pin.ddr, pin.mask);
}
 
// Viigu seadmine kõrgeks
inline void pin_set(pin pin)
{
	bitmask_set(*pin.port, pin.mask);
}
 
// Viigu seadmine madalaks
inline void pin_clear(pin pin)
{
	bitmask_clear(*pin.port, pin.mask);
}

Peale Kontrollermooduli asuvad LED-id ka Kasutajaliidese mooduli plaadil. Need on elektriliselt ühendatud samamoodi nagu Kontrollermooduli LED ehk katood on ühenduses AVR viiguga. Täpsemalt vaata vastava mooduli riistvarakirjeldusest. Lisaks pin_set ja pin_clear käskudele võib LEDide tüürimiseks kasutada ka käske led_on ja led_off. Kodulabori teegi põhine näidisprogramm näeb välja järgmine:

//
// Kodulabori Kasutajaliidese mooduli
// LED-ide testimise programm.
//
#include <homelab/pin.h>
 
// Põhiprogramm
int main(void)
{
	// LED-ide viikude väljundiks seadmine
	pin_setup_output(led_red);
	pin_setup_output(led_yellow);
	pin_setup_output(led_green);	
 
	// Punase ja rohelise LED-i põlema panek
	led_on(led_red);
	led_on(led_green);
 
	// Kollase LED-i kustutamine
	led_off(led_yellow);
}
et/examples/digi/led.1410860910.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