Torkness Napisano Sierpień 27, 2015 Udostępnij Napisano Sierpień 27, 2015 Witajcie,mam do skomunikowania z atmegą 328p moduł GSM (Fibocom G510). Problem polega na "nieregularnych" odpowiedziach modułu. Nie mam pomysłu jak określać w którym momencie ustawiać flagę, informującą że rozkaz jest gotowy do przesłania. Opierając się na "bluebooku" kombinowałem ze zliczaniem LF i/lub CR ale czasem w komendzie zwrotnej dostaję 2, 3 a czasem nawet 4 razu te znaki. Długość komend/ilość odebranych znaków też nie wchodzi w grę bo ta waha się między 8 a 75. Zastanawiam się nad jakąś formą czasowego wyzwalania flagi (np 400ms od pierwszego znaku). Nie zależy mi na bardzo szybkiej komunikacji. Komendy będą wysyłane "w godzinach szczytu" raz na 1s. Mógłby ktoś podpowiedzieć w jaki sposób wrzucić zliczanie czasowe do przerwania (pamiętam że w blubooku było WYRAŹNIE napisane żeby nie wrzucać do przerwań _delay'ów) lub może jest jakaś inna metoda? Link do komentarza Share on other sites More sharing options...
jnk0le Styczeń 13, 2016 Udostępnij Styczeń 13, 2016 Najlepiej by było od razu przetwarzać w pętli głównej - ładujesz z bufora kołowego do pośredniego przychodzące dane aż trafisz na jakiś terminator np. i przetwarzasz dane. Dzięki temu co zostało wyplute w poprzedniej paczce (paczkach) możesz określić czy coś jeszcze przyjdzie. (Rozwiązanie dosyć podobne do tego) To tyle jeśli chodzi o moje wróżenie. 🙂 Najlepiej jakbyś dał przykładowe dane jakie ten modem może wypluć. Zastanawiam się nad jakąś formą czasowego wyzwalania flagi (np 400ms od pierwszego znaku). [...] Mógłby ktoś podpowiedzieć w jaki sposób wrzucić zliczanie czasowe do przerwania To wtedy nic nie odbierzesz Link do komentarza Share on other sites More sharing options...
MirekCz Styczeń 13, 2016 Udostępnij Styczeń 13, 2016 1. Spojrzałem na opis komend tego fibocom i tam w paczce masz indykator długości... nie warto by było z tego skorzystać? 2. Zrób przerwanie na timerze np. co 10 ms. W tym przerwaniu dodawaj tylko 1 do zmiennej ( zmienna typu volatile char lub podobnego, oczywiście nie dopuść do przepełnienia). Teraz w przerwaniu od uarta możesz tylko sprawdzać czy zmienna dodawana w timerze nie przekroczyła 40 ( czyli Twoich 400ms ) i jak przekroczyła to obrobić pakiet no i oczywiście wyzerować zmienną zliczaną w timerze. W ten sposób nie blokujesz przerwania. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »