Liczba postów: 2,376
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
Komunikacja po uart trwa określony czas, jak masz ustawione 9600 to w przybliżeniu 1 znak (bajt) leci 100us, a każdy bit, czyli stan na pinie wysoki/5V i niski/0V też trwają ponad 10us. Ale nawet taki wolny uC jak Atmega potrafi cały bajt wziąć z bufora w ciągu 1 cyklu zegara, czyli w UNO 63ns. To się po prostu czasowo rozjeżdża jak bierzesz 1 znak i każesz programowi coś z tym robić i jeszcze wynik tego działania od razu chcesz wysłać na ekran. GPS wysyła linie tekstu i taką trzeba dostarczyć do programu, wybrać moment gdy jest już faktycznie coś do wyświetlenia i wtedy to zrobić. Trzeba też wiedzieć, co z tego "zrobią krasnoludki" w bibliotece, a co trzeba samemu zapewnić.
Liczba postów: 884
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
43
A po co zmieniać termometry? jak ma sprzętowy serial który się nudzi. On nie zgubi znaków w przypadku transmisji 1wire.
Ale nie o to mi chodziło, bo pytał się jak zrobić wyświetlanie/ odświeżanie było na równie z odczytem danych gps. Dlatego mu odpisałem że to można bez millis-a wystarczy synchronizacja ale nie w takim kodzie co miał niech pogłówkuje.
Skoro idę na kibelek to nie mam ustawionego czasu na spłukiwanie lecz zrobię swoje i spłuczkę uruchomię. Takie proste czynności synchronizacyjne, ale nie da się jak widzę "while" coś co blokuje bo przecież siedząc na klopie mogę oglądać forum
czyli zrobię coś więcej niż tylko kibelek.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 119
Liczba wątków: 4
Dołączył: Sep 2023
Reputacja:
8
03-04-2024, 23:19
(Ten post był ostatnio modyfikowany: 03-04-2024, 23:23 przez oscarX.)
Typowy objaw, że gubisz co którąś daną z GPS. Ponieważ są tam sumy kontrolne, co nawet 1 bład powoduje odrzucenie całej linijki (sekwencji NMEA).
Dla próby spróbuj wyłaczyć odczyt termometrów - jeśli to gubienie znaków z seriala z powodu 1wire to GPS powinien działać płynnie. Jak pisałeś, robiłeś już takie próby i było dobrze.
Chyba najlepiej będzie odczyt termometrów zrobić po co którymś (np. co piątym) poprawnym odczycie prędkości. Czas idzie też w tej samej sekwencji czyli jak odczytasz prędkość to i czas. Nawet jak kolejna sekwencja się źle odczyta, to kolejna prędkość przyjdzie za sekundę, już skutki błędu powinny zaniknąć. I czytaj termometry pojedynczo - raz jeden, za następne 5 odczytów prędkości drugi. RTC w sumie dobre, ale chyba dobrze wiedzieć czy GPS działa. Jak startujesz w mieście i są kłopoty ze złapaniem tzw fixa dobrze jest postać chwilkę w odsłoniętym miejscu - w czasie ruchu w mieście warunki widzialności satelitów zmieniają się co chwila (budynki zasłaniają raz z lewej, raz z prawej) i odbiornik nie może ustalić z których satelitów korzystać.
Liczba postów: 12
Liczba wątków: 2
Dołączył: Mar 2024
Reputacja:
0
Dla wskazywania złapania fixa GPS wyświetla się symbol satelity, wcześniej jest x. Jednak to tez nie do końca działa, bo jak sygnał z satelitów zniknie, to x nie powraca. To jest kolejna rzecz, którą musiałbym wyprostować. Koncepcja z odczytem temperatury co kilka, kilkanaście a nawet kilkadziesiąt odczytów GPS jest słuszny, nawet co minutę będzie okej. RTC dawałby już aktualną godzinę od razu, na prędkość można poczekać.
Liczba postów: 12
Liczba wątków: 2
Dołączył: Mar 2024
Reputacja:
0
Rozgryzłeś to za dużo powiedziane. Wykonałem jakiś przykład prędkościomierza na wyświetlaczu LED, po czym go zaadaptowałem do LCD, więc o jej rozgryzieniu czy pełnym zrozumieniu mowy nie ma. Do mnie musicie jak do przedszkolaka - "idź zrób to, idź zrób tamto". Na razie próbuję rozkminić, jak zrobić naprzemienny odczyt termometrów co 60 sekund, żeby 1Wire nie zajmował za bardzo procesora, aby ten miał czas na zajęcie się prędkością. Ale od 10 godzin jestem w pracy i nawet nie miałem kiedy sobie tego rozmyślić.
Liczba postów: 12
Liczba wątków: 2
Dołączył: Mar 2024
Reputacja:
0
W jakichś 95% sobie poradziłem. GPS podłączyłem do sprzętowego UART, a odczyt termometrów ograniczyłem do dwóch na minutę dzięki funkcji millis. Jest prawie dobrze. Prawie, bo... chciałbym jeszcze sygnalizować fix lub jego brak (wyświetlenie odpowiedniej ikonki). Obecnie po włączeniu jest krzyżyk i po złapaniu fixa zmienia się on na symbol satelity. Ale, gdy fix się zerwie (np. po wjechaniu w tunel) lub odłączeniu odbiornika GPS, symbol satelity nadal się wyświetla. Nie wiem, jak to ugryźć, aby poprawnie rozpoznać i móc ustawić jakąś zmienną np. fixgps = 1, gdy sygnał jest oraz fixgps = 0, gdy go zabraknie, w jakikolwiek sposób.