Poloha přepínače – čtení jedním analogovým vstupem

Jeden zákazník vznesl dotaz na: „… model světelné křižovatky. Pro přepínání režimů chodu semaforů plánuji použít otočný přepínač. Na přepínač přivedu napětí a pomocí různých odporů na jednotlivých výstupech ho snížím, takže každá poloha bude mít jiné napětí. Toto napětí chci číst jedním vstupem na PICAXE a podle toho řídit chod semaforů. Chci se zeptat, zda-li je toto realizovatelné…“

To samozřejmě realizovat lze, podle následujícího zapojení bude každé poloze přepínače odpovídat jiné napětí na analogovém vstupu Picaxe. V první poloze (A1) bude přibližně 3/4 Vcc, v druhé poloze 1/2 Vcc, v třetí poloze 1/4 Vcc a ve čtvrté poloze bude vstupní napětí nulové. Pokud se přepínač zrovna bude nacházet v mezipoploze, takže ani jeden z kontaktů A1-A4 nebude spojen se společným kontaktem A, bude na vstupu napětí blízké Vcc.

I když je tento okamžik z pohledu obsluhy velmi krátký, může se stát, že procesor načte stav přepínače v nevhodný moment. Je potom na úvaze programátora, jestli v takovém případě pozdrží program, dokud se neobjeví napětí odpovídající některé přípustné hodnotě, nebo jestli například ignoruje tuto informaci a program se bude chovat podle poslední známé polohy přepínače.

K načtení hodnoty napětí použijeme příkaz adcread, který převádí měřené napětí v rozsahu 0-Vcc na číslo 0-255. Pak jednotlivým polohám přepínače od první ke čtvrté budou odpovídat hodnoty 191, 128, 64 a 0. Při čtení analogového vstupu je třeba připustit určitý rozptyl načtené hodnoty, daný výrobní  tolerancí a teplotní závislostí jednotlivých součástek, včetně mikrokontroléru Picaxe. Pro 8 bitový převod a 1% rezistory můžeme připustit rozmezí řekněme ±8 hodnot A/D převodníku, tedy v první poloze 183-199, v druhé poloze 120-136, ve třetí poloze 56-72 a ve čtvrté konečně 0-8, protože zápornou hodnotu nemůže převodník poskytnout. V testovacím programu se vypisuje zjištěná poloha přepínače na terminálu v počítači (menu Picaxe | Terminal), a pro kontrolu též naměřená hodnota z příkazu adcread.

Switch2Analog

Schéma zapojení

'
' Switch2Analog
'

#picaxe 08m2

'
' Pins
'
symbol swpin=c.4

'
' constants
'
symbol A1low=183
symbol A1high=199
symbol A2low=120
symbol A2high=136
symbol A3low=56
symbol A3high=72
symbol A4low=0
symbol A4high=8

'
' variables
'
symbol swad=b27

Init:
'Při použití X2 je nutno nastavit příslušný pin jako analogový - příkaz adcsetup

Main:
do
    readadc swpin,swad
    if swad>=A1low and swad<=A1high then
        sertxd("Stav A1, A/D=",#swad,13,10)
    endif
    if swad>=A2low and swad<=A2high then
        sertxd("Stav A2, A/D=",#swad,13,10)
    endif
    if swad>=A3low and swad<=A3high then
        sertxd("Stav A3, A/D=",#swad,13,10)
    endif
    if swad>=A4low and swad<=A4high then
        sertxd("Stav A4, A/D=",#swad,13,10)
    endif
    
    pause 2000
loop
end