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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-08-15T22:48:41+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19005&amp;mode</id>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2017-08-15T22:48:41+01:00</updated>
<published>2017-08-15T22:48:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19005&amp;p=193454#p193454</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19005&amp;p=193454#p193454"/>
<title type="html"><![CDATA[Re: Nie działa przerwanie RXC od UARTa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19005&amp;p=193454#p193454"><![CDATA[
Spójrz na inicjalizację. Najpierw masz: UCSRB<strong><span style="text-decoration: underline">|=</span></strong> (1&lt;&lt;RXCIE); a potem: UCSRB<strong><span style="text-decoration: underline"> =</span></strong> (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 15 sie 2017, o 22:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zb111112]]></name></author>
<updated>2017-08-15T22:08:14+01:00</updated>
<published>2017-08-15T22:08:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19005&amp;p=193453#p193453</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19005&amp;p=193453#p193453"/>
<title type="html"><![CDATA[Nie działa przerwanie RXC od UARTa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19005&amp;p=193453#p193453"><![CDATA[
Witam mam problem. Chciałem uruchomić transmisję RS232 z pomocą przerwania odbioru RXC, aby odbiór odbywał się w tle. Niestety to przerwanie w ogóle się nie wykonuje i nie wiem dlaczego. Wcześniej zrobiłem komunikację między PC a Atmegą8 w trybie pollingu i było wszystko okej. Czyli terminal w PC jest dobrze ustawiony, i cały układ jest dobrze podłączony. Użyłem przejściówki RS232-USB na układzie PL-2303HX. Poniżej zamieszczam kod, <br /><br />jest to plik uart.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define RX_BUF_SIZE 32   //rozmiar bufora<br />#define RX_BUF_MASK (RX_BUF_SIZE - 1)<br /><br />volatile char UART_RxBuf&#91;RX_BUF_SIZE&#93;;   //definicja bufora<br />volatile uint8_t RxHead;<br />volatile uint8_t RxTail;<br />volatile uint8_t glob11;<br /><br />char uart_take(void)         //funkcja odbierająca jeden bajt z bufora cyklicznego<br />{<br />if(RxTail == RxHead) return 0;       //jesli nie ma niczego w buforze to zwroc 0<br />RxTail = (RxTail + 1) &amp; RX_BUF_MASK;<br />return UART_RxBuf&#91;RxTail&#93;;             //jesli cos jest to zwroc ta wartosc<br />}<br /><br />void USART_Init( unsigned int ubrr)   //inicjalizacja uarta<br />{<br />sei();         <br />UCSRB|= (1&lt;&lt;RXCIE);<br /><br />/* Set baud rate */<br />UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;        //predkosc 9600<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 1stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ0);<br />}<br /><br />ISR(USART_RXC_vect)             //przerwanie<br />{<br />uint8_t tmp_head;<br />char data_u;<br /><br />data_u = UDR;<br />tmp_head = (RxHead + 1) &amp; RX_BUF_MASK;<br />if(tmp_head == RxTail) {}<br />else<br />{<br />RxHead = tmp_head;<br />UART_RxBuf&#91;tmp_head&#93; = data_u;<br />}<br />glob11++;<br />}[/syntax]<br /><br />dodatkowo mam jeszcze plik main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd.h&quot;<br />#include &quot;UART/uart.h&quot;<br /><br /><br />int main(void)<br />{<br />USART_Init(MYUBRR);<br />LcdInit();<br /><br />while(1)<br />{<br />_delay_ms(500);<br />CLR();<br />LcdInt(RxHead); LCD(&quot; &quot;);<br />LcdInt(RxTail); LCD(&quot; &quot;);<br />LcdInt(glob11); LCD(&quot; &quot;);<br />LcdBin(UCSRA);<br /><br />}<br />}[/syntax]<br /><br />Powyżczy program powinien wyświetlać: początkowy numer bufora, końcowy numer bufora, ilość wykonanych przerwań, oraz rejestr UCSRA. I wygląda to następująco. Jak wgram program do Atmegi wyświetla mi się takie coś:<br /><a href="https://obrazkiforum.atnel.pl/15085/3e2654cc06445530e780161824a64874.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/15085/3e2654cc06445530e780161824a64874.jpg" alt="Obrazek" /></a><br /><br />a kiedy wyślę jakiś znak z terminala do atmegi to mam takie coś:<br /><a href="https://obrazkiforum.atnel.pl/15085/611db5d63e232fb23d21b5d7622a7c3c.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/15085/611db5d63e232fb23d21b5d7622a7c3c.jpg" alt="Obrazek" /></a><br />i ten rejestr już się nie zmienia, wskazuje to że są jakieś pliki do odebrania ale procesor nie umi sobie z tym poradzić.<br />Bardzo bym prosił o pomoc XD<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15085">zb111112</a> — 15 sie 2017, o 22:08</p><hr />
]]></content>
</entry>
</feed>