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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-02-24T21:57:45+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2408&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-24T21:57:45+01:00</updated>
<published>2013-02-24T21:57:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=29176#p29176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=29176#p29176"/>
<title type="html"><![CDATA[Re: Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=29176#p29176"><![CDATA[
Kod jest dobry, więc sprawdź MCU Clock Frequency w ustawieniach projektu.<br />- volatile nie jest potrzebne. Ten przedrostek używa się dla zmiennych, które zmieniają się w przerwaniu, a używane są również w gdzie indziej. Chodzi o to, że procesor jak sprawdza jakąś zmienną np. porównując ją z liczbą to wczytuje ją z pamięci do rejestrów. To można zobaczyć podglądając kod w asemblerze i jak w przerwaniu ta zmienna się zmieni to w innym miejscu nie zostanie to zauważone, bo zmienna została wczytana do rejestru i kompilator uznał, że niech tam sobie ciągle siedzi, bo nie potrzeba jej co chwilę odczytywać. Zatem w rejestrze jest inna wartość a w pamięci inna co jest niedobre. Jak użyjesz volatile to kompilator nie decyduje że może sobie zmienną raz wczytać do rejestru tylko tak tworzy kod, że jest ona wczytywana za każdym razem.<br />- możesz tworzyć takie stringi &quot;jakiś wyraz\r&quot; lub &quot;jakiś wyraz\r\n&quot; nie potrzeba tego rozbijać jak ty to robisz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 lut 2013, o 21:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miccaldo]]></name></author>
<updated>2013-02-22T16:47:23+01:00</updated>
<published>2013-02-22T16:47:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28948#p28948</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28948#p28948"/>
<title type="html"><![CDATA[Re: Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28948#p28948"><![CDATA[
Dzięki za pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Nie traktuj tego jako docinki - po prostu spróbuj mniejszymi kroczkami - będzie łatwiej bo podpowiem że wysyłanie to jeszcze nic - ale przy takim podejściu zanim zrobisz prawidłowy odbiór stringów na przerwaniach .....<br /></div><br /><br />Kiedy staram się opanować jakiś temat, robię to właśnie krok po kroku, a kiedy coś wyjdzie jest satysfakcja, wtedy robie krok do przodu, czyniąc postęp.<br /><br />Wracając do tematu, wysyłam stringi, ale udaje mi się to tylko w pętli nieskończonej, kiedy próbuję wysłać znak w funkcji main, na terminalu nic się nie pojawia, jaki może być tego powód? <br /><br />Funkcja wysyłająca wysyła jeden znak, resztę wysyła przerwanie, wzoruje się na pewnej stronie. Dodałem w związku z tym volatile <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />[syntax=c]/*<br /> * UART.c<br /> *<br /> *  Created on: 20-02-2013<br /> *      Author: Miccaldo<br /> */<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 />volatile char wyraz[12] = &quot;jakis wyraz&quot;;<br />char CR = '\r';<br /><br />void USART_init()<br />{<br />        #define UART_BAUD 9600<br />        #define BAUD_PRESCALE ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1)<br /><br />        UBRRH = (BAUD_PRESCALE &gt;&gt; 8);<br />        UBRRL = BAUD_PRESCALE;<br /><br />        UCSRC = (1&lt;&lt;URSEL) | (1&lt;&lt;UCSZ1) | (1&lt;&lt;UCSZ0);<br />        UCSRB = (1&lt;&lt;TXEN) | (1&lt;&lt;RXEN) | (1&lt;&lt;TXCIE);<br />}<br /><br />void wyslij(void)<br />{<br />while (!(UCSRA &amp; _BV(UDRE))); // zaczekaj az bufor nadawania bedzie pusty<br />UDR = wyraz[0];<br />}<br /><br />ISR(USART_TXC_vect)<br />{<br />static unsigned char znak=1;<br /><br />if(wyraz[znak]!='\0')<br />{<br />UDR = wyraz[znak];<br />znak++;<br /><br />if(znak == 11)<br />{<br />UDR = CR;<br />}<br />}<br />else<br />{<br />znak=1;<br />}<br />}<br /><br />int main(void)<br />{<br />USART_init();<br />sei();<br /><br />while(1)<br />{<br />wyslij();<br />_delay_ms(1000);<br />}<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=974">miccaldo</a> — 22 lut 2013, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-21T18:03:28+01:00</updated>
<published>2013-02-21T18:03:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28886#p28886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28886#p28886"/>
<title type="html"><![CDATA[Re: Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28886#p28886"><![CDATA[
2. To prawda, ale nie potrzebujesz nic robić z TXD i RXD, bo zaraz masz USART_init, a tam aktywujesz te linie, a to oznacza, że USART przejmuje nad nimi kontrolę i to co jest w DDRD i PORTD dla tych linii jest nieistotne.<br />4. Stringi są zakończone '\0' i to sprawdzaj.<br />Odnośnie programu:<br />- volatile niepotrzebne<br />- while(warunek); kończy pętle i nie wiem po co tam masz klamry {}. Chyba dla zmylenia przeciwnika  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />- w warunku z kolei by się przydały, bo zmienna znak się przekręci i wyślesz jeszcze raz wyraz<br />Wprowadź poprawki i powinno działać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 21 lut 2013, o 18:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mg101]]></name></author>
<updated>2013-02-21T18:04:46+01:00</updated>
<published>2013-02-21T17:57:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28885#p28885</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28885#p28885"/>
<title type="html"><![CDATA[Re: Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28885#p28885"><![CDATA[
Po pierwsze musisz mieć książkę Mirka.<br />Najważniejsze żeby dobrze zrozumieć RS2332. Dla mnie UART też był trudny. Efektem tego były te potworki na forum. <br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic1944.html" >topic1944.html</a><!-- l --><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2294.html" >topic2294.html</a><!-- l --><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2189.html" >topic2189.html</a><!-- l --><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic1920.html" >topic1920.html</a><!-- l --><br />Podobne rzeczy piszę o następnym temacie I2C<br />Radzę przejrzeć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=683">mg101</a> — 21 lut 2013, o 17:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miccaldo]]></name></author>
<updated>2013-02-21T17:19:43+01:00</updated>
<published>2013-02-21T17:19:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28882#p28882</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28882#p28882"/>
<title type="html"><![CDATA[Re: Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28882#p28882"><![CDATA[
Braki mam bo z internetu się uczę, kupię książkę to pewnie uzupełnię wiedzę.<br /><br />1. No tak to nie jest potrzebne, wcześniej próbowałem z przerwaniami i zostało poprostu.<br />2. Czytałem, że jeśli ustawi się sam PORTx, to pin podłączony jest jako wejście przez wewnętrzny rezystor do VCC, czyli pull up, no ale nie wiem może źle czytałem.<br />3. Wcześniej próbowałem na przerwaniach odbierać znak i wysyłać znaki, nie sądziłem że jak są włączone to robią taką sieczkę z procesorem.<br />4. Czytałem, że funkcja wczytuje znaki, aż do wystąpienia  '\n'.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=974">miccaldo</a> — 21 lut 2013, o 17:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-02-21T16:47:27+01:00</updated>
<published>2013-02-21T16:47:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28873#p28873</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28873#p28873"/>
<title type="html"><![CDATA[Re: Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28873#p28873"><![CDATA[
Posłuchaj - popełniasz tak ogromną ilość błędów i to jeśli chodzi o totalne PODSTAWY że na prawdę - hmmm zacznij może od książki. Bo tak na szybko kilka pytań do ciebie:<br /><br />1. po co ci volatile tutaj ??? wiesz do czego to jest ? (raczej na pewno nie wiesz) <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />2. co to jest ? <br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTD = TXD;        //pullup na TXC </div><br /><br />???? nie dość że to nie żaden pullup , nie dość że nie działa w ogóle tak jak chcesz ? to jeszcze w ogóle zastanowiłeś się jak działa UART ? i czy potrzebny jest pullup ? ... <br /><br />3. odpalasz przerwania których nie ma - więc masz fantomowe przerwania i procek bryka wciąż na resecie <br /><br />4. co to jest ???<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">if(wyraz&#91;znak&#93; != '\n')</div><br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> spróbuj chociaż w dwóch zdaniach wyjaśnić co tu robisz <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> ???<br /><br />-------------------<br /><br />nie dziw się więc że to ci nie działa - to NIE MOŻE działać .... po prostu skoczyłeś na zbyt głęboką wodę - nie znając kompletnie podstaw C ani obsługi UART'a .... program jest całkowicie źle napisany - nie to że tam coś jest źle - wszystko jest źle <br /><br />tzn no może poza jednym tym razem - samą inicjalizacją UBRR<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />więc widzisz pomóc można - ale tu trzeba byłoby zacząć w ogóle od podstaw wszystko tłumaczyć ... a nie zwrócić uwagę na jakiś tam drobny błąd. <br /><br />Nie traktuj tego jako docinki - po prostu spróbuj mniejszymi kroczkami - będzie łatwiej bo podpowiem że wysyłanie to jeszcze nic - ale przy takim podejściu zanim zrobisz prawidłowy odbiór stringów na przerwaniach .....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lut 2013, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miccaldo]]></name></author>
<updated>2013-02-21T15:57:36+01:00</updated>
<published>2013-02-21T15:57:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28867#p28867</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28867#p28867"/>
<title type="html"><![CDATA[Przesyłanie stringu przez UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2408&amp;p=28867#p28867"><![CDATA[
Witam, chciał bym na początek przesłać do termianala cały wyraz w postaci łańcuchu znaków string, następnie nauczyć się odebrać go z komputera, a następnie na bierząco odczytywać zmieniającą się w czasie wartość zmiennej.<br /><br />Zbieram informacje z całego internetu o przesyłaniu, odbieraniu stringów, w miarę to rozumiem ale bez pomocy nie dam rady niestety <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br /><br />To na początek tylko wysłać wyraz, w pętli, funkcje wysyłającą sobie później stworzę. Mam tyle kodu:<br /><br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define TXD (1&lt;&lt;PD1)<br /><br />volatile char wyraz[6] = &quot;wyraz&quot;;<br /><br />void USART_init()<br />{<br />        #define UART_BAUD 9600<br />        #define BAUD_PRESCALE ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1)<br /><br />        UBRRH = (BAUD_PRESCALE &gt;&gt; 8);<br />        UBRRL = BAUD_PRESCALE;<br /><br />        UCSRC = (1&lt;&lt;URSEL) | (1&lt;&lt;UCSZ1) | (1&lt;&lt;UCSZ0);<br />        UCSRB = (1&lt;&lt;TXEN) | (1&lt;&lt;TXCIE) | (1&lt;&lt;RXEN) | (1&lt;&lt;RXCIE);<br />}<br /><br />int main(void)<br />{<br /><br />PORTD = TXD;        //pullup na TXC<br />USART_init();<br />sei();<br /><br />while(1)<br />{<br />static unsigned char znak = 0;<br /><br />while (!(UCSRA &amp; _BV(UDRE))); // zaczekaj az bufor nadawania bedzie pusty<br />{<br />if(wyraz[znak] != '\n') <br />UDR = wyraz[znak];<br />znak++;<br />}<br /><br />}<br />}<br />[/syntax]<br /><br />Przed wyrazem występuje mnóstwo krzaków, <br /><br />&lt;0&gt;&lt;0&gt;ÇťgöŻ×˙}Ů÷ýŮćîż·~¶?ÜďňďŹ—33żźV?^ťź}—¶®ßó_ü^ůnĽű5ßCd{ÂŻ7|uřůźľ»˙ýşîűí_ďŻ:7OýăyçĎçöŢßďź#Óż˙–KŻ·ý?×Ůšď˝ţďÓ˙sÇżűÖV˙ŻűÝŢŻ\çČí÷î[ż‡˝Ĺß«˙ťý:ż˙Ţ÷Köľäű˙ţgÜşűŇă˙Ď+WmOqjľkľ¸s§ßlÝßO»ýŰoo˙zŻfzsź˙_Ţý»ëkż–×–ővuz·˝ůďađő)ţ]?wŻóîU~ţßŢ:ô˙Ý¶)ß˙É?Ö[§ďd˙<strong>wyraz</strong>&lt;0&gt;&lt;0&gt;&lt;0&gt;&lt;0&gt;ÇťgöŻ×<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=974">miccaldo</a> — 21 lut 2013, o 15:57</p><hr />
]]></content>
</entry>
</feed>