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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-01-10T07:52:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19950&amp;mode</id>
<entry>
<author><name><![CDATA[jony15]]></name></author>
<updated>2018-01-10T07:52:27+01:00</updated>
<published>2018-01-10T07:52:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201775#p201775</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201775#p201775"/>
<title type="html"><![CDATA[Re: Problem z wysyłaniem informacji przez USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201775#p201775"><![CDATA[
Nie rozumiem tego warunku w przerwaniu od RX   &quot;while ( !(UCSRA &amp; (1&lt;&lt;RXC)) ) ;&quot; Skoro już program wskoczył do przerwania to dana została odebrana przez usart i czeka w UDR. Konfiguracje usart-a masz ok. Spróbuj sprawdzić komunikację na &quot;sucho&quot; np z komputerem pc ( terminal ); albo jak Kolega wyżej pisał brakujące &quot;sei()&quot; albo coś z prędkościami pokręciłeś.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2183">jony15</a> — 10 sty 2018, o 07:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2018-01-10T06:33:55+01:00</updated>
<published>2018-01-10T06:33:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201774#p201774</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201774#p201774"/>
<title type="html"><![CDATA[Re: Problem z wysyłaniem informacji przez USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201774#p201774"><![CDATA[
Czy włączyłeś globalne przerwania?<br />[syntax=c]i#include &lt;avr/io.h&gt;<br />int main( void ) {<br />  sei();<br />    while(1) {<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 10 sty 2018, o 06:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[taon93]]></name></author>
<updated>2018-01-09T21:22:52+01:00</updated>
<published>2018-01-09T21:22:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201758#p201758</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201758#p201758"/>
<title type="html"><![CDATA[Problem z wysyłaniem informacji przez USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19950&amp;p=201758#p201758"><![CDATA[
Dzień dobry, to mój pierwszy wpis na forum więc jeżeli mogę to proszę o wyrozumiałość. <br />Piszę w sprawie dość nietypowego jak dla mnie błędu, który występuje w moim kodzie: podczas komunikacji między dwoma procesorami (z AtMega324p na AtMega16a) kiedy chcę wysłać wartość funkcja usart_send nie zawsze zostaje wykonana (chociaż powinna). Przy otrzymaniu kodu powinna się zmienić wartość na wyświetlaczu led i zostaje jednocześnie zmieniony znak na diodzie(dioda została dołączona by wykluczyć możliwość, że kod zostaje wysłany a to LCD nie reaguje), kod z mikrokontrolera zostaje wysłany przy naciśnięciu przycisku (na pewno przycisk działa dobrze i uwzględniłem drganie styków, oprócz wysłania kodu przez usart gasi również wszystkie diody (co powinien robić) więc można założyć że problem nie leży po stronie przycisku). Kod który jest wysyłany przez usart jest zawsze tego samego typu w zasadzie testowałem na dwóch wartościach. <br />Poniżej wstawiam kod inicjalizacji USART:<br />[syntax=c]void usart_init(unsigned int ubbr)<br />{<br />UBRRH = (unsigned char) (ubbr &gt;&gt; 8);<br />UBRRL = (unsigned char) ubbr;<br />UCSRB = ((1&lt;&lt;RXEN) | (1&lt;&lt;TXEN) | (1&lt;&lt;RXCIE));<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);//8 bits 2 stop bits<br />}[/syntax]  <br />przerwanie które odczytuje wartość wysłaną: value jest typu volatile uint8_t i jest zmienną globlaną<br />[syntax=c]ISR(USART_RXC_vect )<br />{<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) ) ;<br />value = UDR;<br />}[/syntax]<br /> Kod wysłania wartości przez USART - mój faworyt jeżeli chodzi o możliwych sprawców zamieszania<br />[syntax=c]void usart_send(uint8_t data)<br />{<br />while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) ) ;<br />UDR = data;<br />}[/syntax]<br />fragment funkcji main w którym wysyłam kod (coin typu uint8_t<br />[syntax=c]if(button == 1)<br />{<br />if(coin) <br />{<br />led_set(0,3); // GASZENIE LEDÓW<br />coin |= CVALUE;<br />usart_send(coin);<br />coinsnumber&#91;coin - 1&#93;++;<br />coin = 0;<br />}<br />button = 0<br />}[/syntax]<br />funkcja w której dostaję informacje z USART (czasami się wykonuje przy naciśnięciu przycisku a czasami nie)<br />[syntax=c]void wal_event(int *inserted, int coinval&#91;&#93;, int coinsleft&#91;&#93;, int topay)<br />{<br />int a = 0;<br />if(value == ERROR)<br />{<br />LCD_Clear();<br />LCD_WriteText(&quot;ERROR&quot;);<br />flag |= FERROR;<br />return;<br />}<br />while(!a)<br />{<br />if((value &amp; CVALUE) &amp;&amp; ((value &amp; (~CVALUE)) &lt;= 0b110) &amp;&amp; (value &amp; (~CVALUE)))<br />{<br />LCD_Clear();<br />numberdisp((int)(value &amp; (~CVALUE)));<br />a++;<br />PORTB ^= 1&lt;&lt;4;<br />}<br />else<br />{<br />a=0;<br />}<br />}<br />}[/syntax] Zmienne są w zasadzie nie używane ponieważ przerobiłem tą funkcję na potrzeby testów.<br />Bardzo proszę o jakiekolwiek podpowiedzi co może być nie tak<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Odbieranie jest w funkcji while bo nie byłem pewien czy w czasie wysłania kod nie ulega zniekształceniu- jeżeli by uległ wtedy kod został by zawieszony w nieskończonej pętli, to okazało się nie być problemem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18763">taon93</a> — 9 sty 2018, o 21:22</p><hr />
]]></content>
</entry>
</feed>