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



Teraz jest 28 paź 2024, o 20:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 22 ] 
Autor Wiadomość
PostNapisane: 3 sie 2012, o 09:25 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

witam!
Zamarzył i się projekt który będzie odczytywał temp z czujnika i GPS i wysyłał wszystko SMS.
Sprawa o tyle uproszczona iż atmega128 ma dwa UARTY (0 dla GSM, 1 dla GPS).

Narazie jednak mam problem z obsługą GPS.
Mianowicie, chciałbym 'wyskrobać' sobie ramkę $GPGGA

Czy w przerwaniu (ISR( USART1_RX_vect)) mogę sprawdzać czy kolejnymi danymi napływającymi z GPS są bajty w postaci:
$
G
P
G
G
A
?
Jak się zabrać za ten problem?

przykładowa ramkga $GPGGA:
Kod:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 09:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Moja sugestia jest taka aby w przerwaniu w ogóle nie dotykać obróbki danych, one mają wpadać do bufora cyklicznego aby nie nastąpiły przerwy w odbiorze lub samej pracy procesora.

W przerwaniu można np ustawiać sobie jakąś flagę, która będzie sygnalizować koniec nadlatującej ramki. Co jest końcem twojej ramki ??? Sprawdzałeś w terminalu na PC ? czy nie jest to przypadkiem znak ENTER (CR) ?

Jeśli tak to właśnie wystarczy zwiększać flagę za każdym razem gdy w przerwaniu pojawi się CR ;)

A w pętli głównej czekać TYLKO aż się pojawi taka flaga. Pomyśl sobie jak się pojawi to masz PEWNOŚĆ że w buforze cyklicznym czeka już na ciebie jak na tacy cała pięknie odebrana ramka - zgadza się?

Nic tylko ją teraz odczytać za pomocą polecenia pobierania pojedynczego znaku aż do wystąpienia znaku CR ;) i już masz całą linię odebraną

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 09:54 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

dzieki za szybką odpowiedz.

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


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


Kod:
$GPGSA,A,3,27,17,22,28,09,01,12,18,26,,,,1.54,0.88,1.26*08
$GPRMC,085143.000,A,5210.2439,N,02100.3487,E,0.07,176.35,030812,,,A*6D
$GPVTG,176.35,T,,M,0.07,N,0.13,K,A*3E
$GPGGA,085144.000,5210.2439,N,02100.3487,E,1,9,0.88,116.3,M,39.1,M,,*56
$GPGSA,A,3,27,17,22,28,09,01,12,18,26,,,,1.54,0.88,1.26*08
$GPRMC,085144.000,A,5210.2439,N,02100.3487,E,0.07,176.35,030812,,,A*6A
$GPVTG,176.35,T,,M,0.07,N,0.13,K,A*3E
$GPGGA,085145.000,5210.2439,N,02100.3487,E,1,9,0.88,116.1,M,39.1,M,,*55
$GPGSA,A,3,27,17,22,28,09,01,12,18,26,,,,1.53,0.88,1.26*0F
$GPRMC,085145.000,A,5210.2439,N,02100.3487,E,0.07,176.35,030812,,,A*6B
$GPVTG,176.35,T,,M,0.07,N,0.12,K,A*3F
$GPGGA,085146.000,5210.2440,N,02100.3488,E,1,9,0.88,116.0,M,39.1,M,,*56
$GPGSA,A,3,27,17,22,28,09,01,12,18,26,,,,1.53,0.88,1.26*0F
$GPGSV,3,1,11,27,77,298,34,09,60,294,32,15,53,213,27,17,49,090,50*7B
$GPGSV,3,2,11,28,31,061,45,26,26,168,30,12,23,239,34,18,16,279,28*7F
$GPGSV,3,3,11,22,12,319,42,01,09,034,40,11,02,020,*4C
$GPRMC,085146.000,A,5210.2440,N,02100.3488,E,0.07,176.35,030812,,,A*69
$GPVTG,176.35,T,,M,0.07,N,0.13,K,A*3E
$GPGGA,085147.000,5210.2440,N,02100.3488,E,1,9,0.88,115.9,M,39.1,M,,*5D
$GPGSA,A,3,27,17,22,28,09,01,12,18,26,,,,1.53,0.88,1.26*0F
$GPRMC,085147.000,A,5210.2440,N,02100.3488,E,0.09,176.35,030812,,,A*66
$GPVTG,176.35,T,,M,0.09,N,0.16,K,A*35


Ogólnie problem jest taki, iż GPS cały czas wyrzuca dane... dlatego trudno je obrabiać.. mylę się?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 10:23 
Offline
Użytkownik
Avatar użytkownika

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

GPS 'wyrzuca' dane standardowo z częstotliwością 1Hz, średnio przy około 250 znakach 'pakietu' i prędkości 9600bps masz baaaardzo dużo czasu na ogarnięcie tych danych :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 10:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Taka ramka to niemalże bajka ;)

I masz znak końca linii ponieważ tworzy ci się nowa linia i mogą to być znaki CR albo LF lub obydwa razem ;)

------------------------ [ Dodano po: 1 minucie ]

I chyba jest nawet CRC ( ostatnie znaki po "*")

A jaki to GPS ? Chodzi mi o model .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 10:34 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

GPS to FGPOMMOSL3
Dzieki Panowie za odpowiedzi :) bede walczył dalej..
Biore się teraz za parsowanie danych :)

Czy zastosowane rozwiązanie (póki co) wydaje się poprawne wg Was?

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


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

Kod:
$GPVTG,348.15,T,,M,0.00,N,0.00,K,A*36
$GPGGA,093213.000,5210.2469,N,02100.3476,E,1,7,1.20,120.4,M,39.1,M,,*54
$GPGSA,A,3,17,28,09,12,04,26,14,,,,,,1.85,1.20,1.41*0A
$GPRMC,093213.000,A,5210.2469,N,02100.3476,E,0.00,348.15,030812,,,A*6D
$GPVTG,348.15,T,,M,0.00,N,0.01,K,A*37
$GPGGA,093214.000,5210.2469,N,02100.3476,E,1,7,1.20,120.4,M,39.1,M,,*53
$GPGSA,A,3,17,28,09,12,04,26,14,,,,,,1.85,1.20,1.41*0A
$GPRMC,093214.000,A,5210.2469,N,02100.3476,E,0.00,348.15,030812,,,A*6A
$GPVTG,348.15,T,,M,0.00,N,0.01,K,A*37
$GPGGA,093215.000,5210.2469,N,02100.3476,E,1,7,1.20,120.4,M,39.1,M,,*52
$GPGSA,A,3,17,28,09,12,04,26,14,,,,,,1.85,1.20,1.41*0A
$GPRMC,093215.000,A,5210.2469,N,02100.3476,E,0.00,348.15,030812,,,A*6B
$GPVTG,348.15,T,,M,0.00,N,0.00,K,A*36
$GPGGA,093216.000,5210.2469,N,02100.3476,E,1,7,1.14,120.4,M,39.1,M,,*56
$GPGSA,A,3,17,22,28,09,12,04,14,,,,,,1.71,1.14,1.28*0D
$GPGSV,4,1,13,27,85,143,24,09,80,291,30,17,44,065,48,12,40,249,33*7F
$GPGSV,4,2,13,15,36,200,21,28,15,067,47,14,12,324,46,22,10,303,34*76
$GPGSV,4,3,13,26,09,169,22,04,07,118,47,01,07,019,22,18,06,265,*77
$GPGSV,4,4,13,25,02,250,*49
$GPRMC,093216.000,A,5210.2469,N,02100.3476,E,0.00,348.15,030812,,,A*68
$GPVTG,348.15,T,,M,0.00,N,0.00,K,A*36



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 10:54 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Tak już jest lepiej ale no musisz poćwiczyć bo masz to pod ręką.

Oczywiście że mylisz się, że trudno to obrabiać ponieważ nawet gdyby ramki przylatywałby dużo szybciej to i tak procesor ma całe hektary czasu na ich obrobienie. No i tym bardziej że te ramki są MIODNE ;) czyli zakończone ENTEREM ;) .... hmmm na przyszłość polecam ci jednak moją drugą książkę bo podejrzewam , że jej ostatni rozdział niesamowicie by cię ucieszył gdybyś zobaczył co i jak można robić jeśli chodzi o parsowanie i to dużo większej ilości danych ... i jak łatwo do tego... (a wszystko ładnie po kolei i od podstaw opisane - już sporo osób skorzystało z tego rozdziału - bo on jest właśnie uzupełnieniem do pierwszej książki)

Tak CR to 0x0d ;) ale sprawdź w terminalu czy przypadkiem GPS nie wysyła na końcu sekwencji CRLF czyli 0x0d i 0x0c bo wtedy LF będzie trzeba jeszcze w przerwaniu najlepiej WYCINAĆ

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 11:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Datasheet strona 14 i już wiesz jaki jest format ramki oraz jaki jest znaka końca, w tym przypadku <CR><LF>



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 11:06 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

za namową Mirka sprawdziłem w Hex Edytorze (zawsze jakaś nauka;) )
i okazało się że Malutki_27 ma racje:)

dalej, usuwam znak <LF>:

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


teraz zostaje mi parsowanie ramek...

czy zalecany jest sposób sprawdzania znaku po znaku czy występuje $GPGGA?

Co do książki: kupię napewno, pierwsza część bardzo mi przypadła do gustu:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 11:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ja bym podszedł troszkę innaczej. Zanim bym cokolwiek "prasował" to sprawdziłbym czy CRC się zgadza i jeżeli by było ok to wtedy parsujemy dane, a jak nie to ramkę ignorujemy.

------------------------ [ Dodano po: 9 minutach ]

Obliczanie CRC dla NMEA jest tutaj. strona 4.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 11:20 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

bubu_pl napisał(a):
czy zalecany jest sposób sprawdzania znaku po znaku czy występuje $GPGGA?


No widzisz, to póki nie masz tej drugiej książki to zainteresuj się wbudowanymi funkcjami strtok() oraz strtok_r() bo one są w C jakby w standardzie właśnie do parsowania. Robienie tego znak po znaku to katorga (też można ale to męczarnia) i dlatego rozumiem skąd to przerażenie na początku o trudności z parsowaniem danych.

A przy okazji kolega Malutki_27 dobrze prawi o tym sprawdzaniu CRC, bo w przypadku jakichś zakłóceń transmisji odpadnie ci z marszu kolejny hektolitr problemów ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 11:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

bubu_pl napisał(a):
czy zalecany jest sposób sprawdzania znaku po znaku czy występuje $GPGGA?

Co do książki: kupię napewno, pierwsza część bardzo mi przypadła do gustu:)


Pobierasz całego stringa i ganiasz po nim.
Własnie takie zabawy są BARDZO dobrze opisane w drugiej książce. Naprawę polecam ci kup, przeczytaj i dopiero zacznij dalej zabawę ....... :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 12:14 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

Ok, póki jednak nie mam książki spróbuję powalczyć:)

zrobiłem sobie bufor GPGGA_Data[70] dla całego stringa
Moglibyscie powiedziec czy ide w dobrym kierunku?

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


W obsludze przerwania dodalem:
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: 3 sie 2012, o 13:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No i tutaj się zaczyna dylemat ponieważ ( absolutnie nie traktuj mojej wypowiedzi na namawianie do czegokolwiek ) trudno mi jest doradzać wiedząc że można to zrobić szybko i bardzo ale to bardzo bezboleśnie z wiedza zamieszczoną w drugiej ksiązce. Przykład tego co chcesz zrobic masz tutajtopic1264.html#p11309.

A wracając do meritum. Bufor masz za mały o 2 znaki, zapominasz o CR i LF,a i tak będzie przymały jak na moje wyczucie. Powinien być dwu trzy krotnie większy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 14:24 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

bubu_pl napisał(a):
Moglibyscie powiedziec czy ide w dobrym kierunku?


Tzn tak, pewnie wiesz że każdą rzecz można oprogramować na milion różnych sposobów, na tyle ilu jest programistów na świecie więc ciężko powiedzieć że to jest zła droga - ale myślę że na pewno najeżona ostrymi kamieniami...

dlaczego ???

dlatego że jak sądzę ty teraz próbujesz ustawiać flagę w przerwaniu w zależności od czego ? od kilku różnych znaków ??? ... oj

poza tym dlaczego nie korzystasz z podstawowej zasady dobrego stylu programowania w C i wciąż piszesz warunki tego typu z jakimiś dzikimi kodami HEX ??? .... no weź pod uwagę że czytający mają dużo trudniej żeby teraz to odcyfrowywać.... pomyśl sobie czy nie lepiej NAWET dla CIEBIE zamiast pisać tak:

if(data == 0x2a)

co jest dla mnie zgrozą czytać jak mam pomóc - pisać tak?

if( data == '*' )

czyż to nie jest dla oka 1000000 razy przyjemniejsze ?

tak samo z CR czy LF

zamiast tak:

if( data == 0x0d )

to tak

if( data == '\r' )

albo tak:

#define CR 0x0d

if( data == CR )


pomyśl nad tym .... ale ok teraz sugestia drobna jeśli chodzi o kierunek jak sobie radzić nawet bez drugiej książki na razie. Pisałem ci wcześniej o tych funkcjach strtok() i strtok_r()

masz opisane ich działanie w PDF'ie w folderze WinAVR na własnym dysku ....

Idea jest taka - jak już odebrałeś do bufora całą ramkę - to postaraj się podzielić ją na kawałki za pomocą tych funkcji, na kawałki które cię interesują (czyli TOKENY bo tak się je nazywa). Przecież twórcy tego GPS'a właśnie tak tworzyli tą ramkę żeby w C było można ją wessać jak dobry makaron ;)

każdy przecinek w twojej ramce jest separatorem tokena. A zatem w kilku liniach krok po kroku można mieć sparsowaną dzięki tym funkcjom całą ramkę bez budowania własnych pętli while() które będą biegać znak po znaku i próbować robić od początku świata to co już dawno za ciebie robi strtok() ;) - poczytasz o tych funkcjach ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:07 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

dzięki za pomoc


wymodziłem taki kod:

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


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


jednak na terminalu nie widze oczekianej literki S mowiacej ze znaleziono String $GPGGA... wydaje mi sie ze kod wyglada dobrze i powinien dzialac.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:40 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Ja ci podpowiem jak ja bym na twoim miejscu to sobie sprawdzał - zobacz na to:

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


Stosuj sobie takie PUŁAPKI - debugerystyczne ;) szybciej ci pójdzie ;)

ale uwaga - kolega po raz kolejny podaje kod z tym dziwnym 0x2d

while((c=uart1_getc()) != 0x2d )

wiem, że kolega może to uznać za jakąś złośliwość z mojej strony ale przysięgam że tak nie jest. Jednak jeśli dalej w kodach nadsyłanych do analizy na tym forum, nie będzie kolega ułatwiał życia innym ;) jeśli już nie sobie

while((c=uart1_getc()) != '*' )

to ja niezbyt chętnie albo w ogóle nie będę udzielał pomocy. Takie są po prostu zasady dobrego stylu pisania kodu na naszym forum....

oczywiście nie chcę robić z igły widły i nie chodzi mi o tę linijkę bo już wiem że 0x2d na szybko do *, ale tak na przyszłość - mam nadzieję że kolega mnie zrozumiem.

-------------------

wracając do tematu - takie stosowanie pułapek w najprostszym debugerze jaki ci wyżej pokazuję to jedna z najlepszych metod na dochodzenie do sedna sprawy ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 16:51 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

oczywiście się zgadzam:) babole w stylu 0xXX już nie wystąpią:)

zastanawia mnie jedna rzecz, mianowicie nie działa poprawnie porównywanie znaków. zrobiłem taki oto kod w funkcji:

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


output:
Kod:
                                  $GPGSA
                                               $GPGSV
                                                     $GPGSV
                                                           $GPGSV
                                                                 $GPRMC
                                                                       $GPVTG
                                                                             $GPGGA
                                                                                   $GPGSA
                                                                                         $GPRMC
                                                                                               $GPVTG
                                                                                                     $GPGGA


jak widać $GPGGA występuje i ma się dobrze, jednak nie wyświetla się radosny napis 'JEA', nie jest spełoniony warunek... coś dziwnego, prawda?


EDYCJA:
Podejrzałem w HexEdytorze, okazało się że toke nzaczyna się od \n. zmiana kodu na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


działam dalej :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 17:36 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

A widzisz - czyli nie wycinasz CR po skonsumowaniu linii z bufora - dlatego ci tu wyłazi - więc nie szukaj do *=gwiazdki tylko do CR ... rozumiesz ? ;)

a przy okazji zamiast pisać tak:

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


ułatw sobie życie i pisz tak:

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


czyli ładnie idzie dalej ;) ... najważniejsze to umiejętnie sprawdzać każdy fragment stosując po drodze takie chwilowe pułapki jakie ci wcześniej pokazałem

------------------------ [ Dodano po: 2 minutach ]

Aha - wprawdzie już doszedłeś że przed $GPGGA wpada ci CR .... ale musiałeś to podejrzeć na terminalu - a wystarczyłoby zrobić dodatkową pułapkę i wyrzucać na terminal także ilość znaków

strlen(token)

i już być wiedział że masz w tokenie o jeden znak więcej ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 19:28 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

Dziękuje za cenne rady wszystkim forumowiczom:)

kolejna sprawa (coby temat nie podupadl ;) )

istnieje jakieś sensowne rozwiązanie które sprawi, iż np co minutę będzie wysyłany sms? jak ognia chcę uniknąć delay ;)

może sprawdzanie czy w czasie pobranym z GPS sekundy są równe 00?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 19:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Możesz wyłowić minuty ze stringa

I zastosować coś takiego
if (1==(atoi(wylowione_minuty))%2){
tutaj obsługa wysyłki by SMS
}

lepszym rozwiązaniem by było zrobienie wewnętrznego zegarka i działanie ewentualnie na nim, a dodatkowo możesz go synchronizować np co godzinę ( czy też rzadziej ) z GPS.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 21:18 
Offline
Nowy

Dołączył(a): 03 sie 2012
Posty: 12
Pomógł: 0

zrobiłem sobie troszeczkę ładniejszą obsługę całego programu.
Niestety, pierwszy raz działa:
Kod:
$GPGGA201529.000||5210.2440N||02100.3153E||1||8||136.5||027.9||SEND SMS$GPGSA

i tutaj stoi...

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

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


co się dzieje?

rozwiązanie dla potomnych :)
w przerwaniu ISR dodałem warunek sprawdzajacy czy GPS_Block jest 0, jeśli jest zaipsuje dane do bufora cyklicznego normalnie, jak jest 1 to olewam :)

Czy to jest rozwiązanie zgodne ze sztuką?



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO