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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-01-22T13:30:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21899&amp;mode</id>
<entry>
<author><name><![CDATA[Slawek]]></name></author>
<updated>2019-01-22T13:30:32+01:00</updated>
<published>2019-01-22T13:30:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216014#p216014</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216014#p216014"/>
<title type="html"><![CDATA[Re: UART i TimeOut]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216014#p216014"><![CDATA[
Dzięki za odpowiedz, ale w przypadku przerwania od UART jest taki problem (dla mnie) że mogę nie zapanować nad tym co przychodzi?<br />Całość ma działać tak, że jest zapytanie do układu i odpowiedź, a w chwili ewentualnego rozłączenia zareagować Timeoutem.<br /><br /><br />Jak popatrzę co jest wygenerowane w ASM przez kompilator to mam faktycznie zapętlenie bez sprawdzania warunku Skacze 5 adresów na dół i potem 5 do góry. Nie mam jak tego teraz pokazać, ale coś z optymalizacją chyba jest nie tak (mam ustawiona na -Os)<br />Zmienna jest volatile w piku tym co funkcja do UART, tylko LCD mam w innej.<br /><br />Ale masz rację, zacznę od małych kroków, napiszę tylko samą funkcję do odbioru danych i zobaczę co się dzieje z nią i pokaże Wam jak to działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=69">Slawek</a> — 22 sty 2019, o 13:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-01-22T12:58:44+01:00</updated>
<published>2019-01-22T12:58:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216013#p216013</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216013#p216013"/>
<title type="html"><![CDATA[Re: UART i TimeOut]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216013#p216013"><![CDATA[
Błąd błędem, ale staram się wymyślić skąd taka konstrukcja? <br />Nie było by lepiej powołać do życia jakąś zmienną i &quot;napełnić&quot; ją wartością rejestru UDR gdy przyjdzie przerwanie &quot;jest nowy bajt&quot;?<br />To taki najprostszy sposób. <br />Oczywiście później rozwija się to do postaci bufora cyklicznego ale na początek<br />[syntax=c]ISR( USART0_RXC_vect ) {<br />   zmienna = UDR0; <br />   flaga_nowy_bajt = 1;<br />}[/syntax] rozwiązuje Ci całą masę problemów.<br />Później obrabiasz tylko wartość zmiennej która jest &quot;napełniana&quot; w przerwaniu.<br /><br />P/S Nazwa przerwania jest z procka który ma dwa uarty stąd ta nazwa. USART0<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 22 sty 2019, o 12:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-01-22T12:16:42+01:00</updated>
<published>2019-01-22T12:16:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216012#p216012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216012#p216012"/>
<title type="html"><![CDATA[Re: UART i TimeOut]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216012#p216012"><![CDATA[
Nie masz żadnych ostrzeżeń po kompilacji? Spróbuj włączyć może dodatkowe ostrzeżenia -Wextra i -pedantic.<br />Wygląda to tak, jakby kompilator nie traktował zmiennej <em>TimerProg</em> jako <strong><em>volatile</em></strong> i po prostu zoptymalizował sprawdzanie warunku <em>if(!TimerProg)</em> (przyjął, że warunek będzie zawsze niespełniony). Zmienną <em>TimerProg</em> masz zdefiniowaną w tym samym pliku źródłowym, co funkcję <em>UART_receive()</em>?<br /><br />Mógłbyś ewentualnie ograniczyć kod do (kompilującego się) minimum, które pokazuje problem i przedstawić na forum. Błąd może być w kodzie, którego nie pokazałeś. To, co przedstawiłeś powinno działać, a przynajmniej ja nie potrafię dopatrzyć się tam błędu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 22 sty 2019, o 12:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Slawek]]></name></author>
<updated>2019-01-22T10:59:29+01:00</updated>
<published>2019-01-22T10:59:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216010#p216010</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216010#p216010"/>
<title type="html"><![CDATA[Re: UART i TimeOut]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216010#p216010"><![CDATA[
To już sprawdziłem, liczy do zera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=69">Slawek</a> — 22 sty 2019, o 10:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kazekat]]></name></author>
<updated>2019-01-22T10:06:03+01:00</updated>
<published>2019-01-22T10:06:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216009#p216009</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216009#p216009"/>
<title type="html"><![CDATA[Re: UART i TimeOut]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216009#p216009"><![CDATA[
Wstaw debugger jednodiodowy lub po prostu wyświetl tą zmienną Timer prog na wyświetlaczu i zobaczysz czy Ci się inkrementuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17021">kazekat</a> — 22 sty 2019, o 10:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Slawek]]></name></author>
<updated>2019-01-22T06:42:59+01:00</updated>
<published>2019-01-22T06:42:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216008#p216008</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216008#p216008"/>
<title type="html"><![CDATA[UART i TimeOut]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21899&amp;p=216008#p216008"><![CDATA[
Cześć, mam kłopot z którym nie mogę sobie poradzić.<br />Próbowałem zrobić Timeout do obsługi odbieranych danych z UARTa.<br />Ustawiłem Timer0 na przepełnienie i przerwanie co około 1ms (nie jest ważna super precyzja). <br />Program wygląda tak<br />[syntax=c]volatile uint8_t TimerProg;<br />//F_cpu=8MHz<br />//Timer 0 8 bit init<br />TIMSK |= 1&lt;&lt;TOIE0; //zezwolenie na przewanie Timer 0<br />TCCR0 = 1&lt;&lt;CS02 | 1&lt;&lt;CS00; // prescaler 1024<br />TCNT0=256-8;<br />        sei();<br /><br />// w gółwnej pętli<br />         TimerProg=30;  //Timeout na zapas 30 ms <br />Dana=UART_receive(); //odebranie<br /><br /><br />//**********************<br /><br />uint8_t UART_receive(void){<br /> <br /> //Wait for data to be received<br /> <br />while(!(UCSRA &amp; (1&lt;&lt;RXC)))if(!TimerProg)break;<br /><br />return UDR;<br />}<br />//////////////<br /><br />ISR(TIMER0_OVF_vect)   <br />{<br />if(TimerProg)TimerProg--;<br />TCNT0=256-8;<br />}[/syntax]<br /><br />Niestety cały czas wisi na odbieraniu w funkcji UART_receive, po prostu nie wychodzi z niej jak TimerProg będzie 0!<br /><br />Możecie podpowiedzieć co jest nie tak, na razie nic mi nie przychodzi do głowy co jest nie tak<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=69">Slawek</a> — 22 sty 2019, o 06:42</p><hr />
]]></content>
</entry>
</feed>