www.eprace.edu.pl » system-wrzutnikowy » Opis budowy i oprogramowania urządzenia » IO cyfrowe w ujęciu nie blokującym, obsługa wrzutnika monet

IO cyfrowe w ujęciu nie blokującym, obsługa wrzutnika monet

Budowa przedpłatowego sterownika natrysku wymusiła opracowanie funkcji, które umożliwiają:

- opóźnienie reakcji na naciśnięcie / puszczenie klawisza (debounce 2 ),

- opóźnienie "samopowtarzania" przy utrzymującym się na wejściu stanie pobudzenia,

- wybór reakcji na zbocze sygnału (wyzwolenie jednorazowe czy samopowtarzanie),

- wybór poziomu logicznego "widzianego" przez dane wejście jako aktywny,

- wykonanie funkcji użytkownika wywoływanej przy aktywacji wejścia (callback3).

Przyjęta została koncepcja, wg której na etapie pisania programu wiadome jest, jakim poziomem logicznym pobudzane są poszczególne wejścia. Stąd konfiguracja tego parametru zaszyta jest w plikach nagłówkowych jako #define i zostaje przekazana do funkcji obsługujących wejścia już na etapie kompilacji. Inaczej sytuacja przedstawia się z konfiguracją reakcji na zbocze sygnału. Poszukując sposobu, który umożliwiałby zmianę tego parametru z poziomu programu użytkownika, autor opracował funkcję realizującą sprawdzanie logicznego ExclusiveNOR (EXNOR). Dzięki temu zabiegowi użytkownik ma możliwość zmiany działania niektórych wejść z poziomu menu (przy czym zmiana poziomu logicznego nie jest tutaj możliwa). Użycie identycznego mechanizmu daje możliwość parametryzacji również poziomów logicznych wejść - jednak taka funkcjonalność nie była potrzebna i porzucono ją na rzecz definicji w plikach nagłówkowych. Kod przypisany poszczególnym wejściom kompilowany jest tylko wtedy, gdy dane wejście jest oznaczone jako aktywne - pozwala to zaoszczędzić trochę miejsca w procesorze, gdy część wejść pozostaje nieużywana.

Istotnym aspektem korzystania z wejść jest możliwość wywołania funkcji zwrotnej przekazanej jako argument podczas wywołania funkcji obsługi. W zdecydowanej większości przypadków funkcjonalność ta jest wystarczająca, jednak w specyficznych sytuacjach okazuje się niewskazana. Stąd wszystkie funkcje obsługi wejść, niezależnie od miejsca ich wywołania dostarczają użytkownikowi jednej wspólnej zmiennej 8-io bitowej przechowującej aktualny stan zmapowanych wejść. Pomimo pozornego skomplikowania algorytmu przedstawionego na rysunku nr 13 jego zapis w języku C jest bardzo prosty, co pokazane jest na listingu na kolejnej stronie.

Rys. 13 - Algorytm obsługi wejść cyfrowych

Listing 1 - Funkcja zaawansowanej obsługi wejść cyfrowych

void keyf(uint8_t port, uint8_t pin, uint8_t id,void (*f)(void),uint8_t debounce,uint8_t repeat,uint8_t rise,uint8_t level)

{

if(!(key_status&(1<<id)) && (!(port&(1<<pin))^(level)))

{

key_status |= (1<<id);//przycisk wciśnięty

Ltab[id]=debounce;

}

if(!Ltab[id])

{

if((!(port&(1<<pin))^(level)))

key_acts |= (1<<id);//przycisk wciśnięty

}

if(!(!(port&(1<<pin))^(level)))

{

waitus(debounce);

if(!(!(port&(1<<pin))^(level)))

key_status &= ~(1<<id);//odznacz w tablicy wciśniętych

}

if(((key_acts&(1<<id))||(key_status&(1<<id)))&&(!(key_rises&(1<<id))))

{

if(!Ltabr[id])

{

Ltabr[id]=repeat;

f();

key_rises |= (!((1<<id))^(rise));

}

}

if (!(key_status&(1<<id)))

{

key_rises &= ~(1<<id);

key_acts &= ~(1<<id);

}

return;

}

Obsługa wyjść cyfrowych zasadniczo sprowadzona jest do przypisania konkretnym pinom procesora makr automatyzujących proces konfiguracji danego wyjścia oraz upraszczających jego użycie w programie. Również tutaj autor przewidział możliwość definiowania poziomu logicznego widzianego na wyjściu. Pozwala to w łatwy sposób zmodyfikować program w przypadku zmiany koncepcji działania wyjść.

Akceptor monet typu RM5 używa do komunikacji ze sterownikiem "SPA - 1n" 4 linii sygnałowych. Jedna z linii to wejście służące do zewnętrznego zablokowania przyjmowania monet i została użyta do blokady akceptora w zdefiniowanych przez użytkownika sytuacjach. Pozostałe 3 linie to wyjścia pobudzane wrzuceniem monety o określonym nominale. W wyniku zarejestrowania poprawnego przyjęcia monety na wyjściu pojawia się impuls niski (wyjście podciągnięte do zasilania) o długości 100ms. Doświadczalnie potwierdzona stabilność czasu trwania impulsu pozwala na wprowadzenie jego wartości bezpośrednio do kodu programu. Jednak byłoby to niewskazane w przypadku gdyby zaistniała konieczność wymiany wrzutnika na inny typ o np. krótszym czasie trwania impulsu. Aby skutecznie się przed tym zabezpieczyć, autor użył do jego obsługi opisanych funkcji zarządzających wejściami cyfrowymi. Na rysunku nr 14 przedstawiony został algorytm sterowania czasowego użyty w urządzeniu. Opiera się on o automat sekwencyjny pobudzany systemem flag wypracowanych w innych częściach programu.

Rys. 14 - Algorytm współpracy z wrzutnikiem monet



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.