<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=1909&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-12-13T19:53:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1909&amp;mode</id>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T19:53:59+01:00</updated>
<published>2012-12-13T19:53:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21112#p21112</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21112#p21112"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21112#p21112"><![CDATA[
Wszystko ładnie działa, udało się <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Funkcja budująca ramkę GPS w standardzie NMEA na podstawie podania mu szerokości i długości geograficznej przeliczonych odpowiednio na standard NMEA:<br /><br />[syntax=c]void budowanie_ramki(uint32_t szerokosc_czesc_calkowita,uint32_t dlugosc_czesc_calkowita,uint32_t szerokosc_czesc_ulamkowa,uint32_t dlugosc_czesc_ulamkowa)<br />{<br />char szerokosc_calkowita[10];// bufor na wynik funkcji itoa np. [5,2,2,4]<br />char dlugosc_calkowita[10];<br />char szerokosc_ulamkowa[10];<br />char dlugosc_ulamkowa[10];<br />itoa(szerokosc_czesc_calkowita,szerokosc_calkowita, 10);// konwertowanie value na string<br />itoa(dlugosc_czesc_calkowita,dlugosc_calkowita, 10);<br />itoa(szerokosc_czesc_ulamkowa,szerokosc_ulamkowa, 10);<br />itoa(dlugosc_czesc_ulamkowa,dlugosc_ulamkowa, 10);<br /><br />char tablica[45] = &quot;$GPRMC,,,&quot;;// początek ramki<br />uint8_t i=9;// wstawienie szerokosci (czesc całkowita)<br />char *c = szerokosc_calkowita;<br />char s;<br />while((s = *c++)) tablica[i++] = s;<br />tablica[i++] = '.';// '.' kropka oddzielająca częsci<br /><br />uint8_t j=14;// wstawienie szerokosci (czesc ulamkowa)<br />char *w = szerokosc_ulamkowa;<br />char z;<br />while((z = *w++)) tablica[j++] = z;<br /><br />uint8_t k=18;// wstawienie &quot;,N,0&quot;<br />char dane[10] = &quot;,N,0&quot;;<br />char *y = dane;<br />char x;<br />while((x = *y++)) tablica[k++] = x;<br /><br />uint8_t a=22;// wstawienie dlugosc (czesc całkowita)<br />char *b = dlugosc_calkowita;<br />char d;<br />while((d = *b++)) tablica[a++] = d;<br />tablica[a++] = '.';// '.' kropka oddzielająca częsci<br /><br />uint8_t o=27;// wstawienie dlugosc (czesc ulamkowa)<br />char *p = dlugosc_ulamkowa;<br />char r;<br />while((r = *p++)) tablica[o++] = r;<br /><br />uint8_t t=31;// wstawienie &quot;E,,,,,,,,,*&quot;<br />char dane_02[15] = &quot;,E,,,,,,,,,*&quot;;<br />char *f = dane_02;<br />char u;<br />while((u = *f++)) tablica[t++] = u;<br /><br /><br />uart_puts_gpschecksum(tablica);    // funkcja liczy checksumę i wyswietla całą gotową ramkę<br />}[/syntax]<br />Teraz wystarczy, że w głównym pliku main i petli głównej wywołamy:<br /><br />[syntax=c]budowanie_ramki(szerokosc_czesc_calkowita,dlugosc_czesc_calkowita,szerokosc_czesc_ulamkowa,dlugosc_czesc_ulamkowa);<br />uart_putc('\r\n');[/syntax]<br />I na terminalu pokazują nam się pięknie chciane ramki GPS [NMEA] z obliczoną &quot;w locie&quot; checksumą.<br /><br />[syntax=c]np. $GPRMC,,,5224.1370,N,01655.1050,E,,,,,,,,,*5B[/syntax]<br /><br />Funkcja może nie jest najpiękniejsza. Może i da się ją jeszcze jakoś uprościć ale nie zajmuję aż tyle miejsca i co najważniejsze pracuje tak jak chciałem.<br />Dziękuję wszystkim za pomoc, w szczególności Mirkowi, który pomógł mi na starcie pominąć strasznie double'e i float'y.<br />Lecą dla każdego &quot;pomógł&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Pzdr Jacek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 19:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T18:51:03+01:00</updated>
<published>2012-12-13T18:51:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21105#p21105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21105#p21105"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21105#p21105"><![CDATA[
Kolego SunRiver dzięki wielkie za wtrącenie się do tematu i zaproponowaniu pomocy i ciekawych opcji. Co do sumy kontrolnej to u mnie w ramce jest ona zliczana od znaku $ do *. To jest w sumie sedno tego tematu, lecz dzięki kolegom &quot;GwynBleidD&quot;, &quot;Sonix&quot; i &quot;Krauser&quot; w postach wyżej udało się tą sumę już pięknie policzyć. Natomiast końcówką rozważania w tym temacie to już coś innego, mianowicie &quot;Jak upakować wszystko do jednego stringa, tak aby łatwo się dało tam wstawić liczby, obliczyć sumę i wyświetlić całość w terminalu&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Czuje już w kościach, że już mam to prawie skończone <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />GwynBleidD -&gt; testuje cały czas i jest dobrze, już poprawnie się wysyła. Teraz buduję całą ramkę i chce wyświetlić. Dam znać jak wszystko ruszy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Pzdr <br /><br />Z góry wielkie podziękowania dla was PANOWIE za pomoc. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 18:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-12-13T18:17:34+01:00</updated>
<published>2012-12-13T18:17:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21098#p21098</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21098#p21098"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21098#p21098"><![CDATA[
niestety tak ... , ale chodzi mi o sam algorytm dla odbiornika GlobalSAT obliczania sumy kontrolnej  ... bo nie pamiętam jak to było <br />na pewno ci powiem, że początek zdania czyli znaki $GP nie są zaliczane do sumy kontrolnej, pisałem to kilka lat w wstecz ... niestety <br />teraz używam modułów HOPE... trochę inaczej tam wygląda Zdanie GGA , ale zawsze mam kilka pod ręką.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 gru 2012, o 18:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T18:11:42+01:00</updated>
<published>2012-12-13T18:11:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21097#p21097</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21097#p21097"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21097#p21097"><![CDATA[
Fajna sprawa, tylko że zbytnio nie będzie to dla mnie pomocne, ponieważ ja korzystam z wyświetlacza dotykowego na którym dotykam punkt, dostaje wartość X i Y i dalej to wszystko się dzieje. W tym przypadku chcę automatycznie po dotknięciu panelu wysłać ramkę przez RS232 do aplikacji w PC. Twój program jest spoko, ale musiałbym mu ręcznie podawać współrzędne, tak to zrozumiałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 18:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-12-13T17:59:31+01:00</updated>
<published>2012-12-13T17:59:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21093#p21093</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21093#p21093"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21093#p21093"><![CDATA[
To trzeba było tak od razu... dlaczego, dlatego że pracuje z modułami GPS od lat od strony sprzętowej i stąd taki właśnie post, <br />natomiast co do programów na pc nie wnikałem -- sporo natomiast korzystam z nawigowania po antycznych w sumie mapach bo z lat 32 - 47<br />ale nie o to chodzi ...  w takim wypadku muszę poszukać bo gdzieś kiedyś popełniłem w VSC# symulator modułu GPS który wysyła prawidłowe <br />zdanie GGA na podstawie podanych danych o położeniu i wylicza też dla niego CRC. Był on konieczny do uruchamiania modułów bazowych dla systemów rejestrowania parametrów lotu, które projektowałem , ale nie można było sprawdzić działania bo moduły z GlobaSAT jeszcze były w drodze, a czas naglił ...  -- program po wpisaniu danych pozycji N i E - wysyłał pełną ramkę zdania GGA oraz dla tego akurat przypadku <br />dane dodatkowe wymagane przez urządzenie:  <br /><br /><a href="http://img202.imageshack.us/i/przechwytywanieyk.jpg/"  class="postlink"><img src="http://img202.imageshack.us/img202/221/przechwytywanieyk.jpg" alt="Obrazek" /></a><br /><br />Gdzieś to jeszcze widziałem na dysku w robocie , zapodam na droopa jutro poszukam <br />(żródła)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 gru 2012, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T17:39:31+01:00</updated>
<published>2012-12-13T17:39:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21091#p21091</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21091#p21091"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21091#p21091"><![CDATA[
Kolego SunRiver, ależ ja to wszystko wiem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, niestety nie masz racji pisząc że suma kontrolna jest nie ważna, mam 2 programy do odbioru ramek GPS (NMEA) i żaden z nich ani nie drgnie jeśli nie wyśle się ramki ze zgodną sumą kontrolną. Ramek w tym systemie jest sporo, do najważniejszych zalicza się RMC, GGA, GSA i GLL. Sekwencja RMC (Recommended minimum of data) kreślana przez standard NMEA jako minimum danych, które musi wysyłać każdy odbiornik GPS. Dlatego wysyłam tylko taką ramkę:<br /><br />$GPRMC,,5224.2450,N,03452.5030,E,,,,100.0,M,,,,*47<br /><br />Kombinuję jak zrobić z tego ramkę, gdzie współrzędne są przeliczane w odpowiedniej funkcji, wszystko jest wrzucone do jednego stringa i potem ten string jest puszczany na funkcję kolegi &quot;GwynBleidD&quot; uart_puts_gpschecksum(), która zliczy sumę kontrolną i wypisze wszystko w terminalu. Taką ramkę dopiero poprawnie odbierze mój program i wskaże położenie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 17:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-12-13T17:28:38+01:00</updated>
<published>2012-12-13T17:28:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21089#p21089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21089#p21089"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21089#p21089"><![CDATA[
Właściwie to się zastanawiam co wy tu kombinujecie z tym zdaniem protokołu NMEA0183  przecież tu nic nie trzeba konwertować i kombinować dostajesz gotowy ciąg ASCII  zdanie GGA z którego jasno wynika wszystko co potrzebujesz. Dodatkowo typowe moduły OEM GPS wysyłają po uarcie z parametrami: 8bitów danych, 4800 bodów, 1 bit stopu , bez parzystości.<br /><br />Typowe zdanie GGA (Global Positioning System Fix DATA)  które męczysz to np:<br /><br /><strong>$GPGGA,133520,4807.038,N,1131.022,E,1,08,0.9,545.5,M,50.9,M,,*48</strong><br /><br />Co oznacza:<br /><br />$ - znak początku zdania NMEA<br />GGA - kod polecenia<br />133520 - aktualny czas 13:35:20 UTC<br />4807.38,N - szerokość geograficzna  48 stopni  07,038' N<br />01131.022,E - długość geograficzna  11 stopni  31,022' E<br />1 - rodzaj sygnału użytego do pozycjonowania<br />08 - liczba satelitów z których odbieramy sygnał <br />0.9 - parametr określający dokładność położenia  (ok 90m)<br />545.5,M - wysokość w metrach nad poziom morza <br />50.9,M - różnica miedzy geoidą, a elipsoidą WGS84<br />*48 - suma kontrolna CRC, która zawsze zaczyna się od znaku *<br /><br />W przypadku modułów GPS OEM komunikacja jest zawsze jednokierunkowa i ograniczamy się jedynie <br />do odbierania danych z uarta i wyłuskiwaniem tego co nas interesuje, zwykle same dane położenia.<br />Dane te zwykle po podłączeniu GPS sa co sekundę wysyłane na uart automatycznie.<br /><br />Do symulacji GPS wystarczy wysyłać łańcuch danych podobny do zdania GGA...  suma kontrolna w większości urządzeń jest pomijana , a jedynie jest sprawdzane nadejście znaku $ oznaczającego początek zdania GGA<br />i następnie zliczane są znaki i ładowane do bufora , po czym szuka się wystąpienia N i E oraz na podstawie ich znalezienia (oznaczenie końca sekwencji położenia) pobierane są odpowiednie ilości znaków poprzedzających.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 gru 2012, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T17:24:37+01:00</updated>
<published>2012-12-13T17:04:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21086#p21086</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21086#p21086"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21086#p21086"><![CDATA[
Ehh.. próbuję na wszystkie sposoby i nie chce mi się dobrze wyswietlić.... nie wiem już co jest nie tak..<br /><br />[syntax=c]              char string[3];// bufor na wynik funkcji itoa np. [5,2,2,4]<br />      itoa(szerokosc_czesc_calkowita,string, 10); //char tablica[12] = {'$','G','P','G','G','A',',',',',};<br />      char tablica[20] = &quot;$GPGGA,,&quot;;<br />      uint8_t i=7;<br />      char *c = string;<br />      char s;<br />      while((s = *c++)) tablica[i++] = s;<br />      //tablica[i++] = '\0';<br />      uart_puts(tablica);[/syntax]<br /><br />Nie rozumiem też tego zachowania kompilatora. Jeżeli damy taki prosty kod:<br /><br />[syntax=c]char string[4];// bufor na wynik funkcji itoa np. [5,2,2,4]<br />itoa(szerokosc_czesc_calkowita,string, 10);<br />char tablica[12] = {'$','G','P','G','G','A',',',',',string[0],};<br />uart_puts(tablica);[/syntax]<br /><br />Na terminalu pokazuję się: &quot;5$GPGGA,,&quot;   Nie rozumiem dlaczego ta &quot;5&quot; wskakuje na początek!?<br /><br /><br />------------------------------------------------------------------------------------------<br /><br />Sprawdziłem pewną zależność, mianowicie kiedy mam taki kod:<br />char string[10];// bufor na wynik funkcji itoa np. [5,2,2,4]<br />itoa(szerokosc_czesc_calkowita,string, 10);<br />    char tablica[20] = &quot;$GPGGA&quot;;<br />    uint8_t i=7;<br />    char *c = string;<br />    char s;<br />    while((s = *c++)) tablica[i++] = s;<br />uart_puts(tablica);<br />to wszystko jest OK, wyświetla to co chcę: &quot;$GPGGA5224&quot;, gdy tylko do tablicy wstawie &quot;,&quot; to zaczynają się właśnie problemy z zamianą miejsc itd, minus jest taki, że potrzebuję tych przecinków...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 17:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T16:34:49+01:00</updated>
<published>2012-12-13T16:34:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21081#p21081</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21081#p21081"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21081#p21081"><![CDATA[
Teraz wyświetla się tylko &quot;GA,&quot;<br />Gdy zmieniłem kod na:<br /><br />[syntax=c]char string[3];// bufor na wynik funkcji itoa<br />itoa(szerokosc_czesc_calkowita,string, 10);<br />char tablica[11] = {'$','G','P','G','G','A',',',','};<br />uint8_t i=7;<br />char *c = string;<br />char s;<br />while(( s = *c++)) tablica[i++] = s;<br />//tablica[i++] = '\0';<br />uart_puts(tablica);[/syntax]<br />Pojawia się już wynik ale nie w tej kolejności się wyświetla: &quot;522$GPGGA&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 16:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T16:21:45+01:00</updated>
<published>2012-12-13T16:07:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21078#p21078</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21078#p21078"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21078#p21078"><![CDATA[
No OK, ale nie wiem jak wrzucić tego stringa do OGÓLNEJ TABLICY ? jak go rozdzielić ?<br /><br />Wrzucam to, rozumiem jak to działa ale niestety wyświetla się tylko : '$GPGGA,,'<br /><br />[syntax=c]uint32_t dlugosc = 1655000 + (30*10);<br />uint32_t szerokosc = 5224000 + (25*10);<br />uint32_t dlugosc_czesc_calkowita=dlugosc/1000;<br />uint32_t szerokosc_czesc_calkowita=szerokosc/1000;<br />uint32_t dlugosc_czesc_ulamkowa = dlugosc - (dlugosc_czesc_calkowita*1000);<br />uint32_t szerokosc_czesc_ulamkowa = szerokosc - (szerokosc_czesc_calkowita*1000);<br /><br /><br />char string[3];// bufor na wynik funkcji itoa<br />itoa(szerokosc_czesc_calkowita,string, 10);<br />char tablica[20] = {'$','G','P','G','G','A',',',','};<br />uint8_t i=7;<br />char *c = string;<br />char s;<br />while(( s = *c++)!='\0') tablica[i] = s;<br />uart_puts(tablica);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 16:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T16:03:38+01:00</updated>
<published>2012-12-13T16:03:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21075#p21075</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21075#p21075"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21075#p21075"><![CDATA[
Hmm nie wiem czy dobrze kombinuję, ale pomysł mam taki:<br />Chcąc wysłać całą ramkę, najpierw przerabiam wartości liczbowe na stringa do tablicy np.<br /><br />[syntax=c]uint32_t dlugosc = 1655000 + (30*10);<br />uint32_t szerokosc = 5224000 + (25*10);<br />uint32_t dlugosc_czesc_calkowita=dlugosc/1000;<br />uint32_t szerokosc_czesc_calkowita=szerokosc/1000;<br />uint32_t dlugosc_czesc_ulamkowa = dlugosc - (dlugosc_czesc_calkowita*1000);<br />uint32_t szerokosc_czesc_ulamkowa = szerokosc - (szerokosc_czesc_calkowita*1000);<br /><br />                char string[3];                       // bufor na liczby wynikowe z funkcji itoa<br />itoa(szerokosc_czesc_calkowita,string, 10);[/syntax]<br />I teraz tworzę tego głównego stringa:<br /><br />[syntax=c]char tablica[50] = {'$','G','P','G','G','A',',',',','string?'};         // jak tu wrzucić tego stringa żeby się rozdzielił na poszczególną komórkę?[/syntax]<br />Bo rozumiem, że w ten sposób da się później to wszystko ładnie przesyłać funkcją uart_puts_gpschecksum(), która zliczy sumę kontrolną i wypisze wszystko w terminalu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 16:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-13T13:18:43+01:00</updated>
<published>2012-12-13T13:18:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21062#p21062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21062#p21062"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=21062#p21062"><![CDATA[
Nie do końca zrozumiałem twoją odpowiedź &quot;GwynBleidD&quot;. Mógłbyś dokładniej wyjaśnić? Mam stworzyć jednego stringa i tam wszystko pakować? A co z liczbami, które konwertuję?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 13 gru 2012, o 13:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-12T20:26:42+01:00</updated>
<published>2012-12-12T20:26:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20997#p20997</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20997#p20997"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20997#p20997"><![CDATA[
Dzięki wielkie panowie, a szczególnie kolega &quot;GwynBleidD&quot;. Wklepałem funkcję <br />[syntax=c]void uart_puts_gpschecksum(char *s)[/syntax] i wszystko ładnie się wysyła i wyświetla.<br /><br />Jednak jak to zawsze bywa to nie koniec problemów. Mianowicie to dla mnie połowa sukcesu. Już opisuję mój problem. Projektuje układ-symulator ramek gps. Mam wyświetlacz LCD TFT 3.5'' z ofery Mirka z panelem dotykowym. I teraz wgrywam sobie mapkę, dotykam miejsce, odczytywane dane w postaci X i Y z wyświetlacza konwertuję na odpowiednią wartość długości i szerokości geograficznej. No i oczywiście na koniec formuję z tego ramkę. Jednak żeby mógł dynamicznie zmieniać(konwertować) dane z wyświetlacza posiadam taką funkcję. Jak ja mam to ugryźć do tej waszej funkcji ze zliczaniem sumy kontrolnej, której oczywiście potrzebuję do każdej generowanej ramki:<br /><br />[syntax=c]if (x&gt;20 &amp;&amp; x&lt;267 &amp;&amp; y&gt;19 &amp;&amp; y&lt;234)   // tu mam wgraną mapę, x i y to współrzędne wyświetlacza<br />    {<br />    st_intX_flag=0;<br />    uint32_t dlugosc = 1655000 + (x*10);<br />    uint32_t szerokosc = 5224000 + (y*10);<br />    uint32_t dlugosc_czesc_calkowita=dlugosc/1000;<br />    uint32_t szerokosc_czesc_calkowita=szerokosc/1000;<br />    uint32_t dlugosc_czesc_ulamkowa = dlugosc - (dlugosc_czesc_calkowita*1000);<br />    uint32_t szerokosc_czesc_ulamkowa = szerokosc - (szerokosc_czesc_calkowita*1000);<br /><br />                 uart_puts(&quot;$GPGGA,,&quot;);uart_putint(szerokosc_czesc_calkowita,10);uart_puts(&quot;.&quot;);<br />                         uart_puts(&quot;00&quot;);uart_putint(szerokosc_czesc_ulamkowa,10);uart_puts(&quot;,N,0&quot;);<br />                         uart_putint(dlugosc_czesc_calkowita,10);uart_puts(&quot;.&quot;);uart_puts(&quot;00&quot;);<br />                         uart_putint(dlugosc_czesc_ulamkowa,10);uart_puts(&quot;,E,,,,100.0,M,,,,*&quot;);<br />                         uart_putc('\r\n');   <br />    }[/syntax]<br /><br />Do konwersji liczb na ASCII mam funkcję uart_putint(), którą muszę użyć. Jednak nie wiem jak do tak budowanej ramki GPS mam zastosować tą funkcję do zliczania sumy kontrolnej? da się w ogóle?<br /><br />dzięki za podpowiedź i pomoc<br />Pzdr Jacek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 12 gru 2012, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-12-12T11:31:18+01:00</updated>
<published>2012-12-12T11:31:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20899#p20899</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20899#p20899"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20899#p20899"><![CDATA[
Kod kolegi GwynBleidD jest dobry - sprawdziłem. Natomiast ty wywołując funkcję uart_putint doprowadzasz do wywołania uart_puts które z kolei ponownie wywołuje uart_putint itd. Ta rekurencja powoduje w efekcie przepełnienie stosu i błędne działanie programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 12 gru 2012, o 11:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-11T20:17:46+01:00</updated>
<published>2012-12-11T20:17:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20848#p20848</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20848#p20848"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20848#p20848"><![CDATA[
Panowie dzięki za zainteresowanie, skorzystałem z podpowiedzi, zmieniłem i nadal nic, coś jest źle,mianowicie...<br /><br />gdy stosuję ten kod:<br /><br />[syntax=c]register char c;<br />uint8_t Checksum = 0;<br />uint8_t checksum_counting = 0;<br />while ((c = *s++ )) {          // dopóki nie napotkasz 0<br />    if(c == '*')<br />        checksum_counting = 0;<br />    if(checksum_counting)<br />        Checksum ^= c;<br />    if(c == '$')<br />        checksum_counting = 1;<br />    uart_putc(c);<br />}<br />uart_putc((Checksum&gt;&gt;4)&lt;10?(Checksum&gt;&gt;4)+ '0':(Checksum&gt;&gt;4)+'A'-10);<br />uart_putc((Checksum&amp;0x0F)&lt;10?(Checksum&amp;0x0F)+ '0':(Checksum&amp;0x0F)+'A'-10);[/syntax]<br /><br />a np. w main mam dla testu gotową ramkę do wyświetlenia... <br /><br />[syntax=c]uart_puts(&quot;$GPGGA,,5224.960,N,01656.380,E,,,,100.0,M,,,,*\r\n&quot;);[/syntax]<br /><br />w terminalu otrzymuję tylko:<br /><br />[syntax=c]$GPGGA,,5224.960,N,01656.380,E,,,,1(za jedynką pokazuję się zielony kursor, który zapala się na stałę i nic się dalej nie dzieje)[/syntax]<br /><br />Spróbowałem trochę inaczej, bo posiadam funkcję zamieniającą liczby z różnych systemów (BIN,DEC,HEX) na znaki ASCII do wyświetlenia. Za pomocą funkcji itoa.<br /><br />[syntax=c]void uart_puts(char *s)// wysyła łańcuch z pamięci RAM na UART<br />{<br />register char c;<br />uint8_t Checksum = 0;<br />uint8_t checksum_counting = 0;<br />while ((c = *s++ ))<br />{          // dopóki nie napotkasz 0<br />    if(c == '*')<br />        checksum_counting = 0;<br />    if(checksum_counting)<br />        Checksum ^= c;<br />    if(c == '$')<br />        checksum_counting = 1;<br />    uart_putc(c);<br />}<br />        uart_putint(Checksum,16);<br />}[/syntax]<br /><br />jednak w tym przypadku dzieją się cuda na terminalu(dużo dziwnych przerw,pustych linijek) i cuda na wyświetlaczu dotykowym...Na terminalu jest mniej wiecej coś takiego:<br /><br />[syntax=c]                                                              $<br />GPGGA,,5224.960,N,01656.380,E,,,,100.0,M,,,,*<br />e000000000000000000000000000000<br /><br />[/syntax]<br /><br />Nie mam pojęcia co tu się dzieje...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 11 gru 2012, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2012-12-11T10:35:08+01:00</updated>
<published>2012-12-11T10:35:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20799#p20799</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20799#p20799"/>
<title type="html"><![CDATA[Re: Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20799#p20799"><![CDATA[
<div class="quotetitle">zlata_n napisał(a):</div><div class="quotecontent"><br />Witam, mam problem ze zliczeniem sumy kontrolnej, mianowicie mam do wyświetlenia ramkę GPS w standardzie NMEA. Ramka ta wygląda np. tak:<br /><br />$<span style="color: #008000">GPGGA,,5224.960,N,01656.380,E,,,,100.0,M,,,,*</span>47<br /><br />Suma kontrola jest liczona od znaku $ do *, czyli w tym przypadku jest to liczba 47 (HEX).<br /></div><br />Znaków $ i * nie zliczasz.<br /><br />Według mnie suma kontrolna to 0e a nie 47.<br />Zresztą sprawdź sam:<br /><br />Tu: <!-- m --><a class="postlink" href="http://www.hhhh.org/wiml/proj/nmeaxor.html" >http://www.hhhh.org/wiml/proj/nmeaxor.html</a><!-- m --><br /><br />lub tu: <!-- m --><a class="postlink" href="http://siliconsparrow.com/nmeachecksum.php" >http://siliconsparrow.com/nmeachecksum.php</a><!-- m --><br /><br />Na C za bardzo jeszcze się nie znam  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> ale zmienna Checksum powinna być typu unsigned char albo uint8_t.<br /><br />Druga sprawa to taka że wyliczoną sumę otrzymujesz w HEX i musisz ją zamienić na stringa czyli w Twoim przypadku dwa znaki ASCII 0e, w HEX będzie to 30 (0) i 65 (e).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 11 gru 2012, o 10:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zlata_n]]></name></author>
<updated>2012-12-10T21:13:47+01:00</updated>
<published>2012-12-10T21:13:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20780#p20780</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20780#p20780"/>
<title type="html"><![CDATA[Problem ze zliczaniem sumy kontrolnej.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1909&amp;p=20780#p20780"><![CDATA[
Witam, mam problem ze zliczeniem sumy kontrolnej, mianowicie mam do wyświetlenia ramkę GPS w standardzie NMEA. Ramka ta wygląda np. tak:<br /><br />$<span style="color: #008000">GPGGA,,5224.960,N,01656.380,E,,,,100.0,M,,,,*</span>47<br /><br />Suma kontrola jest liczona od znaku $ do *, czyli w tym przypadku jest to liczba 47 (HEX). Pracuję na bibliotekach z książki Pana Mirka z lekcji 7 o UART. Jest tam funkcja uart_puts(). Chciałem ją wykorzystać do wyliczania tej sumy kontrolnej. Przerobiłem ją na coś takiego jednak nic mi się nawet nie wyświetla.... <br /><br /><br />[syntax=c]void uart_puts(char *s)// wysyła łańcuch z pamięci RAM na UART<br />{<br />  register char c;<br />  while ((c = *s++ ))// dopóki nie napotkasz 0 wysyłaj znak<br />    if ((*s) == '$')    // znak $<br />    {<br />    c = *s;<br />    register char Checksum = 0;<br />    Checksum ^= c;<br />    while (*s++ != 42)  // znak *<br />    {<br />  Checksum ^= c;<br />    }<br />    uart_putc(Checksum);<br />    }<br />    uart_putc(c);<br />}[/syntax]<br /><br />Z góry dzięki za pomoc i podpowiedzi. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=142">zlata_n</a> — 10 gru 2012, o 21:13</p><hr />
]]></content>
</entry>
</feed>