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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-21T22:09:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15624&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-21T22:09:12+01:00</updated>
<published>2016-06-21T22:09:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162719#p162719</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162719#p162719"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162719#p162719"><![CDATA[
Mam nadzieję, że w związku z powyższym mocno się przyda &quot;w razie czego&quot; Yelloboook&quot; nad którym obecnie pracuję a to właśnie będzie jeden z wiodących tematów książki <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=54">mirekk36</a> — 21 cze 2016, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[John Hello]]></name></author>
<updated>2016-06-21T21:53:51+01:00</updated>
<published>2016-06-21T21:53:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162718#p162718</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162718#p162718"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162718#p162718"><![CDATA[
Dziękuję za cenne uwagi.<br /><br />Aczkolwiek na razie odbieram tylko SMS-y, więc zrobiłem na razie trochę na skróty.<br />Chociaż przerobiłem też wysyłanie SMS, odbieranie dzwonienia i dzwonienie i za chwilę okaże się, że trzeba będzie pisać bardziej uniwersalnie.<br /><br />Dla ciekawskich w main mam tak:<br />[syntax=c]//cztery komendy do modemu, po nich czekam na SMS<br />i=0;<br />uart_puts_P( polecenia_at&#91;i&#93;.polecenie_at );<br />uart_puts(&quot;\r&quot;);<br />Timer1 = 1000; //10 sek<br /><br />while(1){<br /><br />UART_RX_STR_EVENT(uart_buf);<br />if ((!Timer1) &amp;&amp; (i&lt;4)){<br />lcd_cls();<br />lcd_locate(1,0);<br />lcd_str(&quot;TIMEOVER&quot;);<br />}<br />}[/syntax]<br />Z kolei w funkcji parsującej:<br />[syntax=c]//--------------funkcja do analizy odebranych danych z UART czyli modułu GSM---------------<br />void parse_rs232( char *buf){<br />// parsowanie SMS<br />// +CMT: &quot;+48xxxxxxxxx&quot;, &quot;John&quot;, &quot;16/06/18, 17:15:58+08&quot;<br />// message<br />if (!strlen(buf))  return;<br /><br />if  (strncmp(&quot;OK&quot;, buf, 2)==0) {<br />....<br />i++;<br />if (i==4){<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str( &quot;CZEKAM na SMS&quot; );<br />}<br />if (i&lt;4){<br />_delay_ms(1000); //na razie<br />uart_puts_P( polecenia_at&#91;i&#93;.polecenie_at );<br />uart_puts(&quot;\r&quot;);<br />Timer1 = 1000;<br />}<br />}<br />if  (strncmp(&quot;ERROR&quot;, buf, 4)==0) {<br />...<br />if (i&lt;4){<br />uart_puts_P( polecenia_at&#91;i&#93;.polecenie_at );<br />uart_puts(&quot;\r&quot;);<br />Timer1 = 1000;<br />}<br />}<br /><br />if (strncmp(&quot;+CMT:&quot;, buf, 5)==0) {[/syntax]<br /><br />P.S. Czekam niecierpliwie na YB<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14237">John Hello</a> — 21 cze 2016, o 21:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-20T20:43:55+01:00</updated>
<published>2016-06-20T20:43:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162676#p162676</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162676#p162676"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162676#p162676"><![CDATA[
Dokładnie jak mówisz, w książce jest odwrotna komunikacja niż z urządzeniem typu modem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jeśli to zauważyłeś to fajnie bo to znaczy, że dobre analizujesz rozdział <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Jak wspominałem obsługa &quot;W DRUGĄ&quot; stronę jest co nieco trudniejsza ale nie niemożliwa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ja właśnie robię komunikację z modemem GSM do Yellowbooka i używam dokładnie tych samych mechanizmów <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> dlatego byłem w stanie ci coś na szybko podpowiedzieć i zasugerować .... Jaką można iść drogą<br /><br /><div class="quotetitle">John Hello napisał(a):</div><div class="quotecontent"><br />Więc tabela z komendami jest niepotrzebna (wydaje mi się), co najwyżej potrzebuję tabeli z odpowiedziami.<br /></div><br />Tablica z komendami AT - nie potrzebna ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... no ciekawe - ja tam bez niej nie mogę się obejść a dodatkowo można ją tak zorganizować, żeby ta sama tablica służyła w wielu przypadkach komend zarówno jako odpowiedzi jak i same komendy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jak ?<br /><br />proszę bardzo<br /><br />&quot;+CMGF&quot;<br />&quot;+CNMI&quot;<br />&quot;+CREG&quot;<br />&quot;+CPAS&quot;<br />&quot;E1&quot;<br />&quot;E2&quot;<br />&quot;I1&quot;<br /><br />to tablica i komend i odpowiedzi jakie od nich dostajemy w JEDNYM <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />nie sądzisz ? Jeśli chcemy wykorzystać jako tablicę komend AT, wystarczy sobie wysłać przed stringiem z tablicy sekwencję &quot;AT&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />A jeśli odsyłają dane np: <br /><br />+CREG: 1,1<br /><br />to już mam do parsowania wzór w tablicy <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=54">mirekk36</a> — 20 cze 2016, o 20:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[John Hello]]></name></author>
<updated>2016-06-20T20:00:38+01:00</updated>
<published>2016-06-20T20:00:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162668#p162668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162668#p162668"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162668#p162668"><![CDATA[
Żeby już zakończyć dyskusję z samym sobą dodam, że u mnie jest akurat odwrotna sytuacja niż opisywana w w/w rozdziale.<br /><br />Tam z PC wysyłamy jakieś komendy AT do uC.<br />U mnie uC wysyła komendy do urządzenia i trzeba parsować odpowiedzi.<br /><br />Więc tabela z komendami jest niepotrzebna (wydaje mi się), co najwyżej potrzebuję tabeli z odpowiedziami. <br /><br />Dziękuję za zainteresowanie, mam nadzieję, że uwagi Mirka w powyższym temacie komuś się przydały. Bo mnie jak najbardziej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14237">John Hello</a> — 20 cze 2016, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[John Hello]]></name></author>
<updated>2016-06-20T17:56:34+01:00</updated>
<published>2016-06-20T17:56:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162652#p162652</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162652#p162652"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162652#p162652"><![CDATA[
No tak, dałem plamę, wszystko mam przecież ładnie opisane w Green Booku, rozdział UART- zdarzenia, parsowanie danych.<br /><br />Z czego zresztą już nieraz korzystałem w innych prostszych sytuacjach.<br />A teraz w tej trochę bardziej zawiłej ratuje mi życie przed zapętleniem w &quot;szponach if if if&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14237">John Hello</a> — 20 cze 2016, o 17:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[John Hello]]></name></author>
<updated>2016-06-20T16:32:24+01:00</updated>
<published>2016-06-20T16:32:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162648#p162648</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162648#p162648"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162648#p162648"><![CDATA[
Już przemyślałem.<br /><br />Dziękuję za cenne uwagi. <br /><br />Wprawdzie post mój z początku dotyczył czegoś innego,<br />a sprawę elegancji (gdyż od początku zdawałem sobie sprawę z ułomności mojego kodu )  zostawiłem na później.<br /><br />Teraz zabieram się zgodnie z podpowiedziami do napisania kodu elegancko, wykorzystując timer programowy i tablicę z instrukcjami.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14237">John Hello</a> — 20 cze 2016, o 16:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[John Hello]]></name></author>
<updated>2016-06-20T06:30:35+01:00</updated>
<published>2016-06-20T06:30:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162623#p162623</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162623#p162623"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162623#p162623"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Twoim problemem w kodzie jest niestety przede wszystkim i od tego trzeba zacząć MEGA nieszczęsny _delay_ms(500); a do tego użycie zdarzenia kompletnie niezgodnie z jego przeznaczeniem<br /><br />to wszystko MUSI się dziać zupełnie asynchronicznie a tymczasem to co robisz to jakiś powrót do programowania liniowego niestety ...<br /></div><br />Instrukcje muszą się u mnie wykonać tylko RAZ, a ja nie wiem jak długo muszę czekać na odpowiedź. Dlatego powróciłem do programowania liniowego PRZED pętlą główną.<br /><br />Dopiero dalej, w pętli głównej mam działanie nieblokujące, bez delay.<br /><br />P.S. Resztę odpowiedzi przemyślę później.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14237">John Hello</a> — 20 cze 2016, o 06:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-19T23:02:00+01:00</updated>
<published>2016-06-19T23:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162617#p162617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162617#p162617"/>
<title type="html"><![CDATA[Re: Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162617#p162617"><![CDATA[
Twoim problemem w kodzie jest niestety przede wszystkim i od tego trzeba zacząć MEGA nieszczęsny _delay_ms(500); a do tego użycie zdarzenia kompletnie niezgodnie z jego przeznaczeniem<br /><br />to wszystko MUSI się dziać zupełnie asynchronicznie a tymczasem to co robisz to jakiś powrót do programowania liniowego niestety ...<br /><br />-------------------------------------<br /><br />trzeba sobie dobrze przemyśleć algorytm działań asynchronicznych<br /><br />jeśli potrzebujesz wysyłać kilka poleceń, jedno po drugim, ale tak że każde następne ma być wysłane aż nadleci odpowiedź z poprzedniego to MUSISZ jeszcze rozważyć:<br /><br />1. reakcję na błędy: ERROR (zakładam, że mówisz o modemie)<br />2. reakcję na brak odzewu z urządzenia czyli TIMEOUT<br /><br />a nie tylko reakcję na komunikat OK<br /><br />Zatem jak widzisz wygląda to tak jakby się sytuacja gmatwała coraz bardziej i była coraz trudniejsza, ale <br /><br /><br />.... co za problem powołać sobie np timer programowy, który będzie odpalany po każdej odpowiedzi OK z urządzenia, zaś w tym timerze będą cyklicznie wysyłane jakieś polecenia z tablicy którą wcześniej przygotujesz. Wtedy wystarczy, że ręcznie zainicjujesz wysłanie pierwszego polecenia - a kolejnymi już zajmie się timer programowy. Oczywiście możesz wtedy również spokojnie reagować i na błędy i na timeout'y<br /><br />-----------------------<br /><br />jest jeszcze trochę innych sposobów ale najpierw wypróbuj choćby ten - żeby przede wszystkim zrozumieć NAJWAŻNIEJSZĄ rzecz<br /><br />ZAPOMNIJ o _delay'ach przy obsłudze odbioru danych z RS232 w oparciu o zdarzenia. ZAPOMNIJ o takim stosowaniu zdarzenia odbiorczego - jakby ono miało być jakimś cudownym oczekiwaniem na reakcję - a widać po twoich próbach kodu - że to tak nie działa, dlatego próbowałeś się dramatycznie ratować paskudnym DELAYEM po wysłaniu komendy... Uwierz mi to jest zgroza I jak już zaszedłeś na tyle daleko żeby sięgnąć po zdarzenia do obsługi UART'a , callbacki i parsowanie danych - to nie zapominaj np o technice timerów programowych itp<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 cze 2016, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[John Hello]]></name></author>
<updated>2016-06-19T22:16:54+01:00</updated>
<published>2016-06-19T22:16:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162616#p162616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162616#p162616"/>
<title type="html"><![CDATA[Pewien problem z obsługą UARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15624&amp;p=162616#p162616"><![CDATA[
Nad tym problemem siedzę już pół dnia, być może jutro go sam jakoś rozwikłam,<br />ale,<br />gdyby ktoś chciał pochylić się nad wyjaśnieniem, to byłoby miło.<br /><br />Problem jest taki, PRZED pętlą główną wysyłam do urządzenia cztery komendy.<br />Po każdej ma być odpowiedź OK\r i to muszę wiedzieć, bo wtedy jest wszystko że tak powiem OK.<br />[syntax=c]licz=0;<br />while(licz&lt;4){<br />switch (licz){<br />      case 0:   uart_puts(&quot;AT0\r&quot;);  <br />             _delay_ms(500);<br />            UART_RX_STR_EVENT(uart_buf);<br />            lcd_locate(0,0);<br />    lcd_str(&quot;AT0&quot;);<br />    break;<br />      case 1:  uart_puts(&quot;AT1\r&quot;);<br />   _delay_ms(500);<br />   UART_RX_STR_EVENT(uart_buf);<br />   lcd_locate(0,0);<br />   lcd_str(&quot;AT1&quot;);<br />   break;<br />      case 2:  uart_puts(&quot;AT2\r&quot;);<br />   _delay_ms(500);<br />   UART_RX_STR_EVENT(uart_buf);<br />   lcd_locate(0,0);<br />   lcd_str(&quot;AT2&quot;);<br />   break;<br />      case 3:  uart_puts(&quot;AT3\r&quot;);<br />   _delay_ms(500);<br />   UART_RX_STR_EVENT(uart_buf);<br />   lcd_locate(0,0);<br />   lcd_str(&quot;AT3&quot;);<br />   break;<br />}<br />licz++;<br />        if (licz==4)break;<br />       }[/syntax]<br />Z kolei w funkcji zdarzeniowej jak wiadomo, bo korzystam z bibliotek z BB i GB, if ascii_line, to odbieram string z bufora cyklicznego i wywołuję funkcję collbackową, która miedzy innymi wygląda tak:<br />[syntax=c]void parse_rs232( char *buf){<br />static uint8_t xyz;<br /><br />lcd_locate(1,6+xyz);<br />lcd_int(xyz);<br /><br />//if (strpbrk(buf, &quot;OK&quot;)){<br />//lcd_cls();<br />//lcd_locate(1,6);<br />//lcd_int(xyz); //str(buf);<br />}<br />xyz++;<br />...[/syntax]<br />Na wyświetlaczu LCD otrzymuję co te 0,5 sek (wiersz 0 i wiersz 1):<br />AT0<br />          0<br />następnie:<br />AT1<br />            1<br />następnie:<br />AT2<br />              2<br />a teraz uwaga:<br />null<br />                 3  4  5  6  7<br />Powiedzmy, że po komendzie AT2 otrzymuję odpowiedź OK z dodatkowymi czterema znakami CR (ile tych znaków, tego nie wiem).<br />Gdyby były dodatkowe znaki CR, nawet i 100, to string byłby pusty, zwiększa się tylko licznik ascii_line.<br /><br />Zdarzenie UART_RX_STR_EVENT(uart_buf) obsługuje jeden string, to skąd mam tę 7?<br /><br />Z góry dziekuję za zainteresowanie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />Chyba wiem.<br />W pętli głównej mam tylko to:<br />[syntax=c]while(1){<br />UART_RX_STR_EVENT(uart_buf);<br />}[/syntax]<br />Ponieważ po ostatniej komendzie AT3 nie dałem jakiegoś delaya więc nie widziałem, że wszystko było poprawnie.<br />A te nadmiarowe CR to zapewne już są (były) odpowiedziami urządzenia po AT3, ale już z pętli głównej i dlatego doliczało do 7.<br /><br />Jutro to sprawdzę.<br /><br />Po pierwsze, jak widać nie należy się śpieszyć z otwarciem nowego postu, bo to może być mało interesujące dla forumowiczów.<br /><br />Po drugie ten post jest przykładem na to, że jak się opisze problem, to zaraz jest łatwiej dojść o co chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14237">John Hello</a> — 19 cze 2016, o 22:16</p><hr />
]]></content>
</entry>
</feed>