Pateikiame paprastą metodą, skirtą pajungti du mygtukus prie to pačio mikrovaldiklio išvado, kuriais galima valdyti du skirtingus įrenginius. Schema sudaro „Atmel“ mikrovaldiklis AT90S2313, keturios varžos, keletas kondensatorių, du šviesos diodai, bei du neužsifiksuojantys jungikliai J1 ir J2. Neutrali jungiklių padėtis yra tokia, kokia pateikta schemoje. Pagrindinis trūkumas yra tai, kad mygtukai negali būti paspausti vienu metu, nes tai gali trumpinti maitinimo šaltinį. Tokio atvejo išvengimui, galima panaudoti rezistorius R', kurių varža neturėtų būti didesnė nei 500 omų, priešingu atveju, junginėjimas gali neveikti. Tas pats gali atsitikti ir su R varža, kadangi gali nesusidaryti junginėjimui tinkami įtampos lygiai 2 mikrovaldiklio išvade. Schema buvo bandyta be šių varžų, todėl junginėjimo principą pritaikant praktikoje, patartina varžas naudoti pasirenkant jų atitinkamus nominalus.
Veikimo principas pagrįstas 2 išvado loginių lygių tikrinimu laike. Antrame paveiksle pateikta laiko diagrama, pagal kurią tikrinamos mygtukų būsenos. Tikrinimo metu PORTD 2 išvadas nustatomas kaip išėjimas (DDRD=1), tada atitinkamais intervalais siunčiamas loginis vienetas PORTD=1 (5 V) ir loginis nulis PORTD=0 (0 V).
Diagramoje taip besikeičiantis signalas 2 išvade pavaizduotas juoda spalva. Besikeičiant įtampai 2 išvade, lygiagrečiai tikrinama ar nebuvo paspaustas bent vienas mygtukas. Esant paspaustam J2 mygtukui, gaunasi taip vadinamas išvado trumpinimas tuo momentu, kai jame yra nustatytas loginis vienetas. Dėl vidinės mikrovaldiklio varžos neįvyksta trumpas jungimas, o tik padidėja maitinimo srovė. Tokio trumpinimo metu nuskaičius PIND gaunamas loginis nulis, kuris būna vienetas, jeigu mygtukas J2 yra atleistas. Tokia pati situacija ir su J1 mygtuku, kai PORTD=0, paspaustas mygtukas į 2 išvada paduoda 5 V įtampą, kas sudaro 1 loginį lygį, nuskaičius PIND prievadą.
Pagal tokį principą, galima realizuoti du mygtukus ant to pačio mikrovaldiklio išvado, kas labai patogu kai pritrūksta dar vienos kojelės kokiam nors įrenginiui valdyti. Apačioje pateiktas šio metodo įgyvendinimo programos kodas, kuris teužima tik keletą eilučių. Jis leidžia junginėti šviesos diodus nepriklausomai vienas nuo kito, kas įrodo metodo realumą.
#include "io2313.h"
void main()
{
// Aprašomas kintamasis
unsigned char mm=0;
// Nustatom PORTB prievadą kaip išėjimą šviesos diodams junginėti
DDRB = 255;
// Antras mikrovaldiklio išvadas nustatomas kaip išėjimas
DDRD = 1;
while(1) // Programos ciklo pradžia
{
PORTD=0; // Sudarome 2 išvade loginio 0 būseną
// Keista, bet reikia nedidelio vėlinimo, be jo praktiškai
// neveikė. Tikriausiai dėl pereinamųjų procesų
mm++;
// Tikriname ar paspaustas J1 mygtukas, jei paspaustas
// vykdoma tai, kas toliau parašyta
if ((PIND&1)>0){
// Junginėjame patį pirmutinį prie PORTB
// prijungtą šviesos diodą (XOR operacija)
PORTB=~(~PORTB^1);
// Laukimo ciklas iki tol, kol bus
// atleistas paspaustas mygtukas
while ((PIND&1)>0){}
}
PORTD=1; // Sudarome 2 išvade loginio 1 būseną
mm++; // Tas pats vėlinimas
// Tikriname ar paspaustas J2 mygtukas, jei
// paspaustas – vykdoma tai, kas toliau parašyta
if ((PIND&1)!=1){
// Junginėjame antrą prie PORTB
// prijungtą šviesos diodą 14 išvadas
PORTB=~(~PORTB^4);
// Laukimo ciklas iki tol, kol bus atleistas
// paspaustas mygtukas (XOR operacija)
while ((PIND&1)==0){}
}
}
}
Galite parsisiųsti jau sukompiliuotą programą „hex“ formate. Ją į mikrovaldiklį galite įrašyti programatoriumi, pateiktu mūsų puslapyje.
Pastebėjimai: pastebėtas nedidelis trūkumas, pasireiškiantis tuo, kad kartais nepavyksta įjungti šviesos diodo. Kai kuriais atvejais diodai įsijungia ir taip pat greit išsijungia. Tą galima paaiškinti tuo, kad mygtuko paspaudimo metu atsiranda ne vienas impulsas, o keletas. Norint to išvengti, reikia tobulinti programą arba naudoti kondensatorius, kurie sumažintų mikroimpulsų atsiradimo tikimybę. To nevertinant, prietaisas veikia gana neblogai. Sėkmės bandymuose!