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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-09-02T08:25:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8371&amp;mode</id>
<entry>
<author><name><![CDATA[JanuszT]]></name></author>
<updated>2014-09-02T08:25:01+01:00</updated>
<published>2014-09-02T08:25:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93943#p93943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93943#p93943"/>
<title type="html"><![CDATA[Re: Komunikacja z PC - ATmega16, UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93943#p93943"><![CDATA[
Witam<br /><br />Ad.2 Tak &quot;dla spokojności&quot; może spróbuj.<br />Ad.4 Spróbuj, czy na nich będzie ten sam efekt. Wypróbuj też na nich inne terminale (na przykład Bray, Real i Putty)<br />Ad.6 Do PC podłączasz przejściówkę i zwierasz jej wejście z wyjściem (RX łączysz z TX). Teraz to, co nadajesz przez terminal wraca do Ciebie i powinno się wyświetlać jako odebrane.<br />Ad.7 Jeżeli to nie problem, to spróbuj.<br /><br />Ja na Win8.1 (64 bit) używam Bray Terminal w wersji v1.19b 20140110b i  jak dotychczas nie występują &quot;dziwne zachowania&quot;.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4367">JanuszT</a> — 2 wrz 2014, o 08:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nemesis]]></name></author>
<updated>2014-09-01T22:42:29+01:00</updated>
<published>2014-09-01T22:42:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93927#p93927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93927#p93927"/>
<title type="html"><![CDATA[Re: Komunikacja z PC - ATmega16, UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93927#p93927"><![CDATA[
1. Niestety, nie mam.<br />2. Nie sprawdzałem, ale nie miałem nigdy błędów w postaci źle odebranego znaku, jedynie pojawiają się entery w dziwnych miejscach przy braku opóźnienia.<br />3. Nie mam.<br />4. Mam kilka innych komputerów.<br />5. Tak, sprawdzałem i w projekcie oraz w układzie mam 11,0592MHz (ustawiane przez MkAvrCalculator). Testowałem również dla wewnętrznych 8MHz.<br />6. Echa nie próbowałem robić - jak dokładnie się za to zabrać? Widzę w terminalu też jakiś Echo Port.<br />7. Mógłbym podłączyć na płytce stykowej ATmega8.<br />8. Nie, tylko jedną.<br /><br />Zmodyfikowałem swój kod i dodałem zwykłą funkcję wysyłająca stringi w nieskończoność, wyłączyłem także opóźnienie i nie ma żadnych błędnych znaków, a także nadmiarowych enterów, więc wydaje mi się, że sam układ działa poprawnie, a problem tkwi gdzieś w kodzie, tylko nie mogę go znaleźć. Próbowałem analizować jakoś zachowanie się programu i nie mam pojęcia dlaczego tak się dzieje. Poniżej zamieszczam kod z wysyłaniem samych stringów.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 31-08-2014<br /> *      Author: user<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define RX_BUFFOR_SIZE 32<br />#define RX_BUFFOR_MASK (RX_BUFFOR_SIZE - 1)<br /><br />volatile char RX_BUFFOR &#91;RX_BUFFOR_SIZE&#93;;// bufor odbiorczy<br />volatile uint8_t RX_Head;// zmienna zapisania do bufora<br />volatile uint8_t RX_Tail;// zmienna odczytu z bufora<br />int block = 1;<br /><br />void UART_Init (uint32_t baud);// funkcja inicjalizująca UART<br />void UART_Transmit_String (char databuf&#91;&#93;);// funkcja do transmisji stringów<br />void UART_Transmit_Char (char data);// funkcja do transmisji znaków<br />char UART_getc (void);// funkcja do odczytu danych z bufora odbiorczego<br /><br />ISR (USART_RXC_vect)// przerwanie zapisujące dane w buforze odbioczym<br />{<br />uint8_t Temp_Head;<br />char data;<br />data = UDR;<br />Temp_Head = (RX_Head + 1) &amp; RX_BUFFOR_MASK;<br />if (Temp_Head == RX_Tail)<br />{<br />// błąd, zapchanie bufora, do zrobienia<br />}<br />else<br />{<br />RX_Head = Temp_Head;<br />RX_BUFFOR &#91;Temp_Head&#93; = data;<br />}<br />}<br /><br />int main (void)<br />{<br />UART_Init (9600);<br />UCSRA |= (1 &lt;&lt; RXC);// odblokowanie przerwania odbiorczego<br />UCSRB |= (1 &lt;&lt; RXCIE);<br /><br />sei();<br /><br />while (1)<br />{<br />UART_Transmit_String (&quot;Zielone ogorki i marchewki czerwone&quot;);<br />UART_Transmit_Char (0x0d);<br />UART_Transmit_Char (0x0a);<br />UART_Transmit_String (&quot;Kapusta kiszona i miesko zmielone&quot;);<br />UART_Transmit_Char (0x0d);<br />UART_Transmit_Char (0x0a);<br />}<br />}<br /><br />void UART_Init (uint32_t baud)<br />{<br />uint16_t _UBRR = ((F_CPU+baud*8UL) / (16UL*baud) - 1);// ustawienie prędkości transmisji<br />UBRRH = (uint8_t) (_UBRR&gt;&gt;8);<br />UBRRL = (uint8_t) _UBRR;<br />UCSRB = (1&lt;&lt;RXEN) | (1&lt;&lt;TXEN);// włączenie nadajnika i odbiornika<br />UCSRC = (1&lt;&lt;URSEL) | (3&lt;&lt;UCSZ0);// ramka: 8 bitów danych, 1 bit stop, n<br />}<br /><br />void UART_Transmit_Char (char data)<br />{<br />while (!(UCSRA &amp; (1&lt;&lt;UDRE)));// oczekiwanie na oczyszczenie bufora nadawczego<br />//_delay_ms(150);<br />UDR = data;// start transmisji<br />}<br /><br />void UART_Transmit_String (char databuf&#91;&#93;)<br />{<br />int i = 0;<br />while (databuf&#91;i&#93; != 0x00)// transmisja kolejnych danych z tablicy<br />{<br />UART_Transmit_Char (databuf&#91;i&#93;);<br />i++;<br />}<br />}<br /><br />char UART_getc (void)<br />{<br />RX_Tail = (RX_Tail + 1) &amp; RX_BUFFOR_MASK;<br />return RX_BUFFOR &#91;RX_Tail&#93;;<br />}[/syntax]<br /><br />W Realterm wszystko na pełnej szybkości bez opóźnień i błędów brak.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1968/63eb932c75892043a85d83bc526b877e.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/63eb932c75892043a85d83bc526b877e.jpg" alt="Obrazek" /></a><br /><br />W Bray Terminal znowu jakieś dziwne rzeczy, ale jeżeli na jednym terminalu działa dobrze, to chyba nie błędy wysyłania?<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1968/d3aa516963847534f1fd5958614ea266.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/d3aa516963847534f1fd5958614ea266.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1968">Nemesis</a> — 1 wrz 2014, o 22:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JanuszT]]></name></author>
<updated>2014-09-01T17:54:38+01:00</updated>
<published>2014-09-01T17:54:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93853#p93853</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93853#p93853"/>
<title type="html"><![CDATA[Re: Komunikacja z PC - ATmega16, UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93853#p93853"><![CDATA[
Witam<br /><br />1.Masz dostęp do oscyloskopu, analizatora, miernika częstotliwości?<br />2.Testowałeś program z BB który &quot;przemiata wartości wpisywane do rejestru UBBR&quot;?<br />3.Masz dostęp do innej przejściówki UART/PC?<br />4.Masz dostęp do PC z innym systemem operacyjnym?<br />5.Czy jesteś pewien, że masz zgodne ustawienie taktowania w projekcie i w układzie?<br />6.Czy próbowałeś na tej przejściówce &quot;zewrzeć wyjście z wejściem - zrobić sprzętowe echo&quot;?<br />7.Czy możesz wypróbować tą przejściówkę na innym urządzeniu (ten sam PC, ale inne urządzenie z UART)?<br />8.Czy masz dwie sztuki takich przejściówek?<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4367">JanuszT</a> — 1 wrz 2014, o 17:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nemesis]]></name></author>
<updated>2014-09-01T16:55:42+01:00</updated>
<published>2014-09-01T16:55:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93850#p93850</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93850#p93850"/>
<title type="html"><![CDATA[Re: Komunikacja z PC - ATmega16, UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93850#p93850"><![CDATA[
Szukałem, analizowałem i bez skutku - dlatego napisałem ten temat. Gdyby w ogóle mi nie działało, to jeszcze pół biedy, ale nie mogę zrozumieć, dlaczego działa mi na jednym terminalu, gdy dodam opóźnienie w funkcji wysyłania znaków.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1968">Nemesis</a> — 1 wrz 2014, o 16:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JanuszT]]></name></author>
<updated>2014-09-01T16:22:49+01:00</updated>
<published>2014-09-01T16:22:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93848#p93848</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93848#p93848"/>
<title type="html"><![CDATA[Re: Komunikacja z PC - ATmega16, UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93848#p93848"><![CDATA[
Witam<br /><br />Odnośnie<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Chodzi mi głównie o to czy problem tkwi w kodzie, czy terminal nie radzi sobie z tak szybkim wyświetlaniem znaków bez opóźnienia.<br /></div><br />To, jeżeli terminal otrzymuje dane z 9600,8N1, to bez problemu je wyświetla. Myślę, że powinieneś poszukać w kodzie, w ustawieniach prędkości i ewentualnie w przejściówce.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4367">JanuszT</a> — 1 wrz 2014, o 16:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nemesis]]></name></author>
<updated>2014-09-01T17:24:14+01:00</updated>
<published>2014-09-01T14:08:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93836#p93836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93836#p93836"/>
<title type="html"><![CDATA[Komunikacja z PC - ATmega16, UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8371&amp;p=93836#p93836"><![CDATA[
Witam!<br /><br />Jakiś czas temu rozpocząłem swoje pierwsze próby komunikacji AVR z PC. Wykonałem płytkę w oparciu o układ FT232RL - udało mi się ją uruchomić, zainstalować sterowniki, proste funkcje z BB również działały bez problemu. Teraz zająłem się buforem cyklicznym do obsługi odbioru danych i niestety pojawiły się problemy. Nie mam pojęcia czy robię jakiś błąd w kodzie, czy po prostu używane przeze mnie gotowe terminale coś źle wyświetlają.<br /><br />Bray Terminal od początku sprawiał problemy i czasem wyświetlał dobrze odebrane stringi/znaki, ale w większości przypadków nie. Realterm natomiast sprawuje się dużo lepiej, jednak <span style="text-decoration: underline">przy braku opóźnienia w funkcji UART_Transmit_Char błędnie wyświetla stringi</span> i teraz nie wiem czy to wina terminala, czy mam jakiś błąd w kodzie. Wygląda to tak, jakby funkcja wysyłająca wykonała się bardzo szybko i od razy Tail zrównał się z Head (bufor pusty), ale jakim sposobem potem wraca i wysyła brakujące znaki? Prędkość 9600 i włączony zewnętrzny kwarc 11,0592MHz.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 31-08-2014<br /> *      Author: user<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define RX_BUFFOR_SIZE 32<br />#define RX_BUFFOR_MASK (RX_BUFFOR_SIZE - 1)<br /><br />volatile char RX_BUFFOR &#91;RX_BUFFOR_SIZE&#93;;// bufor odbiorczy<br />volatile uint8_t RX_Head;// zmienna zapisania do bufora<br />volatile uint8_t RX_Tail;// zmienna odczytu z bufora<br />int block = 1;<br /><br />void UART_Init (uint32_t baud);// funkcja inicjalizująca UART<br />void UART_Transmit_String (char databuf&#91;&#93;);// funkcja do transmisji stringów<br />void UART_Transmit_Char (char data);// funkcja do transmisji znaków<br />char UART_getc (void);// funkcja do odczytu danych z bufora odbiorczego<br /><br />ISR (USART_RXC_vect)// przerwanie zapisujące dane w buforze odbioczym<br />{<br />uint8_t Temp_Head;<br />char data;<br />data = UDR;<br />Temp_Head = (RX_Head + 1) &amp; RX_BUFFOR_MASK;<br />if (Temp_Head == RX_Tail)<br />{<br />// błąd, zapchanie bufora, do zrobienia<br />}<br />else<br />{<br />RX_Head = Temp_Head;<br />RX_BUFFOR &#91;Temp_Head&#93; = data;<br />}<br />}<br /><br />int main (void)<br />{<br />UART_Init (9600);<br />UCSRA |= (1 &lt;&lt; RXC);// odblokowanie przerwania odbiorczego<br />UCSRB |= (1 &lt;&lt; RXCIE);<br /><br />sei();<br /><br />while (1)<br />{<br />if ((RX_Head == RX_Tail) &amp;&amp; block)<br />{<br />UART_Transmit_String (&quot;Dane odebrane: &quot;);<br />block = 0;<br />}<br />while (RX_Head != RX_Tail)<br />{<br />UART_Transmit_Char (UART_getc());<br />if (RX_Head == RX_Tail)<br />{<br />UART_Transmit_Char (0x0d);<br />UART_Transmit_Char (0x0a);<br />block = 1;<br />}<br />}<br />}<br />}<br /><br />void UART_Init (uint32_t baud)<br />{<br />uint16_t _UBRR = ((F_CPU+baud*8UL) / (16UL*baud) - 1);// ustawienie prędkości transmisji<br />UBRRH = (uint8_t) (_UBRR&gt;&gt;8);<br />UBRRL = (uint8_t) _UBRR;<br />UCSRB = (1&lt;&lt;RXEN) | (1&lt;&lt;TXEN);// włączenie nadajnika i odbiornika<br />UCSRC = (1&lt;&lt;URSEL) | (3&lt;&lt;UCSZ0);// ramka: 8 bitów danych, 1 bit stop, n<br />}<br /><br />void UART_Transmit_Char (char data)<br />{<br />while (!(UCSRA &amp; (1&lt;&lt;UDRE)));// oczekiwanie na oczyszczenie bufora nadawczego<br />_delay_ms(150);<br />UDR = data;// start transmisji<br />}<br /><br />void UART_Transmit_String (char databuf&#91;&#93;)<br />{<br />int i = 0;<br />while (databuf&#91;i&#93; != 0x00)// transmisja kolejnych danych z tablicy<br />{<br />UART_Transmit_Char (databuf&#91;i&#93;);<br />i++;<br />}<br />}<br /><br />char UART_getc (void)<br />{<br />RX_Tail = (RX_Tail + 1) &amp; RX_BUFFOR_MASK;<br />return RX_BUFFOR &#91;RX_Tail&#93;;<br />}[/syntax]<br /><br />Chodzi mi głównie o to czy problem tkwi w kodzie, czy terminal nie radzi sobie z tak szybkim wyświetlaniem znaków bez opóźnienia. Zamieszczam jeszcze schematy mojej płytki do komunikacji oraz screeny z pracy terminali.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1968/430148d7fae39ea5520faec55dd2cfae.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/430148d7fae39ea5520faec55dd2cfae.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1968/b2989e40ba602e3ba3808038dec5c6e6.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/b2989e40ba602e3ba3808038dec5c6e6.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1968/e0fbd761474646b819601302e4171e9d.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/e0fbd761474646b819601302e4171e9d.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1968/6c0bc74ce924a727b7579ab8ed3e6290.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/6c0bc74ce924a727b7579ab8ed3e6290.png" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1968/c7354fbdb5656c9f865a7ce7c93e84ea.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/c7354fbdb5656c9f865a7ce7c93e84ea.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1968/861a90a4b913216e501869df46d67ef1.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/861a90a4b913216e501869df46d67ef1.png" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1968/d02bf6b028661ceb20ec4d8bc10d94e2.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1968/d02bf6b028661ceb20ec4d8bc10d94e2.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1968">Nemesis</a> — 1 wrz 2014, o 14:08</p><hr />
]]></content>
</entry>
</feed>