13.07.2015 Views

Elektronika Praktyczna, marzec 2012 - UlubionyKiosk

Elektronika Praktyczna, marzec 2012 - UlubionyKiosk

Elektronika Praktyczna, marzec 2012 - UlubionyKiosk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Przykład NOTATNIK użycia KONSTRUKTORAplatformy OpenATDomofon bezprzewodowyPrzykład użycia platformy OpenATNa łamach Elektroniki Praktycznej wielokrotnie były prezentowanerozwiązania oparte o komunikację GSM. Zazwyczaj opierały się oneo dedykowane moduły będące modemami, sterowane komendamiHayesa. Nie inaczej jest w przypadku Q2687 firmy Sierra Wireless(dawniej Wavecom), bohatera tego artykułu. Jest to niewielka płytkaz mikrokontrolerem z rdzeniem ARM9, pracująca pod kontroląsystemu operacyjnego OpenAT, który – prócz standardowych usługsystemu operacyjnego – dostarcza także funkcje obsługi transmisjiGSM. Takie połączenie było strzałem w dziesiątkę firmy SierraWireless: aby stworzyć całkiem zaawansowaną aplikację, niepotrzeba mieć specjalistycznej wiedzy z zakresu telekomunikacji– wystarczy podstawowa znajomość języka C oraz API systemuOpenAT.Kolejną zaletą modułu, znacznie odróżniającąod wspomnianych urządzeń, jestobecność w jego strukturze pokaźnej liczbyinterfejsów: od zwykłych linii GPIO, przezSPI, I 2 C, dedykowane złącza do zewnętrznejklawiatury, po porty UART i USB. Tozmieniło dotychczasową sytuację, w którejmoduły GSM do tej pory spełniały rolęjedynie modemów. Moduł Q2687 dziękiwymienionym peryferiom w większościpraktycznych zastosowań nie potrzebujemikrokontrolera zewnętrznego – wszystkieniezbędne elementy są zawarte w jegostrukturze.OpenAT – co to takiego?OpenAT jest wielozadaniowym systememoperacyjnym czasu rzeczywistegoz wywłaszczaniem. Według zapewnieńproducenta to jedyny system, który natywniedostarcza w swoim API funkcje obsługiusług bezprzewodowych.Pisząc programy pod kontrolą możnawybrać jedną z dwóch metod. W pierwszejz nich tworzy się programy, których usługisą wywoływane przez funkcje systemu operacyjnego,np. dla ustanowienia połączeniabędzie to adl_callSetup(„697661441”,ADL_CALL_MODE_VOICE). Przy użyciudrugiej wywołuje się komendy AT za pomocąfunkcji adl_atCmdSend() (na przykładadl_atCmdSend(„ATDT 697661441”,ATIRspHandler)).Komendy do modemu można równieżprzesyłać w postaci tekstu poprzez interfejsUART lub USB. Korzystając z tej metodyoraz z tego, że prawie wszystkie funkcjezawarte w API mają swoje odpowiednikiAT, można tworzyć aplikacje nawet bezznajomości API, a jedynie znając niecoELEKTRONIKA PRAKTYCZNA 3/<strong>2012</strong>rozszerzone komendy AT Hayes’a. Oczywiście,trudno w takiej sytuacji mówić o programowaniuz użyciem API. Warto równieżwspomnieć, że korzystając z OpenAT możnarównież tworzyć własne komendy AT.Drugą charakterystyczną cechą programówpracujących pod kontrolą systemuOpenAT jest ich stopień skomplikowania,zależny od szczegółowości zasięgu kontroliposzczególnych elementów. Pod tymstwierdzeniem należy rozumieć monitorowanielub pomijanie zdarzeń związanychnp. z połączeniem głosowym. Jeśli chcemykontrolować takie zdarzenia, należy wywołaćfunkcję z rodziny adl_XXXSubscribe-(wskaźnik_na_funkcję), gdzie jest XXX zależneod rodzaju obsługiwanych zdarzeń.Wtedy, za każdym razem, gdy wystąpizdarzenie związane z połączeniem, będziewywoływana funkcja o adresie wskaźnik_na_funkcję.System dostarcza mechanizmów, takichjak: timery, obsługa pamięci (o dostępieswobodnym RAM i wbudowanej pamięciFLASH), semafory, przerwania (wewnętrznei zewnętrzne) oraz inne, charakterystycznedla systemów operacyjnych.Ale – jak to było wspomniane wcześniej– dostarcza także API do obsługi usług sieciGSM oraz urządzeń peryferyjnych. Obok„zwyczajnych” funkcji obsługi np. połączeńgłosowych czy wysyłania i odbiorukomunikatów SMS, zaimplementowanorównież funkcje specjalne, jak szyfrowanie– warto przyjrzeć się dokumentacji API.Na stronie producenta (www.sierrawireless.com)znajduje się darmowe środowiskoIDE oparte na popularnym Eclipse.Zawiera ono edytor, kompilator, debuggeroraz terminal do komunikacji z Q2687,czyli wszystko co jest niezbędne do pracyz modułem. Program może zaczynać sięw dwojaki sposób: albo wywołując funkcjęadl_main(), w której wykonywane są kolejnejego kroki, albo umieszczając zadaniaw specjalnej strukturze adl_InitTasks_t. Jeślizostanie ona zdefiniowana, zadania sąwywoływane automatycznie.Przykładowy projekt – domofonDziałanie modułu zostanie zademonstrowanena przykładzie domofonu bezprzewodowego.Chodzi o to, aby odstraszyćpotencjalnego złodzieja np. przedrabunkiem mieszkania. W momencie, gdyosoba stojąca przed domem wciśnie przyciskdomofonu, wykonywane jest połączenietelefoniczne do właściciela, który możebyć – przykładowo – za granicą, natomiastosoba stojąca przed domofonem nic o tymnie wie. Dodatkowo, właściciel za pomocąklawiatury swojego telefonu może sterowaćurządzeniami podłączonymi do przekaźników.Pierwsze wciśnięcie danej cyfrypowoduje włączenie, następne – wyłączenie.Budowa proponowanego urządzeniajest pokazana na rysunku 1. Przycisk B2służy do wyzwalania zewnętrznego przerwania,który z kolei powoduje wykonaniepołączenia głosowego na z góry zdefiniowanynumer telefonu (właściciela). Za pomocąprzycisków telefonu można sterowaćprzekaźnikami K1 oraz K2.Kod programu zamieszczono na listingu1. Działanie zaczyna się w funkcjiadl_main(). Na początek zostaje wywołanafunkcja tworząca odbiornik zdarzeń zgłaszanychod karty SIM. Jej pierwszy argumentto numer PIN karty, natomiast drugito nazwa funkcji wywoływanej przy zdarzeniu.Jeśli teraz spojrzymy na kod funkcjiSimHandler(), to zobaczymy, że przyjmujeona jeden parametr – Event. W zależnościod zdarzenia, przybiera ona inną wartość(przedstawione są one w możliwych wartościachinstrukcji switch). Nas interesujeADL_SIM_EVENT_FULL_INIT, co oznacza,że z powodzeniem przeprowadzono pełnąinicjalizację. W tym momencie wywoływanajest funkcja pomocnicza inicjalizującadziałanie reszty modułu. Gdybyśmyod razu przeprowadzili tę inicjalizację,bez czekania na zakończenie ADL_SIM_EVENT_FULL_INIT, to bardzo możliwe, żenie wszystkie peryferia byłyby gotowe do105

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!