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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-12T16:33:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8095&amp;mode</id>
<entry>
<author><name><![CDATA[secom]]></name></author>
<updated>2014-08-12T16:33:32+01:00</updated>
<published>2014-08-12T16:33:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91253#p91253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91253#p91253"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91253#p91253"><![CDATA[
<div class="quotetitle">Sonix napisał(a):</div><div class="quotecontent"><br />A czy echo w SIM900 masz wyłączone??<br /></div><br /><br />Wyłączyłem echo i faktycznie działa z tablicą w rozmiarze 100 bajtów. Dzieki za pomoc.<br /><br /><div class="quotetitle">charsz napisał(a):</div><div class="quotecontent"><br />No ale skoro masz przejsciowke usb-rs232 to podlacz ja do SIM'a i wyslij te same komendy co programem i zobacz co sie zwraca. <br /><br />I popatrz jeszcze raz co pisalem o wywolaniu while(sendATcommand(...) == 0).<br /></div><br /><br />Ja cały czas monitorowałem odpowiedzi modułu za pomocą terminala Putty. Ale jakoś nie dotarło do mnie że echo to dodatkowe dane wysyłanie z modułu które procesor bedzie interpretował jako odpowiedz a komanda po wywołaniu której następował problem była znacząco dłuższa od innych.<br />Ok juz działa więc dzieki wielkie<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1903">secom</a> — 12 sie 2014, o 16:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[charsz]]></name></author>
<updated>2014-08-11T20:23:10+01:00</updated>
<published>2014-08-11T20:23:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91132#p91132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91132#p91132"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91132#p91132"><![CDATA[
<div class="quotetitle">secom napisał(a):</div><div class="quotecontent"><br />i faktycznie przy wykonywaniu funkcji sendATcommand przy ostatnim wywolaniu answer był 3. <br />Dzieki za pomoc. Chyba długo bym do tego nie doszedł gdyż odpowiedz modułu na komende AT+CIPSTART jest albo &quot;CONNECT OK&quot; albo &quot;CONNECT FAIL&quot;. A to napewno nie jest nawet 100 bajtów. Szczerze na chwile obecną nie rozumiem dlaczego rozmiar tablicy response 100 bajtów był niewystarczający ale może dojde do tego<br /></div><br />No ale skoro masz przejsciowke usb-rs232 to podlacz ja do SIM'a i wyslij te same komendy co programem i zobacz co sie zwraca. <br /><br />I popatrz jeszcze raz co pisalem o wywolaniu while(sendATcommand(...) == 0).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=926">charsz</a> — 11 sie 2014, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2014-08-11T17:17:52+01:00</updated>
<published>2014-08-11T17:17:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91101#p91101</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91101#p91101"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91101#p91101"><![CDATA[
W procedurze inicjalizacji modemu wyślij ATE0, bez sensu żeby modem wysyłał to co otrzymał. Procek niepotrzebnie analizuje śmieci. Zapycha również bufor odbiorczy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 11 sie 2014, o 17:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[secom]]></name></author>
<updated>2014-08-11T17:12:10+01:00</updated>
<published>2014-08-11T17:12:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91099#p91099</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91099#p91099"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91099#p91099"><![CDATA[
Echo nie jest wyłączone. Jutro spróbuje z wyłączonym Echo i napisze czy będa problemy przy rozmiarze response 100 bajtów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1903">secom</a> — 11 sie 2014, o 17:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2014-08-11T16:54:24+01:00</updated>
<published>2014-08-11T16:54:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91097#p91097</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91097#p91097"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91097#p91097"><![CDATA[
<div class="quotetitle">secom napisał(a):</div><div class="quotecontent"><br />.....Chyba długo bym do tego nie doszedł gdyż odpowiedz modułu na komende AT+CIPSTART jest albo &quot;CONNECT OK&quot; albo &quot;CONNECT FAIL&quot;. A to napewno nie jest nawet 100 bajtów. Szczerze na chwile obecną nie rozumiem dlaczego rozmiar tablicy response 100 bajtów był niewystarczający ale może dojde do tego.......<br /></div><br /><br /><br />A czy echo w SIM900 masz wyłączone??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 11 sie 2014, o 16:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[secom]]></name></author>
<updated>2014-08-11T16:48:27+01:00</updated>
<published>2014-08-11T16:48:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91096#p91096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91096#p91096"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91096#p91096"><![CDATA[
Faktycznie masz racje. Zwiększyłem rozmiar tablicy response do 200 bajtów i zaczęło działać. Dołożyłem jak wskazałeś warunek:<br />[syntax=c]if (x &gt; 99) { answer = 3; }[/syntax]<br /><br />i faktycznie przy wykonywaniu funkcji sendATcommand przy ostatnim wywolaniu answer był 3. <br />Dzieki za pomoc. Chyba długo bym do tego nie doszedł gdyż odpowiedz modułu na komende AT+CIPSTART jest albo &quot;CONNECT OK&quot; albo &quot;CONNECT FAIL&quot;. A to napewno nie jest nawet 100 bajtów. Szczerze na chwile obecną nie rozumiem dlaczego rozmiar tablicy response 100 bajtów był niewystarczający ale może dojde do tego<br /><br />Dzieki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1903">secom</a> — 11 sie 2014, o 16:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[charsz]]></name></author>
<updated>2014-08-11T14:41:41+01:00</updated>
<published>2014-08-11T14:41:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91079#p91079</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91079#p91079"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91079#p91079"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Ta sekwencja również poprawnie się wykonuje po ostatnim wywołaniu funkcji sendATcommand (z instrukcja AT+CIPSTART). Ewidentnie w momencie dojscia programu do instrukcji return answer; procesor sie restartuje.<br /></div><br />Niestety nie widze tyle co ty. Co ci wyswietla lcd_int(answer) w problematycznej funkcji?<br /><br />PS. boli mnie ze nie czytasz uwag. Czy moglbys dla swietego spokoju (mojego) dodac po lini: [syntax=c]response&#91;x&#93; = UART0_char;[/syntax]<br />linie [syntax=c]if (x &gt; 99) { answer = 3; }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=926">charsz</a> — 11 sie 2014, o 14:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[secom]]></name></author>
<updated>2014-08-11T14:15:17+01:00</updated>
<published>2014-08-11T14:15:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91075#p91075</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91075#p91075"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91075#p91075"><![CDATA[
Ja mam podłączony terminal Putty przez przejsówke usb-rs232 do modułu i widze pieknie co wysyła procesor do modułu i co moduł odpowiada. Ewidentnie na terminalu widac że wszystko działa jak należy, moduł się podłącza komendą AT+CIPSTART poprawnie, nawet na serwerze widzę że przyszło połączenie. Jednak zaraz po tym nastepuje ponowne podłączanie modułu. Jak spojrzycie do kodu to jest tam zdefiniowana zmienna test. Na początku programu jest ona ustawiona na 20 oraz jest wyswietlona razem z napisem &quot;Poczatek&quot; w funkcji main() czyli na LCD pojawia się 'Poczatek20'. Tuż przed wykonaniem linii 'if (sendATcommand(&quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;secomnysa.dyndns.biz\&quot;,\&quot;8080\&quot;&quot;,&quot;CONNECT OK&quot;, &quot;CONNECT FAIL&quot;, 10000) == 1)' jest ta zmienna ustawiana na 10. <br />Po wykonaniu tej linii na wyswietlaczu LCD pojawia się napis 'Poczatek20' wiec wnioskuje że procesor sie zresetował.<br />Jednoczesnie w funkcji sendATcommand na jej końcu jest :<br /><br /><strong>lcd_cls();<br />locate (1,0);<br />lcd_int(answer);<br /> _delay_ms(2000);<br />lcd_cls();<br />return answer;</strong><br /><br />Ta sekwencja pokazuje mi jaki jest answer po wykonaniu funkcji sendATcommand. <br />Ta sekwencja również poprawnie się wykonuje po ostatnim wywołaniu funkcji sendATcommand (z instrukcja AT+CIPSTART). Ewidentnie w momencie dojscia programu do instrukcji return answer; procesor sie restartuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1903">secom</a> — 11 sie 2014, o 14:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[charsz]]></name></author>
<updated>2014-08-11T13:54:00+01:00</updated>
<published>2014-08-11T13:54:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91073#p91073</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91073#p91073"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91073#p91073"><![CDATA[
Zaczalbyym od podpiecia terminal z PC zamiast modulu GPRS i udawal recznie modul. <br />Oczywiscie przez jakis konweter max232 jesli masz rs, albo ft232 pod usb.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />Jakbym mial strzelac to zrodlo problemu moze byc tu: <br /><br />[syntax=c]char response&#91;100&#93;;<br />...<br />                        if (UART0_char!='\0') {<br />                                response&#91;x&#93; = UART0_char;<br />                                x++;<br />                        }[/syntax]<br />Zobacz co sie stanie jesli SIM908 zwroci ci wiecej niz 100 bajtow. Przy 101 sprobujesz zapisac do komorki. Jakiejs komorki, na pewno nie do tej ktora zarezerwowales piszac char response[100];<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />Druga sprawa to sposob w jaki uzywasz funkcji sendATcommand:<br />[syntax=c]while(sendATcommand(&quot;AT+CIPSTATUS&quot;, &quot;INITIAL&quot;, &quot;&quot;, 500)  == 0 );[/syntax]<br /><br />Patrzac w kod sendATcommand widze ze 0 moze zwrocic tylko w przypadku timeoutu. To na pewno oczekiwane zachowanie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=926">charsz</a> — 11 sie 2014, o 13:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2014-08-11T13:52:32+01:00</updated>
<published>2014-08-11T13:52:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91072#p91072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91072#p91072"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91072#p91072"><![CDATA[
Ja zlogowałbym transmisję uC&lt;&gt;SIM900 i zobaczył jaka jest odpowiedź modemu na zadaną komendę AT+CIPSTART<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 11 sie 2014, o 13:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-08-11T13:36:04+01:00</updated>
<published>2014-08-11T13:36:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91068#p91068</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91068#p91068"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91068#p91068"><![CDATA[
<div class="quotetitle">secom napisał(a):</div><div class="quotecontent"><br />Czy jest coś takiego jak za duża liczba instrukcji 'if' w eclipse?<br /></div><br /><br />Pomyśl chwileczkę, zastanów się - co mają w ogóle instrukcje 'if' wspólnego z eclipse ? .... eclipse to TYLKO edytor kodu i nic więcej, ale ok pewnie może ci chodziło o kompilator WinAVR albo Atmel toolchain, to też zapomnieć możesz, że coś ci się resetuje bo jest ich jakaś ograniczona liczba.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 sie 2014, o 13:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[secom]]></name></author>
<updated>2014-08-11T13:30:19+01:00</updated>
<published>2014-08-11T13:30:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91067#p91067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91067#p91067"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91067#p91067"><![CDATA[
Raczej nie bedzie to problem nieistniejących funkcji obsługi UARTów gdyż wszystkie powyższe wywołania funkcji sendATcommand się wykonują a po ich wywołaniu moduł wysyła komendy które są prawidłowo interpretowane przez Atmege. Problem występuje tylko po wywołaniu ostatniej funkcji sendATcommand.<br />Co do zasilania to moduł sim908 jest zasilany osobno a procesor osobno. Masy tylko są połączone. Więc zwiekszony pobór prądu modułu nie może wpłynąć na spadek zasilania na procesorze.<br /><br />Na chwilę obecną dodatkowo zauważyłem iż gdy wykomentuje linię while(sendATcommand(&quot;AT+CIPSTATUS&quot;, &quot;IP STATUS&quot;, &quot;&quot;, 1000)  == 0 );' - czyli bezpośrednio przed 'if (sendATcommand(&quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;secomnysa.dyndns.biz\&quot;,\&quot;8080\&quot;&quot;,&quot;CONNECT OK&quot;, &quot;CONNECT FAIL&quot;, 10000) == 1)' to problem nie występuje. <br /><br />Czy jest coś takiego jak za duża liczba instrukcji 'if' w eclipse?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1903">secom</a> — 11 sie 2014, o 13:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-11T13:10:13+01:00</updated>
<published>2014-08-11T13:10:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91065#p91065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91065#p91065"/>
<title type="html"><![CDATA[Re: Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91065#p91065"><![CDATA[
Bezpośrednio z kodu to nie wynika, ale może masz odblokowane przerwania dotyczące UART'ów i w momencie wykonania tej instrukcji moduł przesyła dane co powoduje przeskok do nieistniejącej funkcji obsługi przerwania, a później to już wiadomo co...<br /><br />Może to też być problem sprzętowy tzn. w momencie połączenia moduł może pobierać do 2A prądu, a więc krótko mówiąc zabiera go procesorowi który się resetuje (następuje duży spadek napięcia poniżej progu Vcc min uC).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 11 sie 2014, o 13:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[secom]]></name></author>
<updated>2014-08-11T12:22:31+01:00</updated>
<published>2014-08-11T12:22:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91062#p91062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91062#p91062"/>
<title type="html"><![CDATA[Reset Atmegi 644PA po wyjściu z funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8095&amp;p=91062#p91062"><![CDATA[
Witam<br /><br />Próbuje napisać aplikacje łączącą się przez gprs z serwerem w celu przesłania danych. Używam do tego Atmega644PA oraz moduł SIM908.<br />Poniżej kod.<br />[syntax=c]unsigned char UART1_char ;<br />char wart_talerz;<br />char wart_tasma;<br />char wart_pompa;<br /><br />char sent_wart_talerz;<br />char sent_wart_tasma;<br />char sent_wart_pompa;<br />uint8_t test = 20;<br /><br />volatile int timer=0;<br /><br />char* phone_number ;<br />char UART0_char;<br />char UART1_tab&#91;2&#93;;<br />char UART0_tab&#91;2&#93;;<br /><br />int main (void ) {<br /><br />sei();// globalne odblokowanie przerwań<br />USART_Init1( __UBRR1 );// inicjalizacja UART<br />USART_Init0( __UBRR0 );// inicjalizacja UART<br /><br />initialization();<br />TCCR0A |=(1&lt;&lt;WGM01); // tryb timera 0 CTC<br />TCCR0B |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00); // PRESKALER 1024<br />OCR0A = 16; // ZAWARTOSC REJESTRU POROWNANIA<br /><br /><br />//POWER_KEY_DOWN;<br />//_delay_ms(2000);<br />//POWER_KEY_UP;<br />lcd_cls();<br />lcd_str(&quot;Poczatek&quot;);<br />lcd_int(test);<br />_delay_ms(3000);<br /><br /><br />while (1) {<br />if (make_connection()==1) {<br />send_spreaders_work_parameters();<br />} else {<br />sendATcommand(&quot;AT+CIPSHUT&quot;, &quot;OK&quot;, &quot;ERROR&quot;, 10000);<br />_delay_ms(5000);<br />}<br />}<br /><br />}<br /><br />uint8_t make_connection() {<br />uint8_t status=1;<br />lcd_cls();<br />locate (0,0);<br />lcd(&quot;Laczee..&quot;);<br /><br />do {<br /><br />} while (sendATcommand(&quot;AT&quot;, &quot;OK&quot;, &quot;OK&quot;, 2000) ==0);<br /><br />while( sendATcommand(&quot;AT+CREG?&quot;, &quot;+CREG: 0,1&quot;, &quot;+CREG: 0,5&quot;, 1000)== 0 );<br /><br />//get_phone_number();<br />lcd_cls();<br />locate (0,0);<br />lcd(&quot;OK&quot;);<br />_delay_ms(1000);<br />lcd_cls();<br /><br />sendATcommand(&quot;AT+CIPSHUT&quot;, &quot;OK&quot;, &quot;ERROR&quot;, 10000);<br /> // Selects Single-connection mode<br />    if (sendATcommand(&quot;AT+CIPMUX=0&quot;, &quot;OK&quot;, &quot;ERROR&quot;, 1000) == 1)<br />    {<br />        // Waits for status IP INITIAL<br />        while(sendATcommand(&quot;AT+CIPSTATUS&quot;, &quot;INITIAL&quot;, &quot;&quot;, 500)  == 0 );<br />        _delay_ms(5000);<br /><br />        // Sets the APN, user name and password<br />        if (sendATcommand(&quot;AT+CSTT=\&quot;internet\&quot;,\&quot;internet\&quot;,\&quot;internet\&quot;&quot;, &quot;OK&quot;,  &quot;ERROR&quot;, 30000) == 1)<br />        {<br />            // Waits for status IP START<br />            while(sendATcommand(&quot;AT+CIPSTATUS&quot;, &quot;START&quot;, &quot;&quot;, 500)  == 0 );<br />            _delay_ms(5000);<br /><br />            // Brings Up Wireless Connection<br />            if (sendATcommand(&quot;AT+CIICR&quot;, &quot;OK&quot;, &quot;ERROR&quot;, 30000) == 1)<br />            {<br />                // Waits for status IP GPRSACT<br />                while(sendATcommand(&quot;AT+CIPSTATUS&quot;, &quot;GPRSACT&quot;, &quot;&quot;, 500)  == 0 );<br />                _delay_ms(5000);<br /><br />                // Gets Local IP Address<br />                if (sendATcommand(&quot;AT+CIFSR&quot;, &quot;.&quot;, &quot;ERROR&quot;, 10000) == 1)<br />                {<br />                    // Waits for status IP STATUS<br />                    while(sendATcommand(&quot;AT+CIPSTATUS&quot;, &quot;IP STATUS&quot;, &quot;&quot;, 500)  == 0 );<br />                    locate (0,0);<br />                    lcd_str (&quot;Opening TCP&quot;);<br />                    test = 10;<br />                    _delay_ms(5000);<br /><br />                    // Opens a TCP socket<br />                    if (sendATcommand(&quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;secomnysa.dyndns.biz\&quot;,\&quot;8080\&quot;&quot;,&quot;CONNECT OK&quot;, &quot;CONNECT FAIL&quot;, 10000) == 1)<br />                    {<br />                    lcd_cls();<br />                    lcd_str(&quot;Connected&quot;);<br />                    _delay_ms(3000);<br />                    }<br />                    else<br />                    {<br />                    lcd_cls();<br />                    lcd_str(&quot;Error openning the connection&quot;);<br />                    _delay_ms(5000);<br />                    status=0;<br />                   }<br />                }<br />                else<br />                {<br />                lcd_cls();<br />                lcd_str(&quot;Error getting the IP address&quot;);<br />                _delay_ms(5000);<br />                status=0;<br />                }<br />            }<br />            else<br />            {<br />            lcd_cls();<br />            lcd_str(&quot;Error bring up wireless connection&quot;);<br />            _delay_ms(5000);<br />            status=0;<br />            }<br />        }<br />        else<br />        {<br />        lcd_cls();<br />        lcd_str(&quot;Error setting the APN&quot;);<br />        _delay_ms(3000);<br />        status=0;<br />        }<br />    }<br />    else<br />    {<br />    lcd_cls();<br />    lcd_str(&quot;Error setting the single connection&quot;);<br />    _delay_ms(5000);<br />    status=0;<br />    }<br /><br /><br />    return status;<br />}<br /><br /><br /><br />uint8_t sendATcommand(char* command, char* expected_answer1, char* expected_answer2, int timeout) {<br />uint8_t answer =0;<br />uart_puts0(command);<br />uart_putc0(13);<br />char response&#91;100&#93;;<br />char* schowek;<br />uint8_t x=0;<br />memset(response, '\0', 100);    // Initialize the string<br />TIMSK0 |= (1&lt;&lt;OCIE0A); //URUCHOMIENIE PRZERWAŃ TRYBU CTC TIMERA 0<br /><br />do {<br />UART0_char = uart_getc0();<br /><br />if (UART0_char!='\0') {<br />response&#91;x&#93; = UART0_char;<br />x++;<br />}<br /><br />if (strstr(response, expected_answer1) != NULL) {<br />answer = 1;<br />}<br /><br />else if (strstr(response, expected_answer2) != NULL) {<br />answer = 2;<br />}<br />_delay_ms(1);<br /><br />} while (((answer==0) &amp;&amp; (timer&lt;timeout)));<br /><br /><br /><br />TIMSK0 &amp;= ~(1&lt;&lt;OCIE0A);<br />TCNT0 =0;<br />timer=0;<br /><br />lcd_cls();<br />locate (1,0);<br />lcd_int(answer);<br />_delay_ms(2000);<br />lcd_cls();<br />return answer;<br />}<br /><br /><br /><br />ISR (TIMER0_COMPA_vect) {// procedura przerwania timera 0 od CTC<br />timer++;<br /><br />}[/syntax]<br /><br />Samo podłączenie do internetu i podłączenie do servera TCP działa.<br />Jednakże zaraz po podłączeniu czyli po wykonaniu instrukcji :<br />' if (sendATcommand(&quot;AT+CIPSTART=\&quot;TCP\&quot;,\&quot;secomnysa.dyndns.biz\&quot;,\&quot;8080\&quot;&quot;,&quot;CONNECT OK&quot;, &quot;CONNECT FAIL&quot;, 10000) == 1)'<br />procesor restartuje. Po podłączeniu powinien pojawić się napis 'Connected&quot; na wyświetlaczu LCD lub &quot;Error openning the connection&quot; w przypadku niepowodzenia. Nie pojawia się nic. Pojawia się napis 'Poczatek20' co sugeruje że program działa od początku. Doszedłem to tego iż funkcja sendATcommand wykonuje się do końca i po wykonaniu 'return answer' program działa od początku. Nie mam pojęcia dlaczego się tak dzieje. Każde wykonanie funkcji sendATcommand działa poprawnie tylko ostatnie jej wywołanie powoduje brak powrotu z tej funkcji i restart programu.<br />Czy ktoś może pomóc?<br /><br />Pozdrawiam<br /><br />Marcin<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1903">secom</a> — 11 sie 2014, o 12:22</p><hr />
]]></content>
</entry>
</feed>