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



Teraz jest 2 lut 2026, o 11:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 10 maja 2014, o 20:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Witam!

Mam taki problem, że chcę odczytać sobie całą ramkę z GPS'a, ale jakoś mi to nie idzie. Korzystam z bibliotek uarta Mirka, i kombinuje coś z kodem Antystatycznego z tego tematu: post35459.html?hilit=taki%20tam%20niby%20gps#p35459
Mój GPS to FGPMMOPA6H. Ogólnie nie wiem jak program Anty'ego ma działać. Przecież dopóki zmienna _uart_flag nie będzie miała wartości większej od 64 to program nie odczyta żadnego bajtu z uarta, a zarazem nie zwiększy tej _uart_flag która ma wartość 0 przez cały program, przez co progrm nigdy nie przejdzie warunku if(uart_falg >64). Prosze o jakies rozjeśnienie bo już nie mam pomysłów ;)

"Mój" kod wyglada tak :

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


I w sumie dopiero jak dam w while(1) odczyt char'a to dopiero coś czasami mi wyświetli, ale i tak dioda która ma mi pokazywac przeładowanie bufora zapala się co jakiś czas. Bufor zwiększyłem do 64 komórek.

Aha i GPS na pewno sprawny bo na terminalu na PC pokazują się piękne poprawne ramki.

pozdrawiam,
Piotrek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 maja 2014, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Jeśli się wzorowałeś na bibliotece @Anty to do odbioru używa on
bufora a nie bespośrednio UART-a , tak więc zmienna uart_flag
jest zwiększana w przerwaniu od odbioru znaku przez UART a sam
znak jest zapisywany w buforze.
W przytoczonym przez Ciebie temacie znajdziesz opis.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2014, o 08:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Czyli chodzi o to, że Anty na początku zapisuje dane odebrane z uarta do bufora cyklicznego, a _uart_flag słuzy tylko jako licznik elementów do wyświetlenia ? Aha i _uart_flag się zwiększy jak tylko wywoła się przewanie ? A dałoby się to zrobić bez bufora ? Mam na myśli po prostu dac wszystko w przerwaniu i sobie już odpowiednip te dane analizować .


Edit:

Tak zmodyfikowałem kod przerwania w pliku mkuart.c i widać jak znaki się na wyświetlaczu mieszaja, czym to może być spowodowane ? :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Edit:

Chyba znalazlem błąd - gdy wysyłam z realterm'a "GPGGA" to wyświetla mi tylko GPGA tak jakby dublowane znaki znikały ... Kurcze co to może byc ?

Moży być to spowodowane tym że korzystam z bootloadera ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2014, o 15:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Udało się uruchomic pobieranie prędkosci i współrzednych, ale niestety nie sa one stałe tzn. co chwilę się zmieniają i umieją skoczyć nawet o 10" a czasami rosną w nieskończoność. tutaj przerobiony troszkę kod Anty'ego: ( bez tego delaya (50) ) wogóle nie działa :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Dodam że współrzedne są jako tako prawidłowe, bo nawet bez konwerterowania ich z nmea pokazują moje maisto w google maps



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2014, o 18:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

klonyyy napisał(a):
Udało się uruchomic pobieranie prędkosci i współrzednych, ale niestety nie sa one stałe tzn. co chwilę się zmieniają i umieją skoczyć nawet o 10" a czasami rosną w nieskończoność.
................
Dodam że współrzedne są jako tako prawidłowe, bo nawet bez konwerterowania ich z nmea pokazują moje maisto w google maps


Proponuję najpierw lepiej poznać protokół NMEA, w tym wypadku w szczególności o znaczniku FIX'a (Position Fix Indicator).
Czytaj pozycję tylko wtedy gdy Position Fix Indicator = 1.
Zwróć też uwagę na parametr precyzji HDOP.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2014, o 17:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Dzięki za odpowiedź, pozycję czytam tylko jak fix=1, ale chyba parametr HDOP jest u mnie za duży - w najlepszym przypadku pokazuje 1,5 ( na zewnątrz ) a w najgorszym nawet 4 ( w pokoju 1m od okna ).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2015, o 01:40 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.
Próbuje wykorzystać funkcję strtok_r jak w Bluebooku i coś tutaj nie rozumiem do końca
deklaracje
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Problem w tym, że to nie działa.
Dane przychodzą w takiej postaci (nieobrobione)
Kod:
$GPGGA,001759.00,5002.57422,N,02702.77454,E,1,08,0.93,197.4,M,39.9,M,,*5A
$GPGSA,A,3,06,15,14,24,02,12,17,25,,,,,1.70,0.93,1.42*08
$GPGSV,3,1,09,02,17,133,27,06,26,096,19,12,71,282,23,14,29,307,30*72
$GPGSV,3,2,09,15,11,192,20,17,23,046,30,24,75,164,24,25,30,266,31*7E
$GPGSV,3,3,09,32,01,350,*46
$GPGLL,5002.57422,N,02702.77454,E,001759.00,A,A*65
$GPRMC,001800.00,A,5002.55423,N,02002.77441,E,0.610,,201115,,,A*7B
$GPVTG,,T,,M,0.610,N,1.129,K,A*2F
$GPGGA,001800.00,5002.57423,N,02702.77441,E,1,08,0.93,197.7,M,39.9,M,,*5F

w przypadku odłączenia GPS wyświetlane jest coś takiego
Kod:
°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙°˙

a w przypadku podłączenia GPSa po pierwszym wywołaniu funkcji strtok_r
Kod:
6°.°M°9°±±5°
                                                                          °P°A°±±±±±±2°2°7°5°±±6°0°3°.°9°D°$°G°V°±0°0°1°±2°5°6°2°0°±±±3°8°2°1°3°±5°2°E°
Czyli nie jest tak źle bo coś ta funkcja robi - tylko co?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2015, o 07:47 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

wszystko ładnie tylko...
Jak funkcja ma Ci wyciągnąć stringa ze znaku? Z >jednego znaku<!

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2015, o 01:53 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie ponownie.
Trochę czasu - poduczyłem się trochę :) i efekt już widać.
ALE - żeby nie było tak dobrze to czy jest możliwe że w Atmedze 32
przy zajętych 139bytach RAMu nastąpiło przepełnienie stosu?
musiałem powyłączać odczytywanie większości danych z GPS (zostawiłem tylko fix, UTC i liczbę sat bo je nadpisywało a zmiennych jest tak mało że nie ma co przenieść do flash
jest co prawda jedna: gppga ale potem nie udało mi się zmusić funkcji
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
do poprawnego działania.

Poradźcie jak ujarzmić ten stos

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2015, o 11:17 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Problem nie był ze stosem tylko ze zmiennymi.
Jeśli zadeklarowałem zmienną np
Kod:
char lat[10];

to jeśli program wsadził w nią 11 znaków to ten 11 znak został przenioesiony do następnej zmiennej - stąd pojawiał mi się znak E w UTC, a czasami program głupiał i nie wyświetlał nic.
Po dodaniu prawidłowych długości wszystko jest OK - przynajmniej z tej strony.

Ale problem mam w innym miejscu - Wyświetlanie na LCD
Po jakimś dłuższym czasie jakiś znak przeskakuje mi z jednej linii w drugą - 2 znaki - wskakują z chyba czwartej linii na drugą.
Jak się przed tym zabezpieczyć?

Czy np sprawdzać długość zmiennej i jeśli przekroczy to coś z nią zrobić?
Jak można uciąć ostatni znak w zmiennej?

I jeszcze takie pytanie - czas mamy UTC - a potrzebuję to zrobić na czas GMT+1
Jak tą godzinę dodać.
Można by przy odczycie funkcją uart_getc() w miejscu odczytu godziny od razu dodawać zmienną GMT w której by sobie siedziała informacja o np czasie polskim i warunku kiedy ma sobie ją dodać a kiedy nie.
Ale może macie jakieś doświadczenie jak to inaczej zrobić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2015, o 12:19 
Offline
Użytkownik

Dołączył(a): 19 sie 2014
Posty: 26
Pomógł: 1

Witam ja osobiście do odczytu danych z gps używam biblioteki z zielonej książki. Dzięki temu całą ramkę dziele na dane. Co do godziny to używam RTC na i2c w którym godzina zostaje automatycznie ustawiona z odpowiednią zmianą na nasz czas. Dotego obsługuje klawiaturę 3x4, zapis na kartę SD, wyświetlacz 2x16, dwa przerwania od pilota i mierze wartość adc na jednym kanale. Całość napędza atmega 32 8mhz i działa już kilka miesięcy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2015, o 14:24 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

asek5 napisał(a):
Co do godziny to używam RTC na i2c w którym godzina zostaje automatycznie ustawiona z odpowiednią zmianą na nasz czas.

A możesz rozwinąć temat - co za RTC - czy DS3231 czy inny
to wychodzi na to że w RTC jest cały czas przechowywany UTC a tylko przy odczycie dodaje tą godzinę?
rozwijając myśl czyli jak do np DS3231 wpiszę czas UTC to wyświetlanie będzie działać prawidłowo?

I druga sprawa -a jak z czasem letnim sobie poradziłeś - jest jakaś zmienna do ustawienia w programie czy automatycznie Ci przelicza.

Trzecia sprawa - którą funkcję wykorzystujesz do odczytu z UART - uart_gets czy EVENT



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2015, o 14:53 
Offline
Użytkownik

Dołączył(a): 19 sie 2014
Posty: 26
Pomógł: 1

Przecież to jest obojętne jaki RTC. Ustawiasz go raz z dodaniem 1 lub 2 godzin i odczytujesz z niego datę i godzinę. Używam event.

Wysłane z mojego GT-I9515 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2015, o 19:13 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

iwi napisał(a):
asek5 napisał(a):
Co do godziny to używam RTC na i2c w którym godzina zostaje automatycznie ustawiona z odpowiednią zmianą na nasz czas.

A możesz rozwinąć temat - co za RTC - czy DS3231 czy inny
to wychodzi na to że w RTC jest cały czas przechowywany UTC a tylko przy odczycie dodaje tą godzinę?
rozwijając myśl czyli jak do np DS3231 wpiszę czas UTC to wyświetlanie będzie działać prawidłowo?

I druga sprawa -a jak z czasem letnim sobie poradziłeś - jest jakaś zmienna do ustawienia w programie czy automatycznie Ci przelicza.

Trzecia sprawa - którą funkcję wykorzystujesz do odczytu z UART - uart_gets czy EVENT

Proponuję pooglądać ten cykl poradników: https://www.youtube.com/watch?v=ibIy789sr2M
Na prawdę warto. Można się wiele nauczyć i na wiele spraw oczy Ci się otworzą.
To prawda w pięć minut tego nie obejrzysz, ale będzie to czas dobrze zainwestowany

_________________
Jestem początkujący i moje porady mogą być błędne



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: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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