klawiatrura do avr





Klawiatura do mikrokontrolera,
Klawiatura do mikrokontrolera,
czyli osiem przycisków w jednym
czyli osiem przycisków w jednym
2673
2673
Do czego to służy? sterowania, przeznaczony do współpracy gdyż obwód opózniający R4C2 nie pozwoli
Gdy budujemy system mikroprocesorowy, z mikrokontrolerem. KolejnÄ… zaletÄ… jest wyj- na uruchomienie generatora z bramkÄ…
który w założeniach ma być obsługiwany ście typu otwarty kolektor. U2A, zanim drgania te nie ustąpią. Gdy już
przez człowieka, do przekazywania mu infor- tak się stanie, generator ten zaczyna praco-
macji zwykle używamy klawiatur. Są to kla- Jak to działa? wać, wytwarzając przebieg prostokątny o czę-
wiatury dołączone wprost do wyprowadzeń Schemat ideowy przedstawiony jest na ry- stotliwości ok. 1kHz. Wraz z wystąpieniem
mikroprocesora i masy lub plusa zasilania lub sunku 1. Jak widać, całość zrealizowałem pierwszego zbocza narastającego stan wysoki
też matrycowe. W obu przypadkach zajmują z użyciem dwóch prostych układów CMOS zniknie z wyjścia Q0 U1, bramka U2B otwo-
one niemało wyprowadzeń układu, co często i garstki elementów. W stanie spoczynku rzy bramkę U2C i na wyjściu układu (kolek-
jest poważnym problemem. Zwłaszcza wszystkie przyciski są rozwarte, U1 jest wy- tor T1) pojawi się zanegowany przebieg
w 89C2051, 90S2313 lub miniaturowych zerowany i na jego wyjściu Q0 występuje z nóżki 3 U2  za stan wysoki uznaję tu stan
AVR-ach (np. 90S2343, 90S1200). Niekiedy stan wysoki. Tranzystor T2 jest zatkany a ge- zatkania T1, wszak jego kolektor będzie za-
brakuje nam wyprowadzeń. Prezentowany nerator z bramką U2A nie pracuje. Na nóżce wsze podciągnięty do plusa zasilania stero-
układ rozwiązuje powyższe problemy, gdy 11 U2 jest stan niski i T1 jest zatkany. Wci- wanego układu mikroprocesorowego.
potrzebna jest klawiatura o ośmiu lub mniej śnięcie któregokolwiek z przycisków spowo- Przyjmijmy na początek następującą umo-
przyciskach. Do jego połączenia z proceso- duje podanie stanu niskiego na wejście RST wę: słowem impuls będę określał połowę
rem wystarczy jedno wyprowadzenie. Układ układu U1 oraz otwarcie T2. Drgania wystę- okresu generatora, czyli występowanie tam
na swoim wyjściu wytwarza przebieg prosto- pujące na początku nie będą przeszkadzać,
kątny niosący informację o numerze wciśnię- Rys. 1 Schemat ideowy
tego przycisku. Jest on Å‚atwy do zdekodowa-
nia za pomocÄ… dowolnego procesora. Ogrom-
ną zaletą układu jest jego bardzo niska cena
oraz to, że w spoczynku w ogóle nie pobiera
prÄ…du, z wyjÄ…tkiem liczonych w nanoampe-
rach prądów polaryzacji wejść CMOS i róż-
nych prądów upływu. Pomiar tego prądu za
pomocÄ… mikroamperomierza cyfrowego
o rozdzielczoÅ›ci 1µA nie spowodowaÅ‚ jakiej-
kolwiek reakcji miernika, nawet na tej naj-
mniej znaczącej pozycji  a więc prąd pobie-
rany w spoczynku jest dużo mniejszy od
1µA! Pobór w trakcie pracy wynosi ok.
650µA i może być zmniejszony, jeÅ›li zajdzie
taka potrzeba poprzez zwiększenie wartości
rezystorów R2,R3 i R6, które są w modelu
stosunkowo małe. Cechy te pozwalają na za-
silanie bateryjne. I tu ujawnia siÄ™ kolejne za-
stosowanie opisywanego modułu  dodając
jakikolwiek generator częstotliwości nośnej
(choćby na 4047 lub 555 CMOS), możemy
zbudować taniutki i prosty pilot zdalnego
Elektronika dla Wszystkich
50
stanu wysokiego lub niskiego. Nie chodzi do sytuacji, w której analizowana seria prze-
jednak o połowę czasu, gdyż przebieg wytwa- rwana byłaby w połowie przez puszczenie
rzany przez prościutki generator na U2A wca- przycisku  dotyczy to zwłaszcza szybkich
le nie ma wypełnienia 50%, ale to nic nie styków popularnych microswitchów.
przeszkadza. Tak więc 1 okres ma 2 impulsy, Przykładową, wypróbowaną w praktyce na
1,5 okresu to 3 impulsy itd.. Załóżmy przy- 2051, procedurę realizującą powyższe założe-
kładowo, że wciśnięto przycisk S3 oznaczony nia w języku C przedstawia Listing 1. Funk-
numerem 2. Pierwsze narastajÄ…ce zbocze cja Wait_for_long, jak sama nazwa wskazuje,
przebiegu generatora U2A spowoduje poja- czeka na długi impuls. Zwraca 0, gdy był to
wienie się stanu wysokiego na Q1 U2 oraz  dobry impuls, czyli taki, po którym wciąż
natychmiastowe wystąpienie na wyjściu sta- nadchodzą krótkie impulsy; zwraca 1, jeśli im-
nu niskiego. Po wygenerowaniu 2 impulsów puls ten trwa zbyt długo  jest wynikiem pu-
stan wysoki przejdzie na wyjście Q2, po 4 im- szczenia przycisku. Za argument przyjmuje
pulsach pojawi się na Q3. Po wytworzeniu wskaznik do zmiennej w której umieszcza
piątego impulsu układ zacznie generować wynik, czyli liczbę krótkich impulsów jakie
szósty, ale po jego zakończeniu stan wysoki wystąpiły od momentu wywołania tej funkcji
pojawi się na wyjściu Q4, do którego dołą- do najbliższego długiego impulsu. W funkcji
czony jest zwarty przycisk S3. Spowoduje to main jest przykład wykorzystania: pierwsze
natychmiastowe wyzerowanie U1 i zamknię- wywołanie Wait_for_long służy zignorowaniu
cie bramki U2C. Na wyjściu układu pojawi pierwszej serii, po drugiej w zmiennej numer
się stan wysoki (zatkany T1) na czas trwania jest numer wciśniętego przycisku (0...7). Po
1 okresu, czyli kolejnych 2 impulsów. Ponie- wykorzystaniu tej wartości do określonego ce-
waż podczas generowania impulsu numer 6 lu program czeka aż zwróci ona 1  tym sa-
(jak i każdego parzystego) na wyjściu rów- mym czeka na puszczenie przycisku. Zauważ-
nież był stan wysoki, to w rezultacie po wy- cie, jak uniwersalna jest ta funkcja i ile infor-
stąpieniu 5 impulsów pojawi się tam długi macji można z niej uzyskać. Oczywiście to
stan wysoki o czasie trwania 3 kolejnych im- tylko przykład i kto chce może napisać swoją
pulsów (szósty impuls zleje się z dwoma na- własną na dowolny procesor. Moja napisana
stępnymi). Dalsze trzymanie S3 znów spowo- jest dla procesora  51 z kwarcem 11,059MHz.
duje wystąpienie 5 krótkich impulsów i jed- Przerobienie jej na inny typ (np. AVR) spro-
nego długiego itd. Puszczenie przycisku na- wadza się do zmiany realizacji opóznienia
tychmiast resetuje U1 i po chwili wyłącza ge- (Delay) zależnie od konkretnego typu i zega-
nerator. Jeśli ktoś, zamiast S3, wciśnie np. S4 ra. Opóznienie to powinno być kilkana-
(numer 3), to układ wytworzy przebieg, ście...kilkadziesiąt razy krótsze od czasu trwa-
w którym pomiędzy dwoma impulsami długi- nia krótkiego impulsu, który dla wartości ele-
mi będzie 7 krótkich (o 1 okres więcej  to mentów jak na schemacie jest rzędu
oczywiste), z których każdy trwa ok. 3 razy 500µs (podkreÅ›lam  rzÄ™du). Oprócz tego na-
krócej niż długi. Dla przycisku numer 1 będą leży wtedy dobrać liczby określające długość
to 3 krótkie impulsy, a dla numer 0  tylko 1. określające minimalną długość impulsu dłu-
Mam nadzieję, że dostrzegacie już ogólną za- giego i za długiego (u mnie są to 40 i 80).
leżność: po wciśnięciu przycisku numer
N (0...7) układ generuje przebieg,
w którym pomiędzy dwoma długimi im-
pulsami jest 2N+1 krótkich. Pomocą będzie
rysunek 2, na którym przedstawiłem przebie-
gi na wyjściu układu po wciśnięciu kilku wy-
branych przycisków na tle przebiegu z nóżki
3 U2. Strzałki pokazują momenty, w których
resetowany jest U1. Przebiegi takie są łatwe Rys. 2 Przebiegi wyjściowe
do zdekodowania przez mikroprocesor  aby
otrzymać numer przycisku, wystarczy poli-
czyć, ile krótkich impulsów występuje po- Montaż i uruchomienie
między dwoma długimi, odjąć 1 i podzielić Schemat montażowy przedstawiony został
przez 2. Ze względu na to, że w układzie wy- na rysunku 3. Montaż jest typowy i nie wy-
stępuje prościutki generator z jedną bramką, maga komentarza. Zaczynamy od zworek
dobrze jest do dekodowania brać nie pierw- a kończymy na tranzystorach i układach
szą, ale drugą lub trzecią serię impulsów  scalonych (warto zastosować podstawki).
w pierwszej mogą występować impulsy Miejsca do podłączenia przycisków oznaczo-
o mniej jednolitych czasach niż w kolejnych no ich numerami, pod jakimi będą dekodowa-
seriach. Warto też sprawdzić, czy po długim ne w programie. Po zmontowaniu ze spraw-
impulsie kończącym analizowaną serię wy- nych elementów układ od razu działa popraw-
stępuje kolejny krótki impuls, rozpoczynają- nie. Do jego sprawdzenia przyda się jakikol-
cy serię następną. Zapobiegnie to błędom wy- wiek analizator stanów logicznych. W moim
stępującym podczas ekstremalnie krótkich przypadku był to najzwyklejszy tranzystor
naciśnięć przycisków, kiedy to mogłoby dojść NPN podłączony do portu drukarkowego
Elektronika dla Wszystkich
51
REKLAMA · REKLAMA · REKLAMA · REKLAMA
i darmowy programik ściągnięty z sieci. Listing 1. Funkcja dekodująca
Przebiegi na wyjściu powinny być takie jak
#include
na rysunku 2. Oprócz programu z listingu 1
#define in P3_2
na stronie EdW (w dziale FTP) znajdziecie
prosty program (zródło i *.bin), który wy-
unsigned char Wait_for_long(unsigned char* num)
świetla numer wciśniętego przycisku na wy- {
_bit last;
świetlaczu LCD (interfejs HD44780). Może
_data unsigned char licznik,stan,i;
on służyć do przetestowania układu. Jednak ze
*num=0;
względu na duży rozrzut progów przełączania
stan=0;
bramek w różnych egzemplarzach kostek 4093
licznik=0;
in=1;
może się zdarzyć, że choć układ będzie wytwa-
last=in;
rzał przebiegi o prawidłowym kształcie oraz
while(1)
{
wartości elementów będą takie jak na rysunku
i=1;
1, to czasy impulsów będą się bardzo różniły od
while(i--); // DELAY
tych w modelu. Na wyświetlaczu będzie się licznik++;
if(licznik>40)
wtedy notorycznie pojawiał napis Error!!!! lub
stan=1;
jakieś  głupoty . Sporadyczne pojawianie się if(licznik>80)
return 1; // zły długi
tego napisu nie świadczy o błędzie w układzie,
lecz o wystąpieniu przekłamań, które w rzeczy-
in=1;
if(in!=last)
wistym świecie się zdarzają. Chodzi o to, aby
{
właściwie na nie zareagować i nie uznać błęd-
if(stan)
return 0; // dobry długi
nej transmisji za właściwą. Najprościej jest ją
else
po prostu zignorować. Jeżeli jednak napis ten
{
pojawia się często, to należy zmierzyć czasy last=in;
licznik=0;
analizatorem i zmienić liczby 40 i 80 w funkcji
(*num)++;
Wait_for_long na odpowiednie. Jeśli zaś chodzi
}
}
o samą stabilność tego generatora, to choć
}
jest ona słaba, tutaj w zupełności wystarczy.
}
// Przykład wykorzystania tej funkcji
Rys. 3 Schemat montażowy
main()
{
_data unsigned char numer,err;
while(1)
{
in=1;
while(in); // czeka na poczatek
while(!in); // ignorujemy pierwszy impuls
err=Wait_for_long(&numer); // ignorujemy ten numer
err=Wait_for_long(&numer); // ważny numer
// wykorzystanie zmiennej numer
// + prosta ochrona przed błędami
if(!err && numer<16)
{
numer--; // -1
Wykaz elementów numer>>=1; // numer=numer/2
Rezystory
R
e
z
y
s
t
o
r
y
// .... tu wykorzystujemy zmiennÄ… numer
R1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100k&!
}
R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220k&! else
{
R3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22k&!
// reakcja na błąd
R4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .470k&!
}
R5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1M&!
// czeka na puszczenie przycisku
R6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10k&!
while(!Wait_for_long(&numer));
Kondensatory:
K
o
n
d
e
n
s
a
t
o
r
y
:
}
C1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10nF MKT
}
C2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220nF MKT
C3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .100nF ceramiczny
Półprzewodniki:
P
ó
Å‚
p
r
z
e
w
o
d
n
i
k
i
:
Częstotliwość musiałaby się rozjechać dwu- ście ponad 2-krotnie dłuższego od krótkich.
U1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4017
krotnie, żeby wystąpiły błędy, a do tego w ty- Uniezależni to nas od rozrzutów i innych nie-
U2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4093
T1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .BC548B
powych warunkach pracy nie dojdzie. Jest ona stabilności  wszystko w rękach programi-
T2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .BC558B
natomiast mocno zależna od napięcia zasila- stów. Wszystkie stałe czasowe można dobrać
Inne:
nia  wspomniane liczby trzeba dobrać przy wedle uznania. Gotowy moduł wstawiamy do
S1-S8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przyciski zwierne, typ zależny od konkretnego zastosowania takim napięciu, przy jakim układ ma praco- urządzenia z mikrokontrolerem, gdzie brakuje
(nie wchodzą w skład kitu AVT).
wać docelowo. Ostatecznie można napisać nam wyprowadzeń i problem mamy z głowy.
ulepszoną, bardziej uniwersalną funkcję, która Interesująco wygląda możliwość dołączenia
nie będzie miała tych liczb wpisanych  na do naszej klawiaturki generatora (np. 36kHz)
Komplet podzespołów z płytką
K
o
m
p
l
e
t
p
o
d
z
e
s
p
o
Å‚
ó
w
z
p
Å‚
y
t
k
Ä…
sztywno . Będzie mierzyć krótkie impulsy i budowa prostego pilota IRED.
jest dostępny w sieci handlowej AVT
j
e
s
t
d
o
s
t
Ä™
p
n
y
w
s
i
e
c
i
h
a
n
d
l
o
w
e
j
A
V
T
i czekać na wystąpienie długiego impulsu Arkadiusz Antoniak
jako kit szkolny AVT-2673
j
a
k
o
k
i
t
s
z
k
o
l
n
y
A
V
T
2
6
7
3
o nie ściśle określonym czasie, ale rzeczywi- hal9900@poczta.onet.pl
Elektronika dla Wszystkich
52


Wyszukiwarka

Podobne podstrony:
Zestaw uruchomieniowy do procesorow rodziny AVR i 51, cz 2
dodatek do części 9 zmiany w AVR LibC
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr
pozwol mi przyjsc do ciebie
wytyczne do standar przyl4
FAQ Komendy Broń (Nazwy używane w komendach) do OFP
Drzwi do przeznaczenia, rozdział 2
53$2403 specjalista do spraw szkolen
Do W cyrkulacja oceaniczna II rok

więcej podobnych podstron