Menu English Ukrainian Rosyjski Strona główna

Bezpłatna biblioteka techniczna dla hobbystów i profesjonalistów Bezpłatna biblioteka techniczna


ENCYKLOPEDIA RADIOELEKTRONIKI I INŻYNIERII ELEKTRYCZNEJ
Darmowa biblioteka / Schematy urządzeń radioelektronicznych i elektrycznych

Alarm czasu podawania leku przez USB. Encyklopedia elektroniki radiowej i elektrotechniki

Bezpłatna biblioteka techniczna

Encyklopedia radioelektroniki i elektrotechniki / Medycyna

Komentarze do artykułu Komentarze do artykułu

Osoby starsze, które są zmuszone regularnie zażywać leki, często mają trudności z utrzymaniem własnego schematu leczenia. Ale czasami od terminowego stosowania się do zaleceń lekarza zależy nie tylko zdrowie, ale także samo życie. Oprócz zwykłych metod organizacyjnych rozwiązania problemu można zastosować również środki techniczne. Należą do nich proponowany alarm, który codziennie, zgodnie z wprowadzonym w nim harmonogramem, wysyła sygnały przypominające o konieczności zażywania leków.

Wiele starszych osób, co zrozumiałe, ma trudności z pracą z nowoczesnym oprogramowaniem. Jeśli chodzi o urządzenia alarmowe, to większość z nich to właściwie nieco unowocześnione budziki, niezdolne do pracy według harmonogramu nawet z dwoma, trzema rodzajami leków i ergonomicznie nieprzystosowane do użytku przez osoby starsze.

Opracowany przez autora ogólny widok alarmu, który posiada osiem niezależnych kanałów (w zależności od liczby komórek na leki), z których każdy można skonfigurować tak, aby wysyłał do czterech sygnałów przypominających dziennie (łącznie można wysłać 32 sygnały) wysłane) pokazano na ryc. 1. Aby wprowadzić lub dostosować harmonogram przyjmowania leków, urządzenie to podłącza się za pomocą interfejsu USB do komputera, na którym uruchomiony jest specjalny program. Po załadowaniu harmonogramu alarm działa autonomicznie.

Timer leków USB
Ryż. 1. Widok ogólny sygnalizatora

Zarówno część sprzętowa, jak i programowa alarmu zostały zaprojektowane z uwzględnieniem użytkowania przez osoby starsze, w tym także te z wadą wzroku. Obsługa urządzenia jest niezwykle uproszczona, a w programie zastosowano rozwiązania algorytmiczne i interfejsowe, które znacznie zwiększają łatwość obsługi. Ponadto przy projektowaniu alarmu wzięto pod uwagę środki bezpieczeństwa elektrycznego.

Alarm zasilany jest z sieci ~230 V, a w przypadku zaniku prądu automatycznie przełącza się na zasilanie z wbudowanego akumulatora. Moc pobierana z sieci nie przekracza 5 W, czas pracy z akumulatora o pojemności 800 mAh sięga trzech dni. Zapewnia to bezpieczeństwo harmonogramu nawet podczas długotrwałej przerwy w dostawie prądu.

Obwód alarmowy pokazany jest na rys. 2. Zasada działania jest prosta: program mikrokontrolera co sekundę porównuje wartość aktualnego czasu z zadanym czasem sygnału. Jeżeli dojdzie do dopasowania, urządzenie emituje sygnał dźwiękowy będący jedną z kilku dowolnie wybieranych melodii oraz włącza wskaźnik świetlny odpowiedniej komórki z lekiem. Jednocześnie czas wysłania tego sygnału zostaje przeniesiony na dzień następny. Aby wyłączyć sygnały dźwiękowe i świetlne, wystarczy nacisnąć przycisk potwierdzenia SB1.

Timer leków USB
Ryż. 2. Obwód sygnalizatora (kliknij aby powiększyć)

Zastosowany w sygnalizatorze mikrokontroler ATmega8A-PU (DD1) może pracować przy napięciu zasilania obniżonym do 2,7 V. Częstotliwość taktowania mikrokontrolera wynoszącą 12 MHz ustawiana jest za pomocą rezonatora kwarcowego ZQ1. Alarm dźwiękowy jest montowany na mikroukładzie syntezatora muzycznego UMS8-08 (DD2). Mikrokontroler włącza sygnał audio, wysyłając wysoki poziom na wejście S chipa syntezatora. Sygnał rozbrzmiewa w sposób ciągły, aż do naciśnięcia przycisku SB1. Źródłem dźwięku jest emiter piezoelektryczny HA1. Głośność jest kontrolowana przez zmienny rezystor R16. Melodie sortuje się poprzez naciśnięcie przycisku SB2 podczas odtwarzania. Bardziej szczegółowe informacje na temat mikroukładów serii UMS podano w [1].

Sygnalizator posiada źródło transformatorowe o stabilizowanym napięciu 5 V, nie pokazane na schemacie, zmontowane według tradycyjnego obwodu na zintegrowanym stabilizatorze 7805. W przypadku zaniku napięcia w sieci zasilającej urządzenie przełącza się na zasilanie z akumulatora GB1. Średni prąd pobierany z niego nie przekracza 5 mA. Jeśli w sieci jest napięcie, akumulator jest ładowany w sposób ciągły dzięki obwodom VD5, VD6, R18. Zaleca się jednak wyłączanie go raz w miesiącu i wykonanie pełnego cyklu rozładowywania do napięcia 3 V i ładowania za pomocą zewnętrznej ładowarki.

Mikroukład syntezatora muzycznego UMS8-08 można zastąpić innym z serii UMS7 i UMS8. Różnią się jedynie zestawem melodii. Dopuszczalna jest wymiana tranzystora KT3102B na KT3102G, KT3102E lub importowany BC547, a także na KT315B lub KT315G, jeśli rezystancja rezystora R17 zostanie zmniejszona do 51 kOhm. Zamiast diod KD522B odpowiednie są KD521A, KD521B, KD522A, 1N4148 i podobne. Wszystkie rezystory stałe to C2-33N lub MLT. Kondensatory tlenkowe C3 i C6 - K50-83, K50-16 lub importowane. Pozostałe kondensatory to ceramiczne K10-73-1b, K10-17v. Dowolne diody LED nadają się w obudowach o średnicy 5 mm o pożądanej barwie świecenia. W wersji autorskiej jako HL1 zainstalowana jest zielona dioda LED, aby na próżno nie przeszkadzać pacjentowi, reszta jest czerwona. Złącze XS1 - gniazdo USB-BF.

Bateria GB1 składa się z trzech akumulatorów Ni-Mh rozmiaru AA o pojemności 80 mAh. Można stosować akumulatory o innych pojemnościach, jednak wskazane jest dobranie rezystora R18 o takiej rezystancji, aby początkowy prąd ładowania akumulatora rozładowanego do napięcia 3 V był liczbowo równy 0,1 jego pojemności nominalnej.

Alarm montowany jest na standardowej perforowanej płycie montażowej o wymiarach 70x50 mm i odstępie perforacji 2,54 mm. Sposób montażu: na zawiasach, mocowany klejem termotopliwym. Ze względu na prostotę obwodu nie zastosowano okablowania drukowanego. Wszystkie elementy urządzenia, za wyjątkiem diod LED HL2-HL9, umieszczone są w plastikowej skrzynce rozdzielczej o klasie szczelności IP67 o wymiarach 80x80x40 mm.

Złącze XS1 umiejscowione jest na małej płytce drukowanej, naprzeciwko niej w ściance puszki wycięty jest otwór o odpowiedniej wielkości. Elementy HA1, HL1, GB1, R16, SB1 mocuje się do pokrywy pudełka za pomocą gorącego kleju. Przycisk SB2, który nie jest związany ze sterowaniem operacyjnym, znajduje się na płytce drukowanej. Na ryc. Rysunek 3 pokazuje względne położenie płytki drukowanej i elementów zdalnych wewnątrz skrzynki rozdzielczej.

Timer leków USB
Ryż. 3. Względne położenie płytki drukowanej i elementów zdalnych w skrzynce przyłączeniowej

Leki umieszczone są w standardowej kasecie na elementy radiowe składającej się z ośmiu komórek z szufladami. Każda komórka ma wymiary 112x55x120 mm. Całkowite wymiary uchwytu kasety wynoszą 224x110x120 mm. Ponieważ kuwety nie są szczelnie zamknięte, ale są dość obszerne, leki należy przechowywać w oryginalnych opakowaniach. Uchwyt na kasetę zapewnia także ochronę przed światłem, co jest niezbędne przy przechowywaniu niektórych rodzajów leków. Na przednich panelach ogniw znajdują się rowki na tabliczki z nazwami leków.

Skrzynka rozdzielcza mocowana jest do lewej bocznej ściany skrzynki kasetowej za pomocą śrub i nakrętek M3. Diody LED HL2-HL9 są umieszczone pojedynczo na panelu przednim każdej celi i są połączone z urządzeniem za pomocą elastycznych przewodów ułożonych w rurkach PCV wewnątrz ogniw i zwiniętych z tyłu kasety. Rezerwa długości każdej pary przewodów prowadzących do diod LED powinna zapewniać swobodne wydłużenie ogniwa do 75...80% stanu pełnego otwarcia.

Załączony do artykułu plik USB_HID_Note.hex należy wczytać do pamięci programu mikrokontrolera. Konfiguracja mikrokontrolera musi odpowiadać pokazanej w tabeli. 1. Prawidłowo zmontowane urządzenie nie wymaga instalacji. Pożądaną jasność diod LED można ustawić zmieniając ich prąd w zakresie 5...10 mA za pomocą wybranych rezystorów R7-R15.

Tabela 1

Wyładowania Stan
KOPT 0
CKSEL [3: 0] 1111
SUT [1: 0] 10
BODEN 1
WDE 1
RSTDISBL 1

Z punktu widzenia specyfikacji USB urządzenie należy do klasy HID [2] z programową implementacją interfejsu USB opartą na znanym sterowniku AVR V-USB [3]. Przypomnę, że w tym przypadku konieczne jest przełączenie interfejsu w tryb wolnego USB 1.1, co zgodnie ze specyfikacją odbywa się za pomocą rezystora podłączonego pomiędzy liniami interfejsu D- i Vautobus (w tym przypadku jest to rezystor R4).

Zastosowano jedną ze standardowych opcji podłączenia mikrokontrolera z jego zasilaniem przy obniżonym napięciu poprzez diody VD1 i VD2. Zastosowanie tych diod jest pożądane pomimo obecności akumulatora, gdyż eliminuje wpływ jego napięcia na koordynację poziomów logicznych magistrali USB i mikrokontrolera.

Mikrokontroler pracuje z częstotliwością taktowania 12 MHz, mieszczącą się w zakresie dozwolonym dla V-USB. Jego program napisany jest w języku C w środowisku programistycznym AVR Studio 4. Tekst programu (plik main.c) zawiera szczegółowy komentarz. Wykorzystano wersję sterownika vusb-20100715 [4] i kompilator WinAVR-20100110 [5].

Biblioteka V-USB jest dobrze udokumentowana, dlatego uwzględnione zostaną tutaj jedynie punkty bezpośrednio związane z realizacją projektu lub związane z jego funkcjonalnością. Szczegółowy proces tworzenia programu w oparciu o bibliotekę V-USB krok po kroku opisano w [6].

Kluczowe punkty, na które należy zwrócić uwagę podczas tworzenia programu w AVR Studio:

- wszystkie pliki z folderu usbdrv archiwum V-USB należy skopiować do folderu projektu;

- do projektu AVR Studio należy dodać pliki usbdrv.c, usbdrvasm.S, oddebug.c (poprzez pozycję menu kontekstowego „Dodaj istniejący plik źródłowy…” w drzewie projektu);

- w ustawieniach projektu (Projekty → Opcje konfiguracji → Ogólne → Częstotliwość, Hz) należy ustawić częstotliwość taktowania mikrokontrolera na 12000000 Hz. Na podstawie tej wartości AVR Studio określi kompilatorowi stałą F_CPU używaną przez V-USB.

Niezbędna konfiguracja V-USB zawarta jest w pliku usbconfig.h, który również powinien znajdować się w folderze projektu. Standardowy plik konfiguracyjny należy zastąpić plikiem załączonym do artykułu. W tabeli 2 zawiera listę najważniejszych stałych zdefiniowanych w tym pliku. Możliwość swobodnego rozwoju urządzeń USB HID wiąże się z istotną kwestią – musi wykorzystywać pary identyfikatorów VID/PID zgodnie z dokumentem USB-IDs-for-free.txt z biblioteki V-USB [3].

Tabela 2

ÐšÐ¾Ð½Ñ N, Ð ° ° Ð½Ñ D Wartość Zawartość
USB CFG NAZWA PORTU D Port połączenia autobusowego
BIT USB CFG DMINUS 4 Bit portu, do którego podłączona jest linia D-line
USBCFGDPPLUSBIT 2 Bit portu, do którego podłączona jest linia D+ (należy podłączyć do wejścia przerwania INTO)
KLASA INTERFEJSU USB CFG 3 (ukrył) Klasa urządzenia
USB CFG MAKSYMALNA MOC MAGISTRALI 100 Maksymalny pobór prądu z magistrali USB. mama
USB CFG HID DESKRYPTOR RAPORTU DŁUGOŚĆ 22 * Długość deskryptora raportu HID
ID DOSTAWCY USB CFG OxCO, 0x16 Identyfikator producenta urządzenia
ID URZĄDZENIA CFG USB 0xDF, 05xXNUMX ID produktu

*) Wartość ta musi być równa rozmiarowi tablicy znaków PROGMEM usbHidReportDescriptor w programie.

Program wykorzystuje format czasu UNIX, gdzie wartością czasu jest liczba sekund, które upłynęły od 00:00:00 UTC 01.01.1970. Alarm nie wyświetla czasu wizualnie, co pozwala uniknąć niepotrzebnego komplikowania obwodu i algorytmu jego działania. Zmienna pdata służy do przesyłania znaczników czasu - czterobajtowych wartości czasu UNIX.

Maksymalna ilość sygnałów wysyłanych w ciągu dnia jest określona w programie stałą NUM_ CALLS. Do przechowywania wartości czasu używana jest tablica u_time o rozmiarze NUM_CALLS+1. W tym przypadku element tablicy u_time[NUM_CALLS] zawiera aktualny czas, a reszta - czas wysłania sygnałów. Każdemu kanałowi (komórce kasety z lekiem) przypisane są cztery elementy tablicy. Przykładowo pierwsza komórka zawiera elementy od u_time[0] do u_time[3], druga – od u_time[4] do u_time[7] itd. Jeżeli wartość elementu tablicy wynosi zero, uwzględniany jest odpowiedni sygnał nieaktywny. Takie podejście pozwala uprościć algorytm przesyłania i przetwarzania informacji.

Deskryptor opisujący strukturę pakietu oraz procedury przesyłania informacji usbFunctionWrite i usbFunctionRead tworzone są w oparciu o standardowe rozwiązania. Podstawowe funkcje są szczegółowo opisane w pliku nagłówkowym usbdrv.h z [3]. Uzupełnieniem procedur są warunki sprawdzania liczby przetworzonych kanałów. Liczba elementów tablicy odebranych przez urządzenie z komputera jest o jeden większa niż liczba wysłana, ponieważ komputer zawsze przesyła aktualny czas do synchronizacji.

Na początku głównej procedury main() konfigurowane są rejestry we/wy, współczynnik podziału częstotliwości zegara ustawiany jest na 256, a rejestr timera TCNT1 jest początkowo ładowany liczbą potrzebną do utworzenia przedziału czasu wynoszącego 1 sekundę. Przerwania związane z przepełnieniem timera są domyślnie wyłączone.

Następnie program wchodzi do pętli głównej. Jeżeli nie ma połączenia USB, przerwania zostaną włączone globalnie oraz w przypadku przekroczenia timera 1. W pętli for każdy element tablicy u_time[i] o wartości niezerowej zostanie sprawdzony, czy jest równy bieżącemu czas. W przypadku wykrycia remisu włączy się brzęczyk i dioda LED odpowiedniej komórki, a czas odpowiedzi tego kanału zostanie zwiększony o 86400 s (na dzień).

Następnie sprawdzany jest poziom na wejściu PB0. Jeżeli jest niski (naciśnięcie przycisku SB1 w celu potwierdzenia odbioru sygnału), wszystkie wyjścia zostaną ustawione na niski poziom logiczny, co spowoduje wyłączenie sygnałów.

Równolegle co sekundę po przekroczeniu timera 1 uruchamiana jest procedura obsługi przerwania TIMER1_OVF_vect. Przywraca ustawienie licznika TCNT1, zwiększa aktualną wartość czasu w elemencie tablicy u_time[NUM_ CALLS] oraz zmienia stan wyjścia PB1 (podłączona do niego dioda HL1 miga z okresem 2 s).

Kiedy urządzenie jest podłączone do USB, wejście PC5 odbiera wysoki poziom z linii Vbus magistrali USB. W tym przypadku warunek if (PINC & (1<<5)) wyłącza przerwania przepełnienia timera 1 i aktywuje sterownik V-USB. Dioda HL1 włącza się i świeci w sposób ciągły.

Po aktywacji sterownika V-USB możliwa staje się wymiana informacji poprzez USB. Pętla wywołuje funkcję usbPoll(), która utrzymuje interfejs aktywny w przypadku braku wymiany informacji. Proces przekazywania informacji opisano szerzej w części artykułu dotyczącej programu komputerowego.

Przejdźmy dalej do rozważenia programu komputerowego służącego do wprowadzania harmonogramu do urządzenia sygnalizacyjnego USB_HID_Note. Jak widać z jego głównego okna (rys. 4), podczas procesu tworzenia szczególną uwagę zwrócono na optymalizację interfejsu, aby zapewnić łatwość obsługi starszym użytkownikom. Program działa pod Windows XP, Windows Vista, Windows 7, Windows 8, Windows Server 2003, Windows Server 2008. Jego wydajność w Windows 10 i Windows Server 2012 nie została przetestowana, ale istnieją podstawy, aby założyć, że będzie działać normalnie.

Timer leków USB
Ryż. 4. Okno główne programu komputerowego do wprowadzania harmonogramu do sygnalizatora

Po uruchomieniu programu przy podłączonym do komputera urządzeniu alarmowym należy nacisnąć przycisk ekranowy "Podłączyć". Wyświetli się komunikat informujący o wyniku próby połączenia. Jeśli się powiedzie, przyciski ekranowe staną się dostępne „przeczytaj wszystko” i "Ratować".

Aby wprowadzić harmonogram, wystarczy wybrać numer komórki z pierwszej listy rozwijanej (selektora), a numer sygnału dla tej komórki z drugiej listy. Następnie ustaw żądany czas sygnału, kliknij flagę po lewej stronie liczby, aby zezwolić lub wyłączyć wybraną kombinację komórki i sygnału (kolor flagi zmienia się) i wpisz nazwę leku w jedynej dostępnej linii. Nazwa leku jest powiązana z numerem komórki, więc zawartość wiersza zmienia się dopiero po przełączeniu pierwszego selektora. Flaga włączenia odnosi się do wybranej kombinacji numerów komórek i sygnałów.

Wypełnij więc wszystkie niezbędne komórki. Domyślny stan komórek jest wyłączony, nie ma potrzeby aktywowania ich wszystkich. W razie potrzeby ustawienia komórki można zmienić. Wprowadzone wartości zapisywane są dynamicznie.

Naciskając przycisk ekranowy Harmonogram przesyłany jest do urządzenia alarmowego i zapisywany do pliku konfiguracyjnego. Wyświetli się komunikat informujący o wyniku przelewu. Harmonogram zapisany w urządzeniu alarmowym można z niego odczytać naciskając przycisk ekranowy . Następnie można go obejrzeć w oknie programu, w razie potrzeby edytować i załadować z powrotem do urządzenia alarmowego. Naciśnięcie przycisku ekranowego usuwa nazwę leku w odpowiednim oknie, dając możliwość wpisania kolejnej.

Ważną cechą alarmu jest to, że po podłączeniu do USB zatrzymuje bieżący licznik czasu. W momencie zamknięcia programu komputerowego harmonogram i aktualny czas są automatycznie zapisywane w alarmie (synchronizacja). Dlatego po zamknięciu programu należy jak najszybciej odłączyć kabel USB od urządzenia alarmowego, aby zminimalizować różnicę pomiędzy czasem rzeczywistym a czasem „systemowym”.

Jednak nawet kilkuminutowa różnica w rozpatrywanym przypadku nie jest krytyczna, dlatego nie podjęto żadnych działań w celu wyeliminowania tej cechy. Jeżeli po zakończeniu programu USB_HID_Note urządzenie alarmowe przypadkowo pozostanie podłączone do komputera na dłuższy czas, wystarczy uruchomić ten program ponownie i nacisnąć przycisk ekranowy , potem dalej i właśnie tam lub po prostu zamknij program. Przywrócony zostanie prawidłowy czas alarmu, po czym będzie można odłączyć kabel USB.

Nazwy leków zapisywane są w pliku konfiguracyjnym programu i wyświetlane na ekranie komputera po podłączeniu urządzenia alarmowego. Wraz z wprowadzaniem harmonogramu do programu należy upewnić się, że każda komórka kasety jest wyposażona w przywieszkę z odpowiednim napisem.

Program USB_HID_Note napisany jest w języku C++ w środowisku programistycznym Qt 5.3.2. Wybór tego środowiska wynika z jego bezpłatnego charakteru, wieloplatformowości, rozbudowanych możliwości i unikalnych wbudowanych narzędzi do tworzenia i debugowania aplikacji dowolnego poziomu, w połączeniu z elastycznością rozwiązań interfejsowych. Typ implementacji aplikacji to Qt Widget. Tekstem źródłowym widgetu jest plik widget.cpp. Cały projekt jest skompilowany do archiwum USB_HID_Note_ pro.zip, dołączonego do artykułu.

Cechą szczególną programu jest bezpośredni dostęp do funkcji bibliotek SetupAPI i HID. Dlatego komputer, na którym odbywa się kompilacja, musi posiadać pliki setupapi.lib i hid.lib odpowiadające wersji jego systemu operacyjnego. Pliki te są zwykle zawarte w pakiecie WinDDK. Aby uniknąć konieczności całkowitej instalacji całego pakietu WinDDK, pliki różnych wersji WinDDK 7600 zostały przez autora zebrane w jednym folderze winddk_libs, który jest dostępny na serwerze FTP redakcji. Kompilację i debugowanie można przeprowadzić w systemie Windows 16385.1, Windows Server 7 R2008, Windows Vista SP2, Windows Server 1 SP2003, Windows XP SP1 lub nowszym. Plik .pro musi jawnie wskazywać pełne ścieżki do bibliotek, np. jak w tabeli. 3.

Tabela 3

Timer leków USB

Skompilowany plik wykonywalny programu wraz z plikami konfiguracyjnymi (.cfg) i stylami (.qss) znajduje się w folderze USB_HID_Note załączonym do artykułu. Znajdują się tam również niezbędne biblioteki dynamiczne Qt (pliki .dll). Jak wiadomo, ten wymóg jest obowiązkowy dla każdej aplikacji tworzonej w Qt. Wykaz tych bibliotek dla rozpatrywanego przypadku podano w tabeli. 4.

Tabela 4

Timer leków USB

Wszystkie biblioteki są kopiowane z folderu ..ToolsQtCreator w, z wyjątkiem dwóch ostatnich, które są kopiowane z platform ..5.3mingw482_32plugins i umieszczane w odpowiednim podfolderze folderu roboczego programu. Można je także samodzielnie skopiować z komputera, na którym program został skompilowany, do folderu roboczego lub systemowego programu (rozmiar archiwum - 126 MB, po rozpakowaniu - 400 MB).

Algorytm programu opiera się na rozwiązaniach standardowych podanych w [7]. Cechy implementacji związane są przede wszystkim z wykorzystaniem różnych języków programowania (w przeciwieństwie do tych opisanych w źródłowym Delphi i C#). Aby móc korzystać z funkcji HID API i SetupAPI, należy dołączyć odpowiednio pliki nagłówkowe hidsdi.h i setupapi.h.

Programem obsługi kliknięcia przycisku na ekranie jest procedura on_Connect Button_clicked(). Najpierw funkcja sterownika HidD_GetHidGuid określa identyfikator GUID powiązany z identyfikatorem HID. Następnie wywoływane są funkcje SetupAPI w celu utworzenia modułu wyliczającego interfejs i uzyskania nazwy HID urządzenia. Zostało to szczegółowo opisane w [7] na s. 333. W tym przypadku celowo nie wykorzystano funkcji ustalenia nazwy produktu lub jego numeru seryjnego. Sprawdzana jest tylko para VID/PID. Ma to na celu uniknięcie możliwości komercyjnego wykorzystania urządzenia. Wartości VID/PID określa stała Dev_VID_PID w pliku global_vars.h.

Po wykryciu urządzenia kontrola jest przekazywana z powrotem do sterownika HID. Funkcja CreateFile żąda swojego uchwytu, HidD_GetPreparsedData zwraca wskaźnik do bufora zawierającego informacje o parametrach urządzenia, a HidP_GetCaps zwraca strukturę z wartościami tych parametrów.

W odróżnieniu od powszechnie stosowanej metody, w której rozmiar raportu jest przypisywany bezpośrednio w programie, tutaj o jego wartości decyduje element struktury Caps.FeatureReportByteLength uzyskany z deskryptora. Pozwala to na stworzenie bardziej uniwersalnego rozwiązania, które nie wymaga wprowadzania zmian w programie i jego ponownej kompilacji w przypadku zmiany rozmiaru raportu w deskryptorze urządzenia.

Rzeczywista wymiana informacji odbywa się za pomocą funkcji HidD_Get Feature (odczyt) i HidD_SetFeature (zapis), wywoływanych w odpowiednich procedurach data_read() i data_transfer() w cyklach zgodnie z liczbą komórek. Jak już wspomniano, liczba elementów tablicy odebranych przez sygnalizator jest o jeden większa niż liczba wysłanych, ponieważ w celu synchronizacji komputer zawsze przesyła aktualny czas.

Szczegółowy komentarz opisujący cel najważniejszych procedur dostępny jest w tekście programu. Cel pozostałych procedur jest standardowy lub intuicyjny, np. on_comboBox_ currentIndexChanged() - obsługa zdarzenia zmiany indeksu comboBox. Zakomentowane linie qDebug i towarzyszące były przeznaczone wyłącznie do debugowania programu. Jeśli potrzebujesz debugować i przeglądać postęp wymiany informacji w wbudowanym oknie debuggera Qt, wszystkie te instrukcje powinny zostać odkomentowane.

Program przechowuje ogólną konfigurację w pliku settings.cfg. Ma zwykły format tekstowy i w razie potrzeby można go edytować ręcznie. Jej sekcja [Ogólne] zawiera liczbę komórek NUM_BOX=8 oraz liczbę sygnałów przypadającą na komórkę NUM_BOX_CALL=4, w sekcji [widok] położenie okna programu na ekranie jest określone w liczbach całkowitych. Sekcja [names] zawiera nazwy leków według komórek, sekcja [used] – flagi aktywności komórek, sekcja [times] – wartości czasów odpowiedzi w formacie znacznika czasu UNIX. Te ostatnie mają głównie charakter informacyjny, ponieważ wartości operacyjne znajdują się w pamięci mikrokontrolera detektora. Podczas ręcznej edycji pliku należy pamiętać, że parametry nazwy są w formacie kodu źródłowego C/C++/Java (na przykład u3256).

Na zakończenie kilka rekomendacji dla tych, którzy chcą samodzielnie zmieniać ilość sygnałów wysyłanych przez urządzenie. Jeśli liczba komórek jest stała, stosunkowo łatwo jest zmienić liczbę sygnałów na komórkę. W programie mikrokontrolera należy w tym celu najpierw zmienić stałą NUM_CALLS. Jego wartość powinna być równa iloczynowi liczby komórek i maksymalnej liczby sygnałów na komórkę. W przypadku rozpatrywanym w artykule jest to 8x4=32. Po drugie, w procedurze switch... case... liczba instrukcji case w każdej linii musi być równa liczbie sygnałów na komórkę. W tym przypadku argumenty instrukcji case muszą tworzyć ciągłą sekwencję od 0 do NUM_CALLS-1. Treść funkcji i instrukcja break pozostają niezmienione. Program należy następnie zapisać i ponownie skompilować.

Nie są wymagane żadne regulacje w programie komputerowym. Wystarczy zmienić wartość stałej NUM_BOX_CALL (liczba sygnałów na komórkę) w pliku settings.cfg. Musi ściśle odpowiadać temu, co jest zawarte w programie mikrokontrolera.

Programy dla mikrokontrolera i komputera można pobrać z ftp://ftp.radio.ru/pub/2017/01/signal.zip.

literatura

  1. Drinevsky V., Sirotkina G. Syntezatory muzyczne serii UMS. - Radio, 1998, nr 10, s. 85-XNUMX. XNUMX.
  2. Uniwersalna magistrala szeregowa. Informacje o HID. - Adres URL: usb.org/developers/hidpage/.
  3. V USB. - URL: obdev.at/products/vusb/index.html.
  4. Archiwum sterownikówvusb-20100715. - URL: obdev.at/downloads/vusb/vusb-20100715.tar.gz.
  5. Kompilator WinAVR-20100110. - Adres URL: sourceforge.net/projects/winavr/files/WinAVR/20100110/WinAVR-201 0 0110-install.exe/download.
  6. USB dla AVR. Część 2. Klasa HID na V-USB. - URL: we.easyelectronics.ru/electro-and-pc/usb-dlyaavr-chast-2-hid-class-na-v-usb.html.
  7. Agurov P. Praktyka programowania USB. - Petersburg: „BHV-Petersburg”, 2006.

Autor: D. Pankratiev

Zobacz inne artykuły Sekcja Medycyna.

Czytaj i pisz przydatne komentarze do tego artykułu.

<< Wstecz

Najnowsze wiadomości o nauce i technologii, nowa elektronika:

Nowy sposób kontrolowania i manipulowania sygnałami optycznymi 05.05.2024

Współczesny świat nauki i technologii rozwija się dynamicznie i każdego dnia pojawiają się nowe metody i technologie, które otwierają przed nami nowe perspektywy w różnych dziedzinach. Jedną z takich innowacji jest opracowanie przez niemieckich naukowców nowego sposobu sterowania sygnałami optycznymi, co może doprowadzić do znacznego postępu w dziedzinie fotoniki. Niedawne badania pozwoliły niemieckim naukowcom stworzyć przestrajalną płytkę falową wewnątrz falowodu ze stopionej krzemionki. Metoda ta, bazująca na zastosowaniu warstwy ciekłokrystalicznej, pozwala na efektywną zmianę polaryzacji światła przechodzącego przez falowód. Ten przełom technologiczny otwiera nowe perspektywy rozwoju kompaktowych i wydajnych urządzeń fotonicznych zdolnych do przetwarzania dużych ilości danych. Elektrooptyczna kontrola polaryzacji zapewniona dzięki nowej metodzie może stanowić podstawę dla nowej klasy zintegrowanych urządzeń fotonicznych. Otwiera to ogromne możliwości dla ... >>

Klawiatura Primium Seneca 05.05.2024

Klawiatury są integralną częścią naszej codziennej pracy przy komputerze. Jednak jednym z głównych problemów, z jakimi borykają się użytkownicy, jest hałas, szczególnie w przypadku modeli premium. Ale dzięki nowej klawiaturze Seneca firmy Norbauer & Co może się to zmienić. Seneca to nie tylko klawiatura, to wynik pięciu lat prac rozwojowych nad stworzeniem idealnego urządzenia. Każdy aspekt tej klawiatury, od właściwości akustycznych po właściwości mechaniczne, został starannie przemyślany i wyważony. Jedną z kluczowych cech Seneki są ciche stabilizatory, które rozwiązują problem hałasu typowy dla wielu klawiatur. Ponadto klawiatura obsługuje różne szerokości klawiszy, dzięki czemu jest wygodna dla każdego użytkownika. Chociaż Seneca nie jest jeszcze dostępna w sprzedaży, jej premiera zaplanowana jest na późne lato. Seneca firmy Norbauer & Co reprezentuje nowe standardy w projektowaniu klawiatur. Jej ... >>

Otwarto najwyższe obserwatorium astronomiczne na świecie 04.05.2024

Odkrywanie kosmosu i jego tajemnic to zadanie, które przyciąga uwagę astronomów z całego świata. Na świeżym powietrzu wysokich gór, z dala od miejskiego zanieczyszczenia światłem, gwiazdy i planety z większą wyrazistością odkrywają swoje tajemnice. Nowa karta w historii astronomii otwiera się wraz z otwarciem najwyższego na świecie obserwatorium astronomicznego - Obserwatorium Atacama na Uniwersytecie Tokijskim. Obserwatorium Atacama, położone na wysokości 5640 metrów nad poziomem morza, otwiera przed astronomami nowe możliwości w badaniu kosmosu. Miejsce to stało się najwyżej położonym miejscem dla teleskopu naziemnego, zapewniając badaczom unikalne narzędzie do badania fal podczerwonych we Wszechświecie. Chociaż lokalizacja na dużej wysokości zapewnia czystsze niebo i mniej zakłóceń ze strony atmosfery, budowa obserwatorium na wysokiej górze stwarza ogromne trudności i wyzwania. Jednak pomimo trudności nowe obserwatorium otwiera przed astronomami szerokie perspektywy badawcze. ... >>

Przypadkowe wiadomości z Archiwum

Przeciwutleniacz zmniejsza ryzyko nawrotu zawału serca i udaru mózgu 12.09.2018

Naukowcy z University of Oregon opracowali nowy sposób zmniejszenia ryzyka wtórnego zawału serca lub udaru mózgu.

Ataki serca u myszy powodowały, że komórki zapalne i płytki krwi łatwo przylegały do ​​wewnętrznej wyściółki tętnic w całym ciele – a zwłaszcza tam, gdzie znajdowała się płytka nazębna. W rezultacie powstały skrzepy krwi, które doprowadziły do ​​nowego zawału serca lub udaru.

Okazuje się, że leczenie myszy z zawałem serca lub udarem silnym przeciwutleniaczem apocyniną zmniejsza o połowę tworzenie się płytki nazębnej i zmniejsza stan zapalny w organizmie do poziomu poprzedzającego pierwszy atak.

Naukowcy wykryli lepkie komórki i płytki krwi za pomocą unikalnej formy obrazowania ultradźwiękowego, którą opracowali, aby przyjrzeć się molekułom wewnątrz naczyń krwionośnych.

Inne ciekawe wiadomości:

▪ Strony internetowe dowiadują się, jak się czują odwiedzający

▪ Lokalizacja strumienia dźwięku tworzy idealny sygnał

▪ Bezemisyjne samoloty

▪ Koniec magnetowidów PANASONIC

▪ Do szpitala - bez krawata

Wiadomości o nauce i technologii, nowa elektronika

 

Ciekawe materiały z bezpłatnej biblioteki technicznej:

▪ sekcja witryny Ochrona sprzętu elektrycznego. Wybór artykułu

▪ Artykuł Człowiek z zewnątrz. Popularne wyrażenie

▪ artykuł Kto wynalazł piłkę? Szczegółowa odpowiedź

▪ artykuł Składany stół warsztatowy. warsztat domowy

▪ suszący artykuł olejowy na żywicznych środkach osuszających (żywicach). Proste przepisy i porady

▪ artykuł Zasilacz ze sterowaniem mikrokontrolerem, 0-25 V. Encyklopedia elektroniki radiowej i elektrotechniki

Zostaw swój komentarz do tego artykułu:

Imię i nazwisko:


Email opcjonalny):


komentarz:





Wszystkie języki tej strony

Strona główna | biblioteka | Artykuły | Mapa stony | Recenzje witryn

www.diagram.com.ua

www.diagram.com.ua
2000-2024