Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 02:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 6 gru 2018, o 17:36 
Offline
Użytkownik

Dołączył(a): 14 wrz 2017
Posty: 85
Pomógł: 1

Cześć,
Rozpocząłem składanie do kupy, kodu do mojego projektu rejestratora temperatury. Przy tej okazji zastanawiam się nad
dobrymi praktykami w obsłudze komunikacji z tym urządzeniem. Będzie prościej jak opiszę o co chodzi.
Urządzenie w większości czasu jest w stanie uśpienia. Jeśli chcemy z niego coś odczytać poprzez moduł BLE należy go wybudzić magnesem poprzez załączenie kontaktronu. w tym momencie generowane jest przerywanie INT1.
Po takim wybudzeniu urzadzenie powinno być aktywne maks 10s i jeśli żaden komunikat nie przyjdzie po UART (załatwiane przez moduł BLE) ponownie idzie spac. Każda komenda która przyjdzie po UART powinna przedłużać ten czas wybudzenia o kolejne 5s. Pytanie jak najlepiej taki mechanizm zaprojektować, czy po prostu użyć timera i przerywania zegara? Jeśli tak to czy w INT1 po prostu regularnie odpytywać jakąś zmienną ustawianą przez przerywanie zegara a może po prostu sprawdzać ręcznie (o ile jest taka możliwość) rejestry zegara? W sumie podobną obsługę timeout'ów muszę zrobić przy obsłudzę kolejnych znaków komend np. oczytu danych z podanego okresu. Pomysłów mam parę ale jak się domyślam są sprawdzone metody i wolałbym nie kombinować.
Jeśli podobny problem był opinay w blue/greenbook to wdzięczny byłbym za namiary to po prostu przeanalizuje rozdział.

Michał



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2018, o 09:54 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Ja robię to mniej więcej tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oczywiście powyższe w pewnym uproszczeniu.
Każda przychodząca prawidłowa komenda po UART-cie nadpisuje zmienna "odliczanie" nową wartością, która jest regularnie zmniejszana w przerwaniu timera. Jeśli w ciągu 5 sekund nie nadpisze się zmienna, timer w końcu doliczy do zera i ustawi flagę umożliwiając wywołanie funkcji usypianie mikrokontrolera.
Napisałem to "na kolanie" bez sprawdzania, ale powinno działać. Tak mniej więcej robię u siebie.

edit
oczywiście timer nie musi być co 1 sekundę, napisałem tak żeby nie zaciemniać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO