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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-13T20:17:41+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=7738&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-07-13T20:17:41+01:00</updated>
<published>2014-07-13T20:17:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87497#p87497</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87497#p87497"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87497#p87497"><![CDATA[
<div class="quotetitle">gravell napisał(a):</div><div class="quotecontent"><br />Gdyby ktoś miał kiedyś podobny problem powinno to<br /></div><br /><br />widzisz - wystarczyło rzucić okiem do książki .... <br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />przeczytać rozdział o UART i nie miałbyś tych problemów<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 lip 2014, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gravell]]></name></author>
<updated>2014-07-13T18:56:53+01:00</updated>
<published>2014-07-13T18:56:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87482#p87482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87482#p87482"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87482#p87482"><![CDATA[
Dokonałem pewnych zmian w ustawieniach USART, mianowicie ustawiam tylko rejestry:<br /><br />[syntax=c]UBRRH =  25 &gt;&gt; 8;<br />UBRRL = 25;<br />UCSRB = (1&lt;&lt;RXCIE)|(1&lt;&lt;TXEN)|(1&lt;&lt;RXEN);<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;UCSZ0);[/syntax]<br /><br />Podpiąłem się terminalem pod uC na krzyż (Rx do Tx i na odwrót), a w przerwaniu odpowiadającym za odbiór danych nadaję to co dostałem z terminala/komórki. Co ciekawe dla znaków 'a', 'b' program zwraca wszystko poprawnie (otrzymuję to samo co dostałem), problem natomiast występuje teraz z cyframi, przy wysyłaniu '1', '2' dostaję w terminalu krzaki... Dodatkowo pomimo tego, że uC otrzymuje (i zwraca) znaki 'a' i 'b' to warunek if(d=='a') nie wykonuje się. Zaczynam już powoli kombinować na chybił trafił, nic sensownego nie przychodzi mi już do głowy <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" />.<br /><br />Dodatkowo wychodzi na to, że niezależnie od tego którą literę alfabetu wyślę (dużą czy małą) nadal wykrywa ją jako znak o kodzie 63.<br /><br />@EDIT:<br />Problem rozwiązany, tkwił w złych ustawieniach rejestrów. Gdyby ktoś miał kiedyś podobny problem powinno to wyglądać tak:<br /><br />[syntax=c]UBRRH =  (25 &gt;&gt; 8);<br />UBRRL = 25;<br />UCSRC=(1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ0);<br />UCSRB = (1&lt;&lt;RXCIE)|(1&lt;&lt;TXEN)|(1&lt;&lt;RXEN);[/syntax]<br /><br />Tym oto sposobem otrzymamy USART pracujący dla 8bitów danych, 1 bitu stopu i zeru bitów parzystości. Prędkość 19200 dla taktowania 8MHz.<br /><br />Dziękuję za udzieloną pomoc, pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1464">gravell</a> — 13 lip 2014, o 18:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gravell]]></name></author>
<updated>2014-07-13T15:03:13+01:00</updated>
<published>2014-07-13T15:03:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87465#p87465</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87465#p87465"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87465#p87465"><![CDATA[
Zapoznałem się, próbowałem już stosować inne wzory do obliczania UBRR, próbowałem też podstawiać na sztywno wartości z tabeli z datasheet ATmega8 (w moim wypadku chyba dec 25 o ile mnie pamięć nie myli). Niestety bez rezultatów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1464">gravell</a> — 13 lip 2014, o 15:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-07-13T14:58:47+01:00</updated>
<published>2014-07-13T14:58:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87464#p87464</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87464#p87464"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87464#p87464"><![CDATA[
Przede wszystkim zapoznaj się z tym: <a href="http://mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html"  class="postlink">http://mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 13 lip 2014, o 14:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gravell]]></name></author>
<updated>2014-07-13T08:22:54+01:00</updated>
<published>2014-07-13T08:22:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87428#p87428</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87428#p87428"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87428#p87428"><![CDATA[
Poszedłem za radą kolegi atmel i sprawdziłem w drugą stronę, tj. co odbiera telefon kiedy uC próbuje coś nadać. Próbując wysłać znak 'x' odbieram na telefonie jakiś krzak. Rozumiem, że to wina niedopasowania prędkości, tylko gdzie w takim razie tkwi błąd? Prędkość transmisji uC, ATB-BTM-222 i ustawienia portu COM dla terminala są takie same (wszędzie 19200, 8bitów, brak bitu parzystości i jeden bit stopu). I dlaczego w takim razie wysyłanie '1', '2' itp przebiega poprawnie, a 'a', 'b' już nie (czyżby przy niższych kodach ASCII dla cyfr komunikacja nie zdążyła się rozjechać)?<br /><br />@mirekk36<br />Podpiąłem uC pod terminal przy ustawionych (teoretycznie) tych samych prędkościach transmisji. Działa dla '1', '2', nie działa dla znaków ('a', 'b'), próbując wysłać cokolwiek z uC na terminal dostaję krzaki. Tylko nie mam bladego pojęcia gdzie popełniłem błąd, prędkości ustawiam takie same, format wysyłanych danych również jest taki sam  <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" />. Sprawdzałem dla różnych typowych prędkości (19200, 9600) i w żadnym wypadku nie działało poprawnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1464">gravell</a> — 13 lip 2014, o 08:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-07-12T21:45:09+01:00</updated>
<published>2014-07-12T21:45:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87411#p87411</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87411#p87411"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87411#p87411"><![CDATA[
<div class="quotetitle">gravell napisał(a):</div><div class="quotecontent"><br />z komórki wychodzi znak o kodzie ASCII dec 97, na terminalu wyświetla dec 97, a uC reaguje na warunek dla znaku dec 63...<br /></div><br /><br />To oznacza tylko jedno - robisz gdzieś po drodze coś bardzo mega dziwnego .... albo innymi słowami tzw &quot;czeski błąd&quot; ... To może być nawet niedopasowanie prędkości uart, no ale inne maga kwiatki w twoim programie to chociażby pętla oczekująca w przerwaniu ! masakra <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Ja bym ci polecił - najpierw pobawić się terminalem w PC i komunikacją z prockiem. Sprawdzałeś taki wariant ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br /><div class="quotetitle">gravell napisał(a):</div><div class="quotecontent"><br />Warunek if(d==63) sprawdza czy dostałem znak o kodzie ASCII 63 (jeśli się mylę to mnie popraw)<br /></div><br /><br />Oczywiście że rozumiem że ten warunek sprawdza czy nadlatuje kod znaku 63 co oczywiście jest tożsame ze sprawdzaniem liczby 63 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />ale mi chodziło o to że nie ma takiej opcji - żebyś wysyłał z telefonu kod znaku 'b' a przy tym otrzymywał do procka kod jakiegoś innego znaku <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />widać że błądzisz i zamiast dopasowywać sobie na czuja - jakieś inne kody znaków - to zła droga<br /><br />- sprawdź sobie program na komórce - co on wysyła i przy jakich parametrach<br /><br />a jeśli w PC w terminalu otrzymujesz właściwy kod znaku na terminalu czyli 'b' to znaczy .... że w procku robisz babola - taki przyjmij algorytm myślenia - zamiast podstawiania do IF() innych dziwnych kodów<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 lip 2014, o 21:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-07-12T20:07:19+01:00</updated>
<published>2014-07-12T20:07:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87391#p87391</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87391#p87391"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87391#p87391"><![CDATA[
Może niefortunnie się wyraziłem - taka pętla może mieć zastosowanie w prostym przypadku pomijania pierwszego bajtu i oczekiwania na drugi, dlatego takie przykłady można znaleźć w internecie, ale jest to zdecydowanie niepoprawny sposób zapisu i może służyć jedynie do początkowych testów. Skoro jest uaktywnione przerwanie to nie widzę sensu na takie bierne oczekiwanie, skoro można takie działanie zrealizować w oparciu o to przerwanie...<br /><br />Wracając do Twojego problemu, sytuacja wydaje się doprawdy niesamowita, ponieważ z kodu wynika że wszystko powinno być w porządku. Może spróbuj połączyć mikrokontroler z jakąś przejściówką UART&lt;-&gt;USB zamiast telefonu, ale skoro piszesz że terminal wyświetla dane prawidłowo to pewnie trochę bezsensu...<br /><br />Może w drugą stronę tzn. niech procesor wyśle te problematyczne znaki ('a' i 'b') do telefonu, który je wyświetli, wtedy okaże się, czy prędkości transmisji są zgodne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 12 lip 2014, o 20:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gravell]]></name></author>
<updated>2014-07-12T19:50:08+01:00</updated>
<published>2014-07-12T19:50:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87387#p87387</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87387#p87387"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87387#p87387"><![CDATA[
@atmel<br />No właśnie w tym cały sęk, z komórki wysyłam powiedzmy to nieszczęsne 'a', czyli dec 97, a uC reaguje na warunek typu if(d==63). Aplikacja na telefon na 100% wysyła dobrze, co z resztą widać na terminalu. Dla pewności wyświetlałem w telefonie kod ASCII znaku, który wysyłam, wszystko się zgadza.<br />Co do kodu: pętla while może rzeczywiście była głupim pomysłem, ale w wielu przykładach w sieci można znaleźć taki kod, próbowałem wszystkich metod. Zmienna d będzie lokalna, zrobiłem ją globalną dla testów na zasadzie &quot;a może tak zadziała&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br /><br /><br />@mirekk36<br />Warunek if(d==63) sprawdza czy dostałem znak o kodzie ASCII 63 (jeśli się mylę to mnie popraw), nie miałem tu zamiaru sprawdzać czy dostałem liczbę 63 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. W tym cała &quot;dziwota&quot; sytuacji, z komórki wychodzi znak o kodzie ASCII dec 97, na terminalu wyświetla dec 97, a uC reaguje na warunek dla znaku dec 63... <br />Co do poradnika to obejrzałem, ale nie znalazłem tam rozwiązania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1464">gravell</a> — 12 lip 2014, o 19:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-07-12T09:18:35+01:00</updated>
<published>2014-07-12T09:18:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87300#p87300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87300#p87300"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87300#p87300"><![CDATA[
proponowałbym autorowi wątku jak najszybciej obejrzeć to:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2014/06/jak-wysac-zmienna-kody-ascii.html" >http://mirekk36.blogspot.com/2014/06/ja ... ascii.html</a><!-- m --><br /><br />wiele się rozjaśni .... bo te if( d==62 czy 63 w odniesieniu do opisu ma się jak pięść do oka - co pokazuje zresztą wyżej słusznie kolega atmel.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 lip 2014, o 09:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-07-11T21:34:55+01:00</updated>
<published>2014-07-11T21:34:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87284#p87284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87284#p87284"/>
<title type="html"><![CDATA[Re: Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87284#p87284"><![CDATA[
Sytuacja doprawdy dziwna, ale liczba 62 nie odpowiada znakowi 'a' (97 dec, 61 hex). Znak 'b' (98 dec, 62 hex) to również nie jest 63...<br /><br />Oczekiwanie pętlą while na ustawienie flagi RXC jest zupełnie pozbawione sensu - przecież to działanie realizuje przerwanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Dodatkowo mała uwaga: skoro zmienna &quot;d&quot; nie jest używana poza procedurą przerwania to nie warto ją umieszczać w obszarze zmiennych globalnych, a dodatkowo ze specyfikatorem volatile. Wystarczy ograniczyć jej zasięg do procedury przerwaniowej.<br /><br />Może jest to prozaiczny błąd i aplikacja na telefon reaguje na wielkie litery, albo ma odmienne kodowanie znaków <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 11 lip 2014, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gravell]]></name></author>
<updated>2014-07-11T18:25:23+01:00</updated>
<published>2014-07-11T18:25:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87269#p87269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87269#p87269"/>
<title type="html"><![CDATA[Atmega8+USART+ATB-BTM-222 rozpoznaje tylko liczby]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7738&amp;p=87269#p87269"><![CDATA[
Witam. <br /><br />Mam 'niewielki' problem ze zbudowanym układem. Próbuję sterować LEDem przy pomocy ATB-BTM-222 i ATmega8. <br /><br />Wariant 1: Z telefonu komórkowego wysyłam przez BT cyfy 1 lub 2. W zależności od tego co odbierze ATB-BTM-222 uC miga diodą w różny sposób. Całość działa jak należy.<br />Kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &lt;inttypes.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdint.h&gt;<br />#define BAUD 19200<br />//#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD&lt;&lt;4))-1)<br /><br />unsigned char USART_Recieve();<br /><br />volatile unsigned int red = 0, green = 0, blue = 0;<br />volatile char d;<br /><br />int main(void)<br />{<br />//USART init<br />UBRRH = (F_CPU/(BAUD*16L)-1) &gt;&gt; 8; //(unsigned char)(baud&gt;&gt;8);<br />UBRRL = (unsigned char)(F_CPU/(BAUD*16L)-1);<br />/* Enable receiver and transmitter */<br />    UCSRB = (1&lt;&lt;RXCIE)|(1&lt;&lt;TXEN)|(1&lt;&lt;RXEN);<br />/* Set frame format: 8data, 1stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(1&lt;&lt;UCSZ0);<br /><br />DDRB |= (1&lt;&lt;PB1);<br /><br />sei();<br /><br />while(1)<br />{<br />        if(red==1)<br />    {<br />       PORTB ^= (1&lt;&lt;PB1);<br />       _delay_ms(500);<br />    }<br />    else if(red==2)<br />    {<br />        PORTB ^= (1&lt;&lt;PB1);<br />        _delay_ms(2000);<br />    }<br />    else if(red==0)<br />    {<br />    PORTB ^= (1&lt;&lt;PB1);<br />        _delay_ms(100);<br />    }<br />}<br />}<br /><br />ISR(USART_RXC_vect)<br />{<br />while((UCSRA&amp;(1&lt;&lt;RXC)) == 0);<br />d = UDR;<br /><br />if(d=='\0')<br />{return;}<br />//60-65<br />if(d=='1')<br />{red = 1;}<br />else if(d=='2')<br />{red = 2;}<br />else<br />{red=0;}<br />}[/syntax]<br /><br />Teraz druga wersja, próbuję osiągnąć to samo poprzez wysyłanie znaków (a, b, c itd). I o dziwo tutaj nie działa jak należy.<br />Kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &lt;inttypes.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdint.h&gt;<br />#define BAUD 19200<br />//#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD&lt;&lt;4))-1)<br /><br />unsigned char USART_Recieve();<br /><br />volatile unsigned int red = 0, green = 0, blue = 0;<br />volatile char d;<br /><br />int main(void)<br />{<br />//USART init<br />UBRRH = (F_CPU/(BAUD*16L)-1) &gt;&gt; 8; //(unsigned char)(baud&gt;&gt;8);<br />UBRRL = (unsigned char)(F_CPU/(BAUD*16L)-1);<br />/* Enable receiver and transmitter */<br />    UCSRB = (1&lt;&lt;RXCIE)|(1&lt;&lt;TXEN)|(1&lt;&lt;RXEN);<br />/* Set frame format: 8data, 1stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(1&lt;&lt;UCSZ0);<br /><br />DDRB |= (1&lt;&lt;PB1);<br /><br />sei();<br /><br />while(1)<br />{<br />        if(red==1)<br />    {<br />       PORTB ^= (1&lt;&lt;PB1);<br />       _delay_ms(500);<br />    }<br />    else if(red==2)<br />    {<br />        PORTB ^= (1&lt;&lt;PB1);<br />        _delay_ms(2000);<br />    }<br />    else if(red==0)<br />    {<br />    PORTB ^= (1&lt;&lt;PB1);<br />        _delay_ms(100);<br />    }<br />}<br />}<br /><br />ISR(USART_RXC_vect)<br />{<br />while((UCSRA&amp;(1&lt;&lt;RXC)) == 0);<br />d = UDR;<br /><br />if(d=='\0')<br />{return;}<br />//60-65<br />if(d=='a')<br />{red = 1;}<br />else if(d=='b')<br />{red = 2;}<br />else<br />{red=0;}<br />}[/syntax]<br /><br />Pytanie brzmi o co tu chodzi? Kiedy wysyłam znaki '1', '2' wszystko działa, ale kiedy zamienię je na litery 'a', 'b' cały kod zachowuje się dziwnie. Mianowicie niezależnie od tego czy wyślę cały czas wykonuje się warunek else. Zauważyłem, że układ reaguje na warunki if(d==62) i if(d==63), tj. wykonują się przy wysłaniu znaku 'a' ('b' nadal nic). Początkowo myślałem, że to problem z prędkościami transmisji, ale wtedy zapewne nie działałoby w obu wypadkach.<br />Sprawdzałem w terminalu, czy aby wysyłam dobre znaki - ATB-BTM-222 odbiera dobre znaki, więc to chyba jednak nie kłopot z prędkością (wszystkie ustawione na 19200, zarówno w ATB-BTM-222 jak i w ATmega8).<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1464">gravell</a> — 11 lip 2014, o 18:25</p><hr />
]]></content>
</entry>
</feed>