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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-03-16T10:58:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14865&amp;mode</id>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-03-16T10:58:23+01:00</updated>
<published>2016-03-16T10:58:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156317#p156317</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156317#p156317"/>
<title type="html"><![CDATA[Re: Zapalanie LED poprzez komunikację bluetooth - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156317#p156317"><![CDATA[
Już działa. Okazało się, że oprócz sei() trzeba jeszcze uaktywnić konkretnie przerwanie od RX-a (UCSRB |= (1 &lt;&lt; RXCIE);)<br /><br />Dzięki za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 16 mar 2016, o 10:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-03-16T09:51:35+01:00</updated>
<published>2016-03-16T09:51:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156314#p156314</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156314#p156314"/>
<title type="html"><![CDATA[Re: Zapalanie LED poprzez komunikację bluetooth - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156314#p156314"><![CDATA[
Rzeczywiście,  zapomniałem o włączeniu przerwań i o volatile.<br />Książkę już mam.<br /><br />Napiszę czy udało się rozwiązać problem.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 36 minutach ]</span></strong><br /><br />Włączyłem przerwania oraz ustawiłem zmienną command jako volatile. Niestety dioda nadal nie działa.<br />Jeśli chodzi o samo przesyłanie, to wiem, że dane są wysyłane poprawnie, bo podłączałem bluetooth przez ftdi do pc i w terminalu jest wszystko OK. W takim razie musi być coś źle z programem na atmedze.<br /><br />Sama biblioteka do uart też jest raczej poprawna, bo wcześniej komunikowałem ze sobą dwie atmegi i ta komunikacja działała poprawnie.<br /><br />Oto program po wprowadzonych zmianach:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;MyLibs/uart_library.h&gt;<br /><br /><br />volatile char command = 'S';  //S oznacza zgaszoną LED<br /><br />void executeCommand ()<br />{<br />if (command == 'S')<br />{<br />PORTB &amp;= ~(1 &lt;&lt; PB2);  //zgaś LED<br />}<br /><br />if (command == 'F')<br />{<br />PORTB |= (1 &lt;&lt; PB2);   //zapal LED<br />}<br /><br /><br />}<br /><br />int main ( void )<br />{<br />Uart_Init ( 9600 , 0 , 8 , NONE , 1 );<br /><br /><br />DDRB |= (1&lt;&lt; PB2);<br />sei();<br />while ( 1 ) {}<br /><br />return 0;<br />}<br /><br />//Przerwanie UART:<br />ISR( USART_RXC_vect )<br />{<br />command = UDR;<br />executeCommand ();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 16 mar 2016, o 09:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2016-03-16T09:37:19+01:00</updated>
<published>2016-03-16T09:37:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156312#p156312</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156312#p156312"/>
<title type="html"><![CDATA[Re: Zapalanie LED poprzez komunikację bluetooth - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156312#p156312"><![CDATA[
A próbowałeś coś wysłać z ATmegi? Skąd wiesz że odbierasz prawidłowe dane? Skąd wiesz że masz wszystko dobrze skonfigurowane? Włączyłeś przerwania? Czemu zmienna globalna używana w przerwaniu nie ma specyfikatora volatile?  Podepnij najpierw jakąś przejściówkę pewną. Włącz przerwania spróbuj wysłać coś do putty, albo zrób echo czyli to co Ci przyszło od razu wyślij z powrotem.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Kup tą książkę:<br /><br /><!-- m --><a class="postlink" href="https://sklep.atnel.pl/pl/p/Mikrokontrolery-AVR-Jezyk-C-podstawy-programowania-PL-Ksiazka-Pendrive/75" >https://sklep.atnel.pl/pl/p/Mikrokontro ... endrive/75</a><!-- m --><br /><br /><br />A wszystko Ci się wyjaśni, serio, to co zainwestujesz zwróci Ci się z nawiązką w postaci zdobytej wiedzy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 16 mar 2016, o 09:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Loreno]]></name></author>
<updated>2016-03-16T09:08:37+01:00</updated>
<published>2016-03-16T09:08:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156311#p156311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156311#p156311"/>
<title type="html"><![CDATA[Zapalanie LED poprzez komunikację bluetooth - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14865&amp;p=156311#p156311"><![CDATA[
Dzień dobry,<br /><br />Napisałem prosty kod do zapalania diody LED, gdy przez bluetooth wyślę znak 'F'. Dioda jest gaszona, gdy wyślę 'S'.<br />Niestety program nie działa, dioda jest ciągle zgaszona.<br />Korzystam z atmegi16a, a bluetooth to HC-05.<br /><br />Oto kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;MyLibs/uart_library.h&gt;<br /><br /><br />char command = 'S';  //S oznacza zgaszoną LED<br /><br />void executeCommand ()<br />{<br />if (command == 'S')<br />{<br />PORTB &amp;= ~(1 &lt;&lt; PB2);  //zgaś LED<br />}<br />//PRZÓD:<br />if (command == 'F')<br />{<br />PORTB |= (1 &lt;&lt; PB2);   //zapal LED<br />}<br /><br /><br />}<br /><br />int main ( void )<br />{<br />Uart_Init ( 9600 , 0 , 8 , NONE , 1 );<br /><br /><br />DDRB |= (1&lt;&lt; PB2); //dioda LED<br /><br />while ( 1 ) {}<br /><br />return 0;<br />}<br /><br />//Przerwanie UART:<br />ISR( USART_RXC_vect )<br />{<br />command = UDR;<br />executeCommand ();<br />}[/syntax]<br /><br />Załączam również moją bibliotekę UART, w któej znajduje się funkcja do inicjalizacji komunikacji:<br />[syntax=c]#ifndef UARTInit<br />#define UARTInit<br /><br />#define EVEN 0<br />#define ODD 1<br />#define NONE 2<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;math.h&gt;<br /><br /><br />void Uart_Init (int baud , char AsyncDoubleSpeed , char BitsSize , char ParityEVENorODDorNONE , char StopBits)<br />{<br /><br />uint16_t UBRRValue= lrint(( F_CPU / (16L * baud) ) - 1);<br />//int UBRRValue=51;<br />if (AsyncDoubleSpeed == 1) UCSRA = (1 &lt;&lt; U2X); //setting the U2X bit to 1 for double speed asynchronous<br /><br />//zapisz UBBR<br />UBRRH = (unsigned char) (UBRRValue &gt;&gt; 8);<br />UBRRL = (unsigned char) UBRRValue;<br /><br />//aktywuj TX oraz RX<br />UCSRB = (1 &lt;&lt; RXEN) | (1 &lt;&lt; TXEN);<br /><br />//ILOŚĆ BITÓW STOPU<br />if (StopBits == 2) UCSRC |= (1&lt;&lt;URSEL) | (1 &lt;&lt; USBS); //Sets 2 stop bits<br />//if 1 stop bit - no need to set anything<br /><br />//BITY PARYSTOŚCI/NIEPARZYSTOŚCI:<br />//if (ParityEVENorODDorNONE == EVEN) UCSRC |= (1 &lt;&lt; UPM1); //Sets parity to EVEN<br />//if (ParityEVENorODDorNONE == ODD) UCSRC |= (3 &lt;&lt; UPM0); //Sets parity to ODD<br /><br />//ILOŚĆ DANYCH W RAMCE<br />if (BitsSize  == 6) UCSRC |= (1&lt;&lt;URSEL) | (1 &lt;&lt; UCSZ0); //6-bit data length<br />if (BitsSize  == 7) UCSRC |= (1&lt;&lt;URSEL) | (1 &lt;&lt; UCSZ1); //7-bit data length<br />if (BitsSize  == 8) UCSRC |= (1&lt;&lt;URSEL) | (3 &lt;&lt; UCSZ0); //8-bit data length<br />if (BitsSize  == 9) UCSRC |= (1&lt;&lt;URSEL) | (7 &lt;&lt; UCSZ0); //9-bit data length<br />}<br /><br />unsigned char Uart_Received ( void )<br />{<br /> while (! (UCSRA &amp; (1 &lt;&lt; RXC)) ); //czekaj aż będzie pełny bufor<br /> return UDR;<br />}<br /><br /><br />void Uart_Transmit (unsigned char data)<br />{<br />while (! (UCSRA &amp; (1 &lt;&lt; UDRE)) );<br />//wysylanie<br />UDR = data;<br /><br />}<br /><br /><br />#endif[/syntax]<br /><br /><br />Bluetooth jest na pewno podłączony poprawnie, tzn. jego wyprowadzenie TX jest podłączone do RX atmegi. Wiem, że BT działa poprawnie, bo komunikowałem się za jego pośrednictwem między androidem a PC.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5188">Loreno</a> — 16 mar 2016, o 09:08</p><hr />
]]></content>
</entry>
</feed>