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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-03-28T14:25:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2681&amp;mode</id>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-03-28T14:25:24+01:00</updated>
<published>2013-03-28T14:25:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32212#p32212</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32212#p32212"/>
<title type="html"><![CDATA[Re: Zapis danych do bufora dla USARTA- Atmega16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32212#p32212"><![CDATA[
Dzieki, zrobiłem jak napisałeś odnośnie sprawdzenia czy nastąpił znak enter i teraz jest gites.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 28 mar 2013, o 14:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Cumuluss]]></name></author>
<updated>2013-03-27T18:45:43+01:00</updated>
<published>2013-03-27T18:45:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32105#p32105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32105#p32105"/>
<title type="html"><![CDATA[Re: Zapis danych do bufora dla USARTA- Atmega16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32105#p32105"><![CDATA[
Jeśli chodzi o obsługę UART to musisz w pętli while pobierać ciągle jeden znak do zmiennej char. Potem musisz sprawdzić w if czy coś w tej zmiennej jest. Jak powszechnie wiadomo, bufor UART jest cykliczny, także jeśli odczytałeś z niego znak, automatycznie ten znak się z niego usunął i nastąpiło przesunięcie. Piszesz więc instrukcje do if dla prawdy która zapisuje zmienną ze znakiem do tablicy. Potem inkrementujesz zmienną indeksu tablicy. Teraz piszesz warunek który sprawdza czy nastąpił znak enter i jeśli tak się stało to zerujesz znak i zmienną indeksu tablicy. <br />Powinno działać<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1110">Cumuluss</a> — 27 mar 2013, o 18:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-03-27T14:44:25+01:00</updated>
<published>2013-03-27T14:44:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32065#p32065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32065#p32065"/>
<title type="html"><![CDATA[Re: Zapis danych do bufora dla USARTA- Atmega16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32065#p32065"><![CDATA[
Dobra, będę pamiętał!<br /><br />Dzięki, może będzie działało, musze przeanalizowac tylko.<br /><br />Niby działa ale mi dane uciekają i nie wiem czemu. Kod wyglada teraz tak:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &lt;util/delay.h&gt;<br /><br />#include &lt;stdio.h&gt;<br /><br />#include &lt;stdlib.h&gt;<br /><br />#include &lt;string.h&gt;<br /><br />#include &quot;rs232.h&quot;<br />#include &quot;lcd.h&quot;<br /><br /><br /><br />//bufor do przechowywania stringa odebranego z terminala<br /><br />char bufor[UART_RX_BUF_SIZE];<br /><br />//znak odebrany z terminala<br /><br />char recv_char;<br /><br />//wskaznik na element w tablicy recv_buf<br /><br />volatile uint8_t next=0;<br /><br />volatile uint8_t LED_STATUS;<br /><br />int main(void)<br /><br />{<br /><br />        // inicjalizacja UART<br /><br /><br />        DDRD=0XFF;<br />        DDRA=0xff;<br />        PORTA=0x00;<br />        lcd_init();<br />        stdout=&amp;mystdout;<br />        printf(&quot;LCD OK!&quot;);<br />        _delay_ms(500);<br />        lcd_clear();<br />        //zezwolenie na globalne przerwania<br />        USART_Init( 5);<br />        sei();<br /><br />        uart_puts(&quot;starting...\n\r&quot;);<br /><br /><br /><br />        while(1) {<br /><br /><br />                //zawsze pobieraj znak<br /><br />                recv_char = uart_getc();<br />                bufor[next] = recv_char;<br />                printf(&quot;%d&quot;, bufor[next]);<br />                _delay_ms(1000);<br />                lcd_clear();<br />                next++;<br /><br />                if(next &gt; 2)<br />                {<br /><br /><br /><br />                if(bufor[0] == 'o' &amp;&amp; bufor[1] == 'n')<br />                {<br />                uart_puts(&quot;zapalenie diody\n\r&quot;);<br />                _delay_ms(1000);<br />                LED_STATUS = 0;<br />                }<br />                if(bufor[0] == 'o' &amp;&amp; bufor[1] == 'f')<br />                {<br />                uart_puts(&quot;zgaszenie diody\n\r&quot;);<br />                _delay_ms(1000);<br />                LED_STATUS=1;<br />                }<br />                next=0;<br /><br />                }<br /><br /><br /><br />                if(LED_STATUS == 1)<br />                {<br />                PORTD = 0xff;<br />                }<br />                if(LED_STATUS == 0)<br />                {<br />                PORTD=0x00;<br />                }<br /><br /><br /><br />        }<br /><br />}[/syntax]<br />Może żle ziinicjalizowałem uarta. Skopiowałem cala inicjalizacje z noty atmegi i wstawilem zgodnie z nota wartosc UBRR.<br /><br />Dobra już działa całość jak zamierzałem od wczoraj, dzięki, teraz wiem jak korzytsac z przerwań, wielkie dzieki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 27 mar 2013, o 14:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-27T14:28:25+01:00</updated>
<published>2013-03-27T14:28:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32061#p32061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32061#p32061"/>
<title type="html"><![CDATA[Re: Zapis danych do bufora dla USARTA- Atmega16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32061#p32061"><![CDATA[
Ja polecam ci jednak PRZYNAJMNIEJ takie podejście do obsługi UART - jeśli chodzi o przerwania - jakie masz zaprezentowane w książce:<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 />bo niestety to - co tu próbujesz zrobić woła o pomstę do nieba chociażby z uwagi na jedną wręcz TRAGICZNĄ rzecz, podkreślam TRAGICZNĄ - czyli sam fakt że w przerwaniu używasz <br /><br />_delay_ms(1000);<br /><br />ale też samo podejście do prób porównywania stringów - wręcz przenoszenia programu do przerwania - jest chybionym pomysłem. W ten sposób zawsze będziesz miał problemy - szczególnie z odbiorem danych np z terminala....<br /><br />na naszym forum już było kilka prób walki i to w miarę udanych aby na podstawie chociaż tylko tej książki zrobić sobie odbiór stringów - i nawet jeden przykład kolegi zdaje się ukasz całkiem niedawno - wczoraj czy przedwczoraj - sprawdź proszę.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />o np tutaj - masz link:<br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/post32037.html#p32037" >post32037.html#p32037</a><!-- l --><br /><br />i tą drogą idź korzystając normalnie z buforów cyklicznych i obsługi przerwań jak w książce - a całą resztę próbuj przynajmniej w taki sposób. Jak najszybciej uciekaj z takimi pomysłami jak wyżej z przerwań UART'a <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 mar 2013, o 14:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-03-27T14:10:36+01:00</updated>
<published>2013-03-27T14:10:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32057#p32057</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32057#p32057"/>
<title type="html"><![CDATA[Zapis danych do bufora dla USARTA- Atmega16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2681&amp;p=32057#p32057"><![CDATA[
Witam!<br /><br />Nie mogę ogólnie nic zapisac do bufora przy uart. Program:<br />[syntax=c]ISR( USART_RXC_vect )<br />{<br />/*<br />*lancuch = UDR ;<br />if(strcmp((char *)lancuch, &quot;x&quot;) == 0)<br />{<br />uart_puts(&quot;jest okey\n\r&quot;);<br />_delay_ms(1000);<br />}*/<br />static int index=0;<br />bufor[index] = UDR;<br />if(index &gt; UART_RX_BUF_SIZE)<br />{<br />index =0;<br />}<br /><br />if(strcmp((char *)bufor,(char) &quot;x&quot;)==0)<br />{<br />uart_puts(&quot;jest okey\n\r&quot;);<br />_delay_ms(1000);<br />}<br />index++;<br />}<br />[/syntax]<br />W terminalu wpisuje jakiis lanuch np. &quot;co jest&quot;. Chciałbym go zapisac do bufora i chciałbym porównywać dwa stringi, ale nie wiem jak zrobić żeby działało. dzęki za pomoc.<br />Dla zywklego char dziala dla tablicy char juz nie, jakby tam nic nie było.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 27 mar 2013, o 14:10</p><hr />
]]></content>
</entry>
</feed>