<?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=19744&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-12-05T21:05:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19744&amp;mode</id>
<entry>
<author><name><![CDATA[fiery149]]></name></author>
<updated>2017-12-05T21:05:48+01:00</updated>
<published>2017-12-05T21:05:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200037#p200037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200037#p200037"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200037#p200037"><![CDATA[
Dziękuję wszystkim za podpowiedzi. Prawie całkowicie przerobiłem kod i już wszystko działa jak należy.<br /><br />Jeszcze raz dzięki i pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18499">fiery149</a> — 5 gru 2017, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2017-12-05T15:41:09+01:00</updated>
<published>2017-12-05T15:41:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200013#p200013</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200013#p200013"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200013#p200013"><![CDATA[
Na twoim miejscu całkiem przerobiłbym ten kod zgodnie ze wcześniejszymi sugestiami. <br />Najlepiej było by zastosować bufor cykliczny ale jeśli nie chcesz się w to bawić możesz zrobić prościej,<br />stworzyć bufor do odbioru danych od modemu GPS i do niego ładować nadlatujące dane po uarcie, ale zaczekaj z analizą dopóki nie odbierzesz całej komendy. To że odebrałeś komendę rozpoznasz po odebraniu znaku CR lub LF (nie pamiętam który występuje pierwszy, musisz sobie to sprawdzić). Dopiero po odebraniu jednego z tych znaków czy nawet obu w obsłudze przerwania ustaw sobie jakąś flagę, którą będziesz sprawdzał w pętli głównej. Jeśli będzie ona ustawiona to wtedy użyj funkcji strstr żeby wyszukać ciąg znaków $GPGGA. Funkcja strstr zwróci ci wskaźnik będący adresem pod którym zaczyna się znaleziony ciąg znaków. Wykorzystaj ten wskaźnik żeby &quot;przelecieć&quot; po kolei ten bufor i wycinać interesujące cię dane tj. długość geograficzną, szerokość, kierunek , czas, co tam potrzebujesz. Zwróć uwagę że każda z tych informacji jest oddzielana przecinkiem. Żeby mieć pewność że &quot;wycinasz&quot; właściwe dane najlepiej jest ich używać do &quot;nawigacji&quot; np. czas jest zawsze po 1 przecinku, po drugim jest pierwsza współrząędna, po trzecim półkula N lub S itd. Wycinanie danych po indeksie tablicy jest ryzykowne bo nie zawsze ci się to może powtórzyć np. kiedy GPS nie złapał jeszcze fix'a dostaniesz komendę $GPPGA gdzie będzie dużo &quot;pusty&quot; przecinków, wtedy możesz wycinać &quot;śmieci&quot; zamiast rzeczywistej pozycji. Po takim przeskanowaniu możesz wyczyścić bufor i czekać na kolejną linię tekstu od modemu. Komendy wysyłane są nie częściej niż co sekundę więc spokojnie powinieneś się wyrobić, ewentualnie na czas analizy danych zawartych w buforze możesz sobie zablokować odbiór nowych danych, nie musisz pobierać każdej komendy chyba że dla twojego urządzenia jest to konieczne. Powodzenia. Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 5 gru 2017, o 15:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2017-12-05T11:45:34+01:00</updated>
<published>2017-12-05T11:45:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200002#p200002</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200002#p200002"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=200002#p200002"><![CDATA[
taką bibliotekę kiedyś zrobiłem - zobacz może Ci się przyda<br /><a href="http://forum.atnel.pl/topic13744.html"  class="postlink">http://forum.atnel.pl/topic13744.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 5 gru 2017, o 11:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2017-12-04T21:27:07+01:00</updated>
<published>2017-12-04T21:27:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199988#p199988</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199988#p199988"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199988#p199988"><![CDATA[
<div class="quotetitle">fiery149 napisał(a):</div><div class="quotecontent"><br />Dane odbieram w standardzie NMEA. Głównie szukam podobnego do tego ciągu:<br />&quot;$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47&quot;<br /></div>Na końcu ciągu masz znak CR lub LF (znaki końca linii). A ty kończysz na znaku następnym po *. Dlaczego?<br /><br />Mirek napisał dobitniej na temat obsługi buforów przy odbiorze. Dobrze abyś to także popoprawiał.<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 4 gru 2017, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fiery149]]></name></author>
<updated>2017-12-04T21:18:30+01:00</updated>
<published>2017-12-04T21:18:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199986#p199986</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199986#p199986"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199986#p199986"><![CDATA[
<div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />Dlaczego parsujesz dane cyklicznie bez czekania na pojawianie się ich w buforze?<br />Także metoda kopiowania danych między buforami w przerwaniu odbioru nie jest elegancka.<br /></div><br /><br />Właśnie poprawiłem<br /><br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />Jaki masz format danych? Bo końcem u Ciebie jest dowolny znak po znaku *.<br /></div><br /><br />Dane odbieram w standardzie NMEA. Głównie szukam podobnego do tego ciągu:<br />&quot;$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18499">fiery149</a> — 4 gru 2017, o 21:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-12-04T21:13:10+01:00</updated>
<published>2017-12-04T21:13:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199984#p199984</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199984#p199984"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199984#p199984"><![CDATA[
Polecam książkę:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />i zapoznanie się z PODSTAWAMI obsługi komunikacji UART w oparciu o bufory cykliczne - bo to co teraz kolega robi to po prostu tzw masakra - i nie dziwota że dane się &quot;gubią&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 gru 2017, o 21:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2017-12-04T20:59:38+01:00</updated>
<published>2017-12-04T20:59:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199981#p199981</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199981#p199981"/>
<title type="html"><![CDATA[Re: Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199981#p199981"><![CDATA[
Dlaczego parsujesz dane cyklicznie bez czekania na pojawianie się ich w buforze?<br />Także metoda kopiowania danych między buforami w przerwaniu odbioru nie jest elegancka.<br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Dodatkowo break w miejscu w default przy odbiorze wygląda bardzo nieprofesjonalnie.<br /><br />Jaki masz format danych? Bo końcem u Ciebie jest dowolny znak po znaku *.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 4 gru 2017, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2017-12-04T20:18:19+01:00</updated>
<published>2017-12-04T20:18:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199980#p199980</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199980#p199980"/>
<title type="html"><![CDATA[Re: Dane globalne "gubią" dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199980#p199980"><![CDATA[
Ja rozumiem, że można na gwałt szukać rozwiązania ale to chyba nie zwalnia z podstawowych zasad kultury i choćby przy pierwszym swoim poście wypadałoby się przedstawić i dodać kilka słów więcej. A nie rachu ciachu i dajcie mi odpowiedź.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 4 gru 2017, o 20:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fiery149]]></name></author>
<updated>2017-12-04T20:30:46+01:00</updated>
<published>2017-12-04T19:44:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199979#p199979</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199979#p199979"/>
<title type="html"><![CDATA[Dane globalne &quot;gubią&quot; dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19744&amp;p=199979#p199979"><![CDATA[
Witam,<br />Proszę o wybaczenie, jak pewnie można zauważyć, jestem nowy na forum.Jestem Przemek i studiuję elektronikę i telekomunikację na Politechnice Śląskiej.<br />Aktualnie pracuję nad projektem wysokościomierza z datą i współrzędnymi geograficznymi opartym na module GPS.<br /><br />Mam problem z kodem. <br /><br />[syntax=c]int GGA_POINTER=0;<br />char NMEA_CODE&#91;80&#93;,RAW_DATA&#91;80&#93;;<br />volatile char output_lcd&#91;3&#93;&#91;16&#93;;<br />volatile char Line1&#91;16&#93;,Line2&#91;16&#93;;<br />volatile char raw_time&#91;6&#93;,raw_latitude&#91;10&#93;,raw_longtitude&#91;10&#93;,lat_dir&#91;1&#93;,long_dir&#91;1&#93;,raw_altitude&#91;8&#93;;<br /><br />ISR(USART_RXC_vect)<br />{<br /> char data=UDR;<br /> switch(data)<br /> {<br /> case ('$'):<br /> GGA_POINTER=0;<br /> status=1;<br /> break;<br /> <br /> case ('*'):<br /> NMEA_CODE&#91;GGA_POINTER++&#93;=data;<br /> status=0;<br /> break;<br /> <br /> default:<br /> if(!status)<br /> {<br /> sprintf(RAW_DATA,&quot;%s&quot;,NMEA_CODE);<br /> break;<br /> }<br /> NMEA_CODE&#91;GGA_POINTER++&#93;=data;<br /> <br /> }<br />}<br /><br />void parse_data()<br />{<br /><br />if(strstr(RAW_DATA,&quot;GGA&quot;) != 0)<br />{<br />int i=0,j=0;<br />while(RAW_DATA&#91;i&#93; != ',') i++;<br />i++;<br /><br />while(RAW_DATA&#91;i&#93; != ',')<br />{<br />raw_time&#91;j&#93;='1'/*RAW_DATA&#91;i&#93;*/;<br />i++; j++;<br />}<br />i++; j=0;<br />while(RAW_DATA&#91;i&#93; != ',')<br />{<br />raw_latitude&#91;j&#93;=RAW_DATA&#91;i&#93;;<br />i++; j++;<br />}<br />i++; j=0;<br /><br />while(RAW_DATA&#91;i&#93; != ',')<br />{<br />lat_dir&#91;j&#93;=RAW_DATA&#91;i&#93;;<br />i++; j++;<br />}<br />i++; j=0;<br /><br />while(RAW_DATA&#91;i&#93; != ',')<br />{<br />raw_longtitude&#91;j&#93;=RAW_DATA&#91;i&#93;;<br />i++; j++;<br />}<br />i++; j=0;<br /><br />while(RAW_DATA&#91;i&#93; != ',')<br />{<br />long_dir&#91;j&#93;=RAW_DATA&#91;i&#93;;<br />i++; j++;<br />}<br />i++; j=0;<br /><br />while(RAW_DATA&#91;i&#93; != ',') i++;<br />i++;<br /><br />while(RAW_DATA&#91;i&#93; != ',') i++;<br />i++;<br /><br />while(RAW_DATA&#91;i&#93; != ',') i++;<br />i++;<br /><br />while(RAW_DATA&#91;i&#93; != ',')<br />{<br />raw_altitude&#91;j&#93;=RAW_DATA&#91;i&#93;;<br />i++; j++;<br />}<br />i++; j=0;<br /><br />}<br />GGA_TRUE=0;<br />}<br /><br />void convert(char tim,char raw_lat,char raw_long,char lat_d, char long_d,char raw_alt)<br />{<br />static char time_lcd&#91;16&#93;,longtitude_lcd&#91;16&#93;,latitude_lcd&#91;16&#93;;<br />static uint32_t time_int;<br />static unsigned int hours,long_deg,lat_deg,long_min,lat_min,minutes,seconds;<br />float altitude,longtitude,latitude;<br /><br />time_int=atol(tim);<br />altitude=atof(raw_alt);<br />longtitude=atof(raw_long);<br />latitude=atof(raw_lat);<br /><br />hours=time_int / 10000;<br />minutes=(time_int % 10000)/100;<br />seconds=(time_int % 10000)%100;<br /><br />long_deg=longtitude/100;<br />long_min=(int)longtitude%100;<br />//long_sec=(float)longtitude%1;<br /><br />lat_deg=latitude/100;<br />lat_min=(int)latitude%100;<br />//lat_sec=(float)latitude%1;<br /><br /><br />sprintf(time_lcd,&quot;  %2.0d:%2.0d:%2.0d UTC&quot;,hours,minutes,seconds);<br />/*send_lcd(time_lcd,&quot;aa&quot;);<br />sprintf(longtitude_lcd,&quot;%2i° %2i' %0.2f'' %s&quot;,long_deg,long_min,longtitude,long_d);<br />sprintf(latitude_lcd,&quot;%2i° %2i' %0.2f'' %s&quot;,lat_deg,lat_min,latitude,lat_d);*/<br /><br />strcpy(output_lcd&#91;0&#93;,time_lcd);<br />}<br /><br />int main(void)<br />{<br />DDRD = _BV(2) | _BV(3) | _BV(4);<br />PORTD = _BV(2) | _BV(3) | _BV(4);<br /><br />usart_inicjuj();<br /><br />TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00);<br />TIMSK |= (1&lt;&lt;TOIE0);<br /><br />LCD_Initalize();<br />sei();<br />    while (1) <br />    {<br />parse_data();<br />convert(raw_time,raw_latitude,raw_longtitude,lat_dir,long_dir,raw_altitude);<br />send_lcd(output_lcd&#91;0&#93;,&quot;&quot;);<br />    }<br /><br />}[/syntax]<br /><br />Dane otrzymane po UARCIE zapisuję do tablicy NMEA_CODE, a następnie w funkcji parse_data, fragmentuję otrzymane dane. I tu zaczyna się problem:<br />globalne tablice char, tracą zawierające dane. Dane są dostępne jedynie przez chwilę, gdy zostanie spełniony warunek:<br />[syntax=c]if(strstr(RAW_DATA,&quot;GGA&quot;) != 0)[/syntax]<br /><br /><br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18499">fiery149</a> — 4 gru 2017, o 19:44</p><hr />
]]></content>
</entry>
</feed>