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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-02-10T16:47:08+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=14477&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-02-10T16:47:08+01:00</updated>
<published>2016-02-10T16:47:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153277#p153277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153277#p153277"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153277#p153277"><![CDATA[
widzisz zabytkowe Atmegi to:<br />Atmega8 , 16, 32, 128 .....<br /><br />zaś następcy nowocześniejsi na miarę czasów (o ile tak to można nazwać bo w sumie są , ale za wiele nie wnoszą) to:<br /><br />w przypadku atmegi8 :    atmega88,168,328 -- no atmega8A<br />w przypadku atmegi16:   atmega 164, 324, 644, 1284  ......<br /><br />jak widzisz sporo jest następców zgodnych pinowo i o lepszym wyposażeniu ... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 10 lut 2016, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-02-10T16:43:36+01:00</updated>
<published>2016-02-10T16:43:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153276#p153276</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153276#p153276"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153276#p153276"><![CDATA[
Myślałem,  że ten bit wystarczy ustawić raz i później można już swobodnie manipulować rejestrem UCSRC,  a okazało się,  że trzeba za każdym razem ten bit ustawiać.<br /><br />A jeszcze zapytam z ciekawości: nazwałeś atmege16 starym mikrokontrolerem. Jaki model atmegi jest nową  wersją  tego procesora?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 10 lut 2016, o 16:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-10T16:11:50+01:00</updated>
<published>2016-02-10T16:11:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153269#p153269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153269#p153269"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153269#p153269"><![CDATA[
No dokładnie o tym wcześniej mówiłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... bez ustawionego bitu twoje dane trafiają do UBRRH<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lut 2016, o 16:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-02-10T11:31:00+01:00</updated>
<published>2016-02-10T11:31:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153242#p153242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153242#p153242"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153242#p153242"><![CDATA[
Jeszcze jedna sprawa. Chciałem sobie napisać bibliotekę UART i napotkałem dziwny problem z fragmentem inicjalizującym UART.<br />Gdy napiszę ten fragment w sposób następujący:<br />[syntax=c]UCSRC = (1&lt;&lt;URSEL) | (1&lt;&lt;USBS) | (3&lt;&lt;UCSZ0);[/syntax] to program działa poprawnie.<br /><br />Gdy napisze ten fragment w tej postaci:<br />[syntax=c]UCSRC = (1&lt;&lt;URSEL);<br />UCSRC |= (1 &lt;&lt; USBS);<br />UCSRC |= (3 &lt;&lt; UCSZ0);[/syntax]<br />program nie działa poprawnie (nie zachodzi komunikacja, dioda się nie pali na drugim procku).<br /><br />Wydaje mi się, że oba przedstawione fragmenty kodu dają wynikowo to samo, a jednak okazuje się, że nie. Czy mógłbym prosić o wyjaśnienie, co jest nie tak?<br /><br />Wspomniany fragment to biblioteka dla atmegi16 (dla atmegi168 jest oddzielna biblioteka, bez bitu URSEL).<br /><br /><br /><span style="color: #FF0000"><br />//EDIT:</span><br />Błąd już się znalazł, okazuje się, że gdy chce się zapisać coś do UCSRC, trzeba ZA KAŻDYM RAZEM zapisywać bit URSEL.<br />Tak więc zamiast:<br />[syntax=c]UCSRC = (1&lt;&lt;URSEL);<br />UCSRC |= (1 &lt;&lt; USBS);<br />UCSRC |= (3 &lt;&lt; UCSZ0);[/syntax]<br /><br />trzeba wpisać:<br />[syntax=c]UCSRC = (1&lt;&lt;URSEL) | (1 &lt;&lt; USBS);<br />UCSRC |= (1&lt;&lt;URSEL) | (3 &lt;&lt; UCSZ0);[/syntax]<br /><br />i już wszystko jest w porządku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 10 lut 2016, o 11:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-02-10T09:36:58+01:00</updated>
<published>2016-02-10T09:36:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153232#p153232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153232#p153232"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153232#p153232"><![CDATA[
I teraz już wszystko rozumiem. Dziękuję bardzo za wyjaśnienie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 10 lut 2016, o 09:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-10T09:35:44+01:00</updated>
<published>2016-02-10T09:35:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153231#p153231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153231#p153231"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153231#p153231"><![CDATA[
W tych starszych prockach dwa rejestry (UBRRH i UCSRC) są współdzielone w pamięci i aby korzystać raz z jednego a raz z drugiego trzeba używać bitu URSEL <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />czyli, żeby zapis poleciał do UCSRC to trzeba właśnie ustawić ten najstarszy bit na JEDEN<br /><br />gdy zaś zapisujesz wartość do UBRRH to ten bit zawsze będzie ZEREM bo nie może być tak dużych wartości w UBRRH żeby był zapalony ten bit<br /><br />ot cała tajemnica<br /><br />(jak widzisz w nowszych już tego nie ma)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lut 2016, o 09:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-02-10T09:21:14+01:00</updated>
<published>2016-02-10T09:21:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153226#p153226</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153226#p153226"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153226#p153226"><![CDATA[
Oczywiście miał Pan rację. Wystarczyło zmienić jedną linijkę procesu inicjalizacji UART w atmedze16 i teraz już wszystko działa prawidłowo.<br /><br />Zamiast [syntax=c]UCSRC = (1 &lt;&lt; USBS) | (3 &lt;&lt; UCSZ0);[/syntax]<br />powinno być:<br />[syntax=c]UCSRC = (1&lt;&lt;URSEL) | (1&lt;&lt;USBS) | (3&lt;&lt;UCSZ0);[/syntax]<br /><br />Nie do końca jednak rozumiem z dokumentacji do czego w zasadzie służy ten URSEL.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 10 lut 2016, o 09:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-09T21:47:10+01:00</updated>
<published>2016-02-09T21:47:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153199#p153199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153199#p153199"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153199#p153199"><![CDATA[
Ja bym ci radził zajrzeć do noty PDF procków, szczególnie ATmegi16 .... podpowiedź - sprawdź jak się inicjalizuje prawidłowo tego typu stare procki jak m16. Chodzi wprost o sprawdzenie i porównanie sobie swojego kodu z kodem z noty.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 9 lut 2016, o 21:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-02-09T21:07:18+01:00</updated>
<published>2016-02-09T21:07:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153197#p153197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153197#p153197"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153197#p153197"><![CDATA[
kable skrosowałem, masy są połączone (to samo źródło zasilania).<br /><br />Nie mogę sprawdzić komunikacji w terminalu, bo nie mam układu FT232RL (ale już go zamówiłem).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 9 lut 2016, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-02-09T20:33:17+01:00</updated>
<published>2016-02-09T20:33:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153192#p153192</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153192#p153192"/>
<title type="html"><![CDATA[Re: UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153192#p153192"><![CDATA[
oczywiście  skrosowałeś kable ??<br /><br />RX - TX<br />TX - RX <br />GND - GND <br /><br />??<br /><br />podglądnij w terminalu czy atmega nr 1 coś wysyła , a atmega nr 2 na coś reaguje z terminala<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 9 lut 2016, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-02-09T20:01:51+01:00</updated>
<published>2016-02-09T20:01:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153189#p153189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153189#p153189"/>
<title type="html"><![CDATA[UART między atmega16 i atmega168 - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14477&amp;p=153189#p153189"><![CDATA[
Dobry wieczór,<br /><br />Postanowiłem zająć się komunikacją UART, którą chciałbym wykorzystać wkrótce w komunikacji Bluetooth. W oczekiwaniu aż przyjdzie do mnie sam moduł bluetooth, postanowiłem spróbować skomunikować ze sobą dwie atmegi - atmega16 oraz atmega168. Pierwsza z wymienionych to transmiter, a druga to odbiorca. Oba mikrokontrolery działają z częstotliwością 8MHz (wewnętrzny zegar). Komunikacja ustawiona jest na 9600 baud, 8 bitów danych, 2 bity stopu, brak bitu parzystości. <br /><br />Program ma działać tak, że każde wciśnięcie przycisku podłączonego do atmegi16 zmienia stan diody podłączonej do atmegi168. Oprócz tego druga dioda podłączona jest też do atmegi16 - działa ona tak samo jak ta w atmedze168, czyli zmienia stan przy każdym wciśnięciu przycisku.<br /><br />Oto programy:<br /><br />ATMEGA16:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />int main(void)<br /> {<br /><br />DDRB |= (1 &lt;&lt; PB2);   //wyjście, do którego podłączona jest dioda<br />PORTB |= (1 &lt;&lt; PB0);  //pull-up do przycisku<br /><br />//zmienne do debouncingu<br />int pressed_conf = 0;<br />int unpressed_conf = 0;<br /><br />//stan przycisku<br />int pressed = 0;<br /><br /> int UBRRValue = 51;  //9600 baud<br /> //zapisz UBBR<br /> UBRRH = (unsigned char) (UBRRValue &gt;&gt; 8);<br /> UBRRL = (unsigned char) UBRRValue;<br /> //aktywuj TX oraz RX<br /> UCSRB = (1 &lt;&lt; RXEN) | (1 &lt;&lt; TXEN);<br /> //2 bity stopu, 8 bitów w ramce<br /> UCSRC = (1 &lt;&lt; USBS) | (3 &lt;&lt; UCSZ0);<br /><br /> while (1)<br /> {<br /> if (((PINB &amp; 0b00000001) == 0) &amp;&amp; (pressed == 0))  //wcisnięty<br /> {<br /> pressed_conf++;<br /> unpressed_conf = 0;<br /><br /> //przycisk na pewno wciśnięty<br /> if (pressed_conf == 100)<br /> {<br /> pressed = 1;<br /> PORTB ^= (1 &lt;&lt; PB2);  //zmień stan diody<br /><br /><br /> while (! (UCSRA &amp; (1 &lt;&lt; UDRE)) );<br /><br /> //wysyłanie<br /> UDR = 0b11110000;<br /> }<br /><br /> }<br /><br />if ((PINB &amp; 0b00000001) == 1)  //wycisnięty<br />{<br />unpressed_conf++;<br />pressed_conf = 0;<br /><br />if (unpressed_conf == 100)<br />pressed = 0;<br />}<br />}<br />}[/syntax]<br /><br /><br /><br />ATMEGA168:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />int main(void)<br /> {<br /><br /> DDRC |= (1 &lt;&lt; PC5);<br /> int UBRR_Value = 51; //9600 baud<br /> UBRR0H = (unsigned char) (UBRR_Value &gt;&gt; 8);<br /> UBRR0L = (unsigned char) UBRR_Value;<br /> //aktywuj RX/TX<br /> UCSR0B = (1 &lt;&lt; RXEN0) | (1 &lt;&lt; TXEN0);<br /> //2 bity stopu, 8 bitów w ramce<br /> UCSR0C = (1 &lt;&lt; USBS0) | (3 &lt;&lt; UCSZ00);<br /><br /> unsigned char receiveData;<br /> while (1)<br /> {<br /><br /> while (! (UCSR0A &amp; (1 &lt;&lt; RXC0)) );<br /><br /> receiveData = UDR0;<br /><br /> if (receiveData == 0b11110000)<br /> PORTC ^= (1 &lt;&lt; PC5);<br />}<br />}[/syntax]<br /><br />Niestety wciskanie przycisku nie daje żadnego efektu po stronie atmegi168. Poprawnie świeci jedynie dioda podłączona do atmegi16.<br /><br />Czy wiecie jaka może być przyczyna?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 9 lut 2016, o 20:01</p><hr />
]]></content>
</entry>
</feed>