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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-30T18:26:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=24&amp;t=6401&amp;mode</id>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-03-30T18:26:29+01:00</updated>
<published>2014-03-30T18:26:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=76385#p76385</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=76385#p76385"/>
<title type="html"><![CDATA[Re: Zabawa forumowa dyskusja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=76385#p76385"><![CDATA[
Poniżej przedstawiam prościutki programik, który losuje 30 małych liter, sortuje je wg kolejności alfabetycznej i wyświetla te nieposortowane jak i posortowane w terminalu. Po wciśnięciu dowolnego klawisza na klawiaturze cykl się powtarza.<br /><br />Litery losowane są za pomocą funkcji <strong>rand()</strong> a sortowane za pomocą jednego z wariantów sortowania bąbelkowego.<br /><br />Do wyświetlania wyników pracy programu najlepiej używać programu Putty lub innego terminala obsługującego komendy VT100.<br />W programie użyłem biblioteki <strong>MK_TERMINAL</strong>, w której dodałem jedną funkcję kasującą wybraną całą linię  w terminalu<br />[syntax=c]void erase_line(uint8_t line)<br />{<br />tr_locate(line, 0);<br />uart_puts_P(U_ERASE_LINE);<br />}[/syntax]<br />a do komunikacji UART użyłem biblioteki <strong>MYUART</strong>. W tej bibliotece dodałem proste odbieranie jednego znaku w przerwaniu USART_RXC<br />[syntax=c]//przerwanie zgłaszane po odebraniu znaku przez UART<br />ISR(USART_RXC_vect)<br />{<br />rx_byte = UDR;<br />}<br /><br />/*funkcja zwracająca odebrany znak z UART<br />*przy pierwszym wywołaniu funkcji po odebraniu znaku<br />*funkcja zwróci odebrany znak<br />*przy kolejnym wywołaniu, jeśli UART nic nie odebrał,<br />*funkcja zwróci zero<br /> */<br />char uart_getc( void )<br />{<br />char data = rx_byte;<br /><br />rx_byte = 0;<br />return data;<br /><br />}[/syntax]<br />Obydwie biblioteki można znaleźć na Mirka blogu.<br /><br />A oto kod pliku main.c<br />[syntax=c]/*<br /> * main.c<br /> * F_CPU:11059200Hz<br /> * MCU:Atmega32<br /> *<br /> *  Created on: 2014-03-29<br /> *      Author: Jacek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;MYUART/myuart.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />#define TAB_SIZE30//rozmiar tablicy liter<br /><br />//tablica przechowująca wylosowane litery do sortowania<br />char litery&#91;TAB_SIZE&#93;;<br /><br />//funkcja zamieniająca między sobą wartości dwóch bajtów<br />void swap(char *bajt1, char *bajt2);<br /><br /><br />int main(void)<br />{<br />uart_init( __UBRR );// inicjalizacja UART<br /><br />//wyświetlamy nagłówek w terminalu<br />tr_cls(1);<br />tr_attr(1, WHITE, RED);<br />tr_locate(1,10);<br />uart_puts_P( PSTR(&quot;&gt;&gt; S o r t o w a n i e   l i t e r &lt;&lt;&quot;) );<br /><br />//zmienne na użytek pętli losującej i sortującej<br />uint8_t i;<br />int8_t j;<br />uint8_t blink_flag = 0;//zmienna na potrzeby migającego napisu<br /><br />sei();<br /><br />while(1)<br />{<br /><br />//wyświetlamy napis<br />tr_locate(3, 0); tr_attr(1, YELLOW, BLUE);<br />uart_puts_P( PSTR(&quot;Wylosowane litery&quot;) );<br /><br />//losujemy małe litery czyli liczby z zakresu 97...122 za pomocą funkcji rand()<br />//wg wzoru zmienna = zakres_dolny + rand() % (zakres_górny - zakres_dolny + 1)<br />//i jednocześnie wyświetlamy je w terminalu<br />tr_locate(4, 0); tr_attr(1, WHITE, BLACK);<br />for(i=0; i&lt;TAB_SIZE; i++)<br />{<br />litery&#91;i&#93; = 97 + rand() % 26;<br />uart_putc(litery&#91;i&#93;);<br />}<br /><br />//napis<br />tr_locate(6, 0); tr_attr(1, YELLOW, BLUE);<br />uart_puts_P( PSTR(&quot;Litery posortowane&quot;) );<br /><br />//sortujemy litery zapisane w kodzie ASCII czyli liczby<br />//za pomocą jednego z wariantów sortowania bąbelkowego<br />//porównujemy pierwszą liczbę z drugą i jeśli pierwsza jest większa<br />//to zamieniamy je miejscami, tak samo z drugą i trzecią itd<br />//w ten sposób w każdym obiegu pierwszej pętli for<br />//największa liczba zawsze wędruje na koniec tablicy<br />for(j = TAB_SIZE - 1; j &gt; 0; j-- )<br />{<br />for(i=0; i&lt;j; i++)<br />{<br />if(litery&#91;i&#93; &gt; litery&#91;i+1&#93;) swap( &amp;litery&#91;i&#93;, &amp;litery&#91;i+1&#93; );<br />}<br />}<br /><br />//i wyświetlamy posortowane litery w tablicy<br />tr_locate(7, 0); tr_attr(1, WHITE, BLACK);<br />for(i=0; i&lt;TAB_SIZE; i++) uart_putc(litery&#91;i&#93;);<br /><br />//prosta pętla oczekująca na wciśnięcie dowolnego klawisza<br />//na klawiaturze i migająca napisem<br />//pętla wykonuje się do puki nie wciśnie się żadnego klawisza<br />while(uart_getc() == 0)<br />{<br />blink_flag ^= 1;<br />//co 0,5s wyświetlany jest napis lub kasowana linia 9<br />if(0 == blink_flag)<br />{<br />//wyświetl napis w linii 9<br />tr_locate(9, 20);<br />tr_attr(1, YELLOW, BLACK);<br />uart_puts_P( PSTR(&quot;&gt;&gt; Dowolny klawisz - nowe losowanie &lt;&lt;&quot;) );<br />}<br />else erase_line(9);//kasuj linię 9<br /><br />_delay_ms(500);<br /><br />}<br />}//koniec pętli while<br />}//koniec main<br /><br /><br />void swap(char* bajt1, char* bajt2)<br />{<br />    char temp = *bajt1;<br />    *bajt1 = *bajt2;<br />    *bajt2 = temp;<br />}[/syntax]<br />Program testowany był na zestawie ATB 1.04 z Atmegą32. Kwarc 11059200Hz.<br /><br />W załączniku znajdują się pliki bibliotek MK_TERMINAL i MYUART.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 30 mar 2014, o 18:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2014-03-18T09:44:10+01:00</updated>
<published>2014-03-18T09:44:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74783#p74783</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74783#p74783"/>
<title type="html"><![CDATA[Re: Zabawa forumowa dyskusja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74783#p74783"><![CDATA[
Może zacząć od czegoś prostego, np. posortowanie tablicy charów <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br />Np. wklepujemy do tablicy char przypadkowe &quot;litery&quot;, następnie trzeba je w kolejności alfabetycznej posortować i wyświetlić, albo wysłać po Uarcie.<br /><br />Dla uproszczenia przyjmujemy tylko małe litery, bez zajączków.<br />Podpowiem, że za pomocą wartości int/hex możemy stwierdzić pozycję danej litery w alfabecie.<p>Statystyki: Napisane przez Gość — 18 mar 2014, o 09:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janeczqu]]></name></author>
<updated>2014-03-17T23:45:45+01:00</updated>
<published>2014-03-17T23:45:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74764#p74764</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74764#p74764"/>
<title type="html"><![CDATA[Re: Zabawa forumowa dyskusja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74764#p74764"><![CDATA[
Ciekawa inicjatywa, więc co na początek? Zacząłeś to dajesz z tematem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=823">janeczqu</a> — 17 mar 2014, o 23:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-03-17T19:37:23+01:00</updated>
<published>2014-03-17T19:37:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74727#p74727</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74727#p74727"/>
<title type="html"><![CDATA[Re: Zabawa forumowa dyskusja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74727#p74727"><![CDATA[
Popieram w całej rozciągłości <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 17 mar 2014, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcin11232]]></name></author>
<updated>2014-03-17T19:19:40+01:00</updated>
<published>2014-03-17T19:19:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74726#p74726</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74726#p74726"/>
<title type="html"><![CDATA[Zabawa forumowa dyskusja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6401&amp;p=74726#p74726"><![CDATA[
Witam wpadłem dziś na pomysł rozpoczęcia zabawy forumowej.<br />Może trochę rozruszam towarzystwo.<br />Coś na wzór z działu łamigłówek.<br /><br />Jako że jest to forum o programowaniu to tego będzie dotyczyć zabawa.<br />Zagadka ma polegać na jakimś założeniu które musi spełnić uczestnik.<br />Napisaniu kodu.<br />Od prostych ustawienie jakiegoś timera po trudniejsze (nie wiem na razie jakie coś wymyślicie <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ).  <br />Każdy podaje swoje rozwiązanie a zwycięzca wymyśla kolejną zagadkę.<br />Szczegółowo opisuje zadanie.<br />Były to taki sposób na odkurzenie swojej wiedzy dla starych wyjadaczy a i nowi by coś z tego wynieśli.<br /><br />Zadania organizacyjne:<br /><span style="color: #0000FF">Jest tu jeden szkopuł bo potrzebna by była osoba  do wyłonienia prawidłowej odpowiedzi.</span><br />Ograniczyć się do jednego procesora czy do całości avr?<br />W skład zadania były by włączone komponenty z płytki testowej(wyświetlacz,buzzer.itp)<br />Na razie podaje wam pomysł do dyskusji co o tym myślicie.<br />Jeśli macie jakieś pomysły na rozszerzenie tego to bardzo proszę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1657">marcin11232</a> — 17 mar 2014, o 19:19</p><hr />
]]></content>
</entry>
</feed>