Hlavní navigace

Hrátky s LED a tlačítky pod Linuxem

V dnešním pokračování seriálu o Linuxu s páječkou v ruce začneme prvním praktickým zapojením. Použijeme paralelní port a jeho 5 vstupů a 12 výstupů. Zapojení je poměrně jednoduché - vezmeme 12 LED a přes odpory 1k2 je připojíme na výstupy paralelního portu proti zemi.

Tweetni to Odměnte autora  Jak to funguje?

LEDky nebudou moc svítit kvůli velkým odporům (lepší by byly cca 330 ohm), ale nechceme příliš zatěžovat výstupy paralelního portu. Kdo má hotový oddělovač portu, může osadit odpory 330 ohm.

Schéma

Na schématu je rovnou zakreslena i druhá – vstupní – část s tlačítky. Tu není nutné mít pro správnou funkci výstupu – části se nijak neovlivňují.

Foto LED

Úvod do LED

LEDky doporučuji předem vyzkoušet (s odporem!) na 5V zdroji (s 1k2 klidně i na 12V zdroji). V případě použití šuplíkových zásob tím lze předejít velmi dlouhému debuggingu. Také se tak snadno dozvíme, která noha LEDky má jít na zem a která na port. LEDka má, stejně jako každá dioda, anodu a katodu. Voltampérová charakteristika diody je v závěrném směru (katoda na +) těsně pod napěťovou osou (téměř žádný proud) až do okamžiku průrazu (12V zatím všechny LEDky, co jsem měl, v závěrném směru snesly, ale je lépe se kouknout do katalogu, je-li). V propustném směru (anoda na +) je to exponenciela. Průsečíku její tečny v nekonečnu s osou napětí se říká prahové napětí. To je napětí, při kterém začíná LEDkou protékat nějaký rozumný (použitelný) proud. Toto napětí je pro LEDky svítící ve viditelném oboru 1.8V (červená) – 3.5V (modrá). To je důvod, proč zelená LED nesvítí na dvě NiCd baterie, ale červená ano. Bílá LED neexistuje, jedná se zpravidla o UV LED s luminoforem, jako je v zářivce. Charakteristiku a mnohem víc o diodách naleznete na Wikipedii.

Nové (nepoužité) LEDky mají zpravidla delší vývod, který vede na anodu (+) a ty, které jsou kulaté, mají pouzdro seříznuté u katody (-). Při pohledu do LED (má-li průhledné pouzdro) je vidět, že jeden vývod je uvnitř větší a je v něm malý krystalek a z druhého vede na vršek toho krystalku drátek. Krystalek je katoda. Pozor na testování multimetrem – nemusí být úspěšné. Běžné multimetry mají diodový test do 2V, což ukáže nějakou hodnotu pro IR LED a pro většinu červených LED. Pro ostatní LEDky už napětí nestačí a měřák se tváří, jakoby byla LEDka přerušená (spálená).

Další informace o LEDkách opět na Wikipedii.

Supersvítivé LEDky je také možno zkoušet poněkud neobvyklým způsobem na autobaterii, nebo jiném přibližně 12V zdroji. LEDku vezmeme za jeden vývod rukou, přiložíme druhým na baterií a druhý pól baterie připojíme prstem (klidně druhé ruky). V krystalu supersvítivé LED uvidíme poměrně jasné světélko ve správné barvě. Pokud ne, prohodíme polaritu LED (nebo baterie). 12V stejnosměrných je podle normy bezpečné napětí i ve zvláště nebezpečném prostředí (po kolena ve vodě, apod.), takže postup je zcela bezpečný, ale neprovádějte ho s baterií připojenou na nabíječku, nebo jiný zdroj (pokud nemáte naprostou jistotu, že je dostatečně galvanicky oddělen od sítě).

Bezpečné napětí je taková pomocná berlička (je stanovené normou) protože to, co zabíjí, je proud. Jenomže proudu si každý spotřebič vezme podle svého odporu a nebezpečný proud dokáže dodat do zkratu snad i baterka do digitálek. To, co lze ovlivnit, je napětí a tak se definuje podle bezpečnosti prostoru a průběhu (stejnosměrné / střídavé). Viz Elektrika.cz Pro práci s počítači stačí vědět, že 12V střídavých a 25V stejnosměrných jsou bezpečná napětí za jakýchkoliv okolností (kdo si někdy zkusil olíznout vývody 9V baterie, ví, že bezpečný nemusí znamenat příjemný).

Ovládání výstupu

Výstupy lze ovládat jednoduchým programem par_out. Použijte svou adresu portu (uvedená 0×378 je nejčastější), zpravidla se uvádějí v hexa, takže si nesmažte prefix 0×.

Zde je zdrojový kód par_out.c:

#include "parport.h"
#include <stdio.h"
#include <unistd.h>

#define PARPORT 0x378

int
main(int argc, char *argv[])
{
        int value;
        if(argc<=1)
                return 1;

        init_parport(PARPORT);

        if( sscanf(argv[1],"%i",&value) == 1){

                value&=0x0FFF; //get last 12 bits
                value^=0x0b00; //invert some bits
                //printf("%d\n",value);
                parport_write(value&0xFF);
                //printf("v1:%d\n",value&0xFF);
                parport_write2((value&0x0F00)>>8);
                done_parport();
                return 0;
        }else{
                done_parport();
                return 1;
        }

}

Ke stažení: par_out.c, parport.h a Makefile

Program přijímá jedno číslo jako parametr, omezí ho na 12 bitů, zneguje 9., 10., 11. bit a pošle ho na port. Některé výstupy portu jsou v hw negované, proto je tento program neguje zpět. Tedy „1“ znamená svítící LED a „0“ zhasnutou.

Pak není problém napsat v Bashi třeba jezdící světlo:

for a in `seq 1 10`; do
        for b in 1 2 4 8 16 32 64 128 256 512 1024 2048; do
                par_out "$b"
        done
done

Pokud to nefunguje korektně (hlavně nejvyšší 4 bity), je třeba vyzabíjet všechny tiskové daemony, kteří se s námi perou o ten port.

Další zajímavá aplikace jsou binární hodiny:

while true; do
        par_out "$(date '+%H*128+%M'|bc)"
        sleep 1;
done

K něčemu by šla využít i sedmá LEDka. Mohla by třeba blikat, aby bylo na první pohled vidět, jestli počítač stále žije a zároveň tím oddělí hodiny a minuty:

blik=0
while true; do
        if [ $blik = 0 ]; then
                export blik=64
        else
                export blik=0
        fi
        par_out "$(date '+%H*128+%M'|sed
"s/$/+$blik/"|bc)"
        sleep 1;
done

Ovládání vstupu

Další program naopak čte vstupy a vypisuje přečtené číslo na stdout. Číslo je posunuté o 3 bity doprava (nejnižší tři čtené bity nejsou spojeny s žádným hardware) a bity, které jsou hardwarově negované, jsou negované zpět.

Tlačítka
Tlačítka zezadu

Zde je zdrojový kód par_in.c:

#include "parport.h"
#include <stdio.h>
#include <unistd.h>

#define PARPORT 0x378

int
main(int argc, char *argv[])
{
        int value;

        //if( !
        init_parport(PARPORT);
        //      return 1;

        value=parport_read();

        value/=8; //move LSB to bít 0
        value^=0x09;
        //invert bits 0 and 3 (3 and 6 before move) according to manual
        //value^=0x0f;
        //invert bits 0, 1, 2 and 3 - needed on my computer

        printf("%x\n", value);
        //decadic output
        printf("%d%d%d%d%d\n", value&0x10?1:0, value&0x08?1:0, value&0x04?1:0, value&0x02?1:0, value&0x01?1:0);
        //binary output

        done_parport();
        return 0;
}

Ke stažení: par_in.c

Je možné, že budete muset XORovat přečtenou hodnotu jinou maskou. Na nějaké šikovné využití zajisté přijdete sami.

Příště

Příště si ukážeme, jak postavit jednoduchý oddělovač paralelního portu, který umožní zvýšit jas LEDek a ochrání paralelní port před zničením v případě nějaké chyby. Jeho nevýhoda je, že musí být napájen +5V, ale napětí z USB portu bohatě postačí. Možná jsem měl oddělovačem začít, ale dát hned do prvního dílu něco, co je vlastně k ničemu, mi přišlo podlé. Aby i podle příštího dílu šlo postavit něco použitelného, představím vám program, kterým za pomoci tří tlačítek na paralelním portu ovládám již asi šest let hlasitost audiovýstupu počítače.

Ohodnoťte jako ve škole:
Průměrná známka 2,67
Tweetni to Odměnte autora  Jak to funguje?

Vzdělávejte sebe i své lidi





.
  •  
    Firemní školení pro web a online marketing
  • Obsah školení přizpůsobíme na míru vaší firmě.
  • Odnesete si informace, které ihned uplatníte v praxi.

Detailní informace o individuálních školeních pro firmy »

       

Přehled názorů

Re: Hrátky s LED a tlačítky pod Linuxem
Pepca 11. 6. 2009 00:14
Nový
├ 
Re: Hrátky s LED a tlačítky pod Linuxem
Pepca 11. 6. 2009 00:21
Nový
│
├ 
Re: Hrátky s LED a tlačítky pod Linuxem
Johan 11. 6. 2009 05:47
Nový
│
└ 
Re: Hrátky s LED a tlačítky pod Linuxem
Yokotashi 11. 6. 2009 11:17
Nový
├ 
Re: Hrátky s LED a tlačítky pod Linuxem
chsajarsa 11. 6. 2009 08:44
Nový
├ 
Re: Hrátky s LED a tlačítky pod Linuxem
Seth 11. 6. 2009 12:48
Nový
│
├ 
Re: Hrátky s LED a tlačítky pod Linuxem
Yokotashi 11. 6. 2009 15:02
Nový
│
├ 
Re: Hrátky s LED a tlačítky pod Linuxem
Lister 11. 6. 2009 15:32
Nový
│
└ 
Re: Hrátky s LED a tlačítky pod Linuxem
mtd 19. 6. 2009 13:12
Nový
└ 
Re: Hrátky s LED a tlačítky pod Linuxem
flaxx 11. 6. 2009 22:21
Nový
Hroznej bastl
Architekt 11. 6. 2009 01:20
Nový
├ 
Re: Hroznej bastl
Ondrej 11. 6. 2009 06:32
Nový
│
└ 
Re: Hroznej bastl
Petr Tesařík 11. 6. 2009 10:51
Nový
│
 
└ 
Re: Hroznej bastl
vtech 11. 6. 2009 16:16
Nový
│
 
 
└ 
Re: Hroznej bastl
zz 11. 6. 2009 22:07
Nový
└ 
Re: Hroznej bastl
Yokotashi 11. 6. 2009 11:21
Nový
Bílá LEDka
napalm 11. 6. 2009 07:51
Nový
└ 
Re: Bílá LEDka
Kin 11. 6. 2009 10:24
Nový
 
└ 
Re: Bílá LEDka
Yokotashi 11. 6. 2009 11:38
Nový
 
 
└ 
Re: Bílá LEDka
Kin 11. 6. 2009 11:42
Nový
 
 
 
├ 
Re: Bílá LEDka
I/O 11. 6. 2009 13:24
Nový
 
 
 
└ 
Re: Bílá LEDka
UUU 11. 6. 2009 18:55
Nový
Dotaz
milan (tecka) antl …ecka) cz 11. 6. 2009 08:59
Nový
├ 
Re: Dotaz
PL 11. 6. 2009 11:03
Nový
├ 
Re: Dotaz
Yokotashi 11. 6. 2009 11:27
Nový
├ 
Re: Dotaz
Seth 11. 6. 2009 13:31
Nový
└ 
Re: Dotaz
ava 11. 6. 2009 14:27
Nový
.........
Ja. 11. 6. 2009 09:39
Nový
└ 
Re: .........
D.A. Tiger 11. 6. 2009 11:28
Nový
preklep
yossarian 11. 6. 2009 10:01
Nový
└ 
Re: preklep
Yokotashi 11. 6. 2009 11:34
Nový
USB bastldeska
PL 11. 6. 2009 11:13
Nový
└ 
Re: USB bastldeska
Yokotashi 11. 6. 2009 11:37
Nový
 
├ 
Re: USB bastldeska
PL 11. 6. 2009 11:51
Nový
 
└ 
Re: USB bastldeska
Clock 11. 6. 2009 21:12
Nový
Jen tak dále... :-)
D.A. Tiger 11. 6. 2009 11:29
Nový
└ 
Re: Jen tak dále... :-)
Slimon 11. 6. 2009 13:28
Nový
 
├ 
ISA...
PL 11. 6. 2009 14:48
Nový
 
├ 
Re: Jen tak dále... :-)
D.A. Tiger 11. 6. 2009 14:56
Nový
 
└ 
Re: Jen tak dále... :-)
Yokotashi 11. 6. 2009 15:06
Nový
Díky!
Miroslav Prýmek 11. 6. 2009 14:38
Nový
├ 
Re: Díky!
Yokotashi 11. 6. 2009 15:11
Nový
│
├ 
Re: Díky!
Miroslav Prýmek 11. 6. 2009 18:08
Nový
│
└ 
Re: Díky!
Clock 11. 6. 2009 21:15
Nový
│
 
└ 
Re: Díky!
PL 11. 6. 2009 21:27
Nový
└ 
Re: Díky!
m 12. 6. 2009 00:00
Nový
 
└ 
Re: Díky!
m 12. 6. 2009 00:07
Nový
teplomer
bufly 11. 6. 2009 15:19
Nový
├ 
Re: teplomer
D.A. Tiger 11. 6. 2009 15:35
Nový
│
├ 
Re: teplomer
bufly 11. 6. 2009 15:42
Nový
│
│
├ 
Re: teplomer
px 11. 6. 2009 16:24
Nový
│
│
└ 
Re: teplomer
D.A. Tiger 11. 6. 2009 19:02
Nový
│
│
 
├ 
Re: teplomer
PL 11. 6. 2009 19:28
Nový
│
│
 
│
└ 
Re: teplomer
D.A. Tiger 11. 6. 2009 19:41
Nový
│
│
 
│
 
└ 
Re: teplomer
PL 11. 6. 2009 19:55
Nový
│
│
 
└ 
Re: teplomer
Clock 11. 6. 2009 21:18
Nový
│
└ 
Re: teplomer
Yokotashi 11. 6. 2009 17:12
Nový
└ 
Re: teplomer
PL 11. 6. 2009 16:35
Nový
Prahové napětí
KD 11. 6. 2009 15:32
Nový
└ 
Re: Prahové napětí
Yokotashi 11. 6. 2009 18:25
Nový
a co tak seriovy port
che 11. 6. 2009 15:49
Nový
└ 
Re: a co tak seriovy port
AraxoN 11. 6. 2009 17:10
Nový
dalsi clanek od nekoho co nic neumi
belzebub 11. 6. 2009 16:46
Nový
├ 
Re: dalsi clanek od nekoho co nic neumi
AraxoN 11. 6. 2009 17:15
Nový
├ 
Re: dalsi clanek od nekoho co nic neumi
angel 11. 6. 2009 17:24
Nový
│
└ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 11. 6. 2009 18:14
Nový
│
 
└ 
Re: dalsi clanek od nekoho co nic neumi
angel 11. 6. 2009 21:20
Nový
│
 
 
└ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 11. 6. 2009 21:28
Nový
├ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 11. 6. 2009 17:27
Nový
│
├ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 11. 6. 2009 18:05
Nový
│
│
└ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 11. 6. 2009 18:37
Nový
│
│
 
└ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 11. 6. 2009 21:21
Nový
│
│
 
 
└ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 12. 6. 2009 11:57
Nový
│
└ 
Re: dalsi clanek od nekoho co nic neumi
Miroslav Prýmek 11. 6. 2009 18:09
Nový
│
 
├ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 11. 6. 2009 18:41
Nový
│
 
│
└ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 11. 6. 2009 22:11
Nový
│
 
│
 
├ 
Re: dalsi clanek od nekoho co nic neumi
angel 11. 6. 2009 22:58
Nový
│
 
│
 
│
└ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 13. 6. 2009 02:37
Nový
│
 
│
 
└ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 12. 6. 2009 12:05
Nový
│
 
│
 
 
└ 
Re: dalsi clanek od nekoho co nic neumi
belzebub 13. 6. 2009 02:58
Nový
│
 
│
 
 
 
├ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 13. 6. 2009 12:31
Nový
│
 
│
 
 
 
├ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 14. 6. 2009 14:38
Nový
│
 
│
 
 
 
│
└ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 15. 6. 2009 10:23
Nový
│
 
│
 
 
 
└ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 17. 6. 2009 01:13
Nový
│
 
└ 
Re: dalsi clanek od nekoho co nic neumi
D.A. Tiger 11. 6. 2009 19:13
Nový
├ 
Re: dalsi clanek od nekoho co nic neumi
Clock 11. 6. 2009 21:00
Nový
│
└ 
Re: dalsi clanek od nekoho co nic neumi
Yokotashi 12. 6. 2009 12:09
Nový
├ 
Re: dalsi clanek od nekoho co nic neumi
lummox 12. 6. 2009 12:58
Nový
├ 
Re: dalsi clanek od nekoho co nic neumi
Bluebea 12. 6. 2009 23:47
Nový
└ 
Re: dalsi clanek od nekoho co nic neumi
100% Lenin 3. 7. 2009 22:43
Nový
Arduelo
Bubuss 11. 6. 2009 22:12
Nový
Re: Hrátky s LED a tlačítky pod Linuxem
drobas 11. 6. 2009 23:34
Nový
└ 
Re: Hrátky s LED a tlačítky pod Linuxem
angel 12. 6. 2009 12:32
Nový
využití starého LCD
suma 12. 6. 2009 12:39
Nový
├ 
Re: využití starého LCD
PL 12. 6. 2009 13:25
Nový
└ 
Re: využití starého LCD
Yokotashi 12. 6. 2009 14:49
Nový
Funguje to nekomu?
RS 12. 6. 2009 14:49
Nový
└ 
Re: Funguje to nekomu?
Yokotashi 12. 6. 2009 16:13
Nový
 
└ 
Re: Funguje to nekomu?
RS 12. 6. 2009 17:24
Nový
 
 
└ 
Re: Funguje to nekomu?
RS 12. 6. 2009 17:35
Nový
 
 
 
└ 
Re: Funguje to nekomu?
Yokotashi 13. 6. 2009 14:37
Nový
BASTL?
Technikratus 13. 6. 2009 08:52
Nový
├ 
Re: BASTL?
Yokotashi 13. 6. 2009 13:25
Nový
│
├ 
Re: BASTL?
D.A. Tiger 13. 6. 2009 22:48
Nový
│
│
└ 
Re: BASTL?
Clock 16. 6. 2009 13:08
Nový
│
└ 
Re: BASTL?
mhi 16. 6. 2009 19:12
Nový
│
 
└ 
Re: BASTL?
Yokotashi 18. 6. 2009 00:15
Nový
├ 
Re: BASTL?
Miroslav Prýmek 14. 6. 2009 09:21
Nový
└ 
Re: BASTL?
Bluebear 15. 6. 2009 22:41
Nový
Jen tak dal!
RadaS 13. 6. 2009 17:24
Nový
├ 
Re: Jen tak dal!
D.A. Tiger 13. 6. 2009 22:41
Nový
└ 
Re: Jen tak dal!
Yokotashi 14. 6. 2009 12:23
Nový
 
└ 
Re: Jen tak dal!
RadaS 14. 6. 2009 16:52
Nový
 
 
└ 
Re: Jen tak dal!
Yokotashi 15. 6. 2009 12:13
Nový
Parada
Pedro 14. 6. 2009 00:46
Nový
Hrátky s LCD
Noname 15. 6. 2009 16:22
Nový
└ 
Re: Hrátky s LCD
Gt 15. 6. 2009 21:51
Nový
Mereni LED na 12V
Clock 16. 6. 2009 13:02
Nový
Problem s makefile
zaciatocnik 16. 7. 2009 14:59
Nový
└ 
Re: Problem s makefile
zaciatocnik 16. 7. 2009 15:44
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem