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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-08T23:10:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9921&amp;mode</id>
<entry>
<author><name><![CDATA[fotograf9]]></name></author>
<updated>2015-01-08T23:10:43+01:00</updated>
<published>2015-01-08T23:10:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=113269#p113269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=113269#p113269"/>
<title type="html"><![CDATA[Re: Tablica, RS232, Wyświetlacz led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=113269#p113269"><![CDATA[
Kod jak najbardziej zrozumiały i podziękowanie za uproszenie go <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Uroki początków, robi się dużo na około.<br /><br />Mam jednak pytanko:<br /><br />1.Czemu w podfunkcji dałeś w nawias VOID a nie mógł zostać pusty?<br />2.Dlaczego jest <strong>*licznik_2</strong> w nawiasie po uint8_t? a potem w timerze2 gdzie jest definiowana ta zmienna jest odnośnik do podfunkcji <strong>&amp;licznik_2</strong>?<br />[syntax=c]void off_segment(uint8_t *licznik_2)<br />{<br />(*licznik_2)++;<br />if(*licznik_2==1)<br />{<br />PORTC|=cyf1|cyf2|cyf3;<br />PORTC&amp;=~cyf4;<br />PORTD=waga&#91;5&#93;;<br />}<br /> // zwiekszenie licznika<br />if(*licznik_2==200) // po zliczeniu do tego ma sie wylaczyc wyswietlacz<br />{<br />PORTC|=cyf1|cyf2|cyf3|cyf4;<br />*licznik_2=2;<br />}<br />}<br />ISR (TIMER2_COMP_vect) //przerwanie nadajnika podczerwieni<br />{<br />static uint8_t licznik_2;<br />if(j==1)<br />{<br />multiplex(&amp; licznik_2);<br />}<br />if(j==2) off_segment(&amp; licznik_2);<br />}[/syntax]<br /><br />Może i to pytania o błahostkę ale jedyne czego tu nie czaje za bardzo <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=3647">fotograf9</a> — 8 sty 2015, o 23:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fotograf9]]></name></author>
<updated>2015-01-08T21:07:47+01:00</updated>
<published>2015-01-08T21:07:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=113222#p113222</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=113222#p113222"/>
<title type="html"><![CDATA[Re: Tablica, RS232, Wyświetlacz 7-seg]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=113222#p113222"><![CDATA[
Jako, że ciągle jestem początkujący w programowaniu uC po ciężkich bojach myślowych i kombinowaniu udało się osiągnąć cel (chyba) <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Program ma na celu wyświetlanie odebranej ramki danych na wyświetlaczu 7segmentowym. W życiu będzie wykorzystanych 6 segementów jednak do testów na płytce stykowej mam jedynie 4 dlatego jest nieco obkrojony kod <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />W przerwaniu odczytywana jest cała ramka i zapisywana do tablicy, poczym sprawdzane jest czy charakterystyczne znaki na danych miejscach zostały odebrane co świadczy o poprawnej ramce, dalej funkcja wycisna z ramki odpowiednie znaki i wpisuje je do tablicy waga. Gdy jest zero po krótkim czasie przechodzi w stan czuwania i się wygasza, taka sama sytuacja jest gdy nie ma transmisji<br /><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 08-01-2015<br /> *      Author: Błażej<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;UART/UART.h&quot;<br /><br />#define cyf1 (1&lt;&lt;PC0)<br />#define cyf2 (1&lt;&lt;PC1)<br />#define cyf3 (1&lt;&lt;PC2)<br />#define cyf4 (1&lt;&lt;PC3)<br /><br />void Timer1_init ();<br />void Timer2_init ();<br />void sprawdzenie_cyfr();<br />void multiplex ();<br />void off_segment();<br /><br /><br />uint8_t licznik=1, licznik_2=0;<br />uint8_t odebrano,j;<br />uint8_t z=1,y=0;<br />int i;<br />uint8_t ramka&#91;22&#93;,  waga&#91;&#93;={255,255,255,255,255,255};<br />const uint8_t cyfra&#91;12&#93;  = { //tablica zapalanych segmentów<br />0b10000001,// 0<br />0b11110011,// 1<br />0b01001001,// 2<br />0b01100001,// 3<br />0b00110011,// 4<br />0b00100101,// 5<br />0b00000101,// 6<br />0b11110001,// 7<br />0b00000001,// 8<br />0b00100001,// 9<br />0b11111111,// NIC (puste miejsce)<br />0b01111111, // minus<br />};<br /><br />int main(void)<br />{<br />DDRD=0b11111110;<br />PORTD=0xff;<br />DDRC=0b00111111;<br />PORTC=0xff;<br /><br />UART_init(9600);<br />Timer2_init ();<br />Timer1_init ();<br />sei ();<br /><br />while(1)<br />{<br />if(ramka&#91;0&#93;==0x02 &amp;&amp; ramka&#91;19&#93;==0x0d &amp;&amp; ramka&#91;21&#93;==0x04) //warunek poprawnej ramki STX,CR,ETX<br />{<br />sprawdzenie_cyfr(); //odwołanie do funkcji sprawdzania cyfr<br />}<br />if (waga&#91;4&#93;==cyfra&#91;10&#93; &amp;&amp; waga&#91;5&#93;==cyfra&#91;0&#93;) j=2;<br />else j=1;<br />if(y==z)<br />{<br />j=0;<br />PORTC|=cyf1|cyf2|cyf3|cyf4;<br />}<br />}<br />}<br /><br />void Timer2_init ()<br />{<br />TCCR2 |= (1&lt;&lt;WGM21); //tryb CTC<br />TCCR2 |= (1&lt;&lt;CS21)|(1&lt;&lt;CS22)|(1&lt;&lt;CS20); //preskaler na 1024<br />OCR2 = 38; //rejestr przepelnienia, czestotliwosc 200Hz<br />TIMSK |= (1&lt;&lt;OCIE2); //zezwolenie na przerwanie<br />}<br /><br />void Timer1_init ()<br />{<br />TCCR1B|=(1&lt;&lt;WGM12); //tryb ctc<br />TCCR1B|=(1&lt;&lt;CS12)|(1&lt;&lt;CS10); //preskaler 1024<br />OCR1A =31249; //rejestr przepełeninia, czestotliwosc 0.25Hz<br />TIMSK|=(1&lt;&lt;OCIE1A);//zezwolenie na przerwanie<br />}<br />/**************************************************************************************************<br /> *************************************PODFUNKCJE****************************************************<br />**************************************************************************************************/<br />void sprawdzenie_cyfr()<br />{<br />for(uint8_t k=1;k&lt;7;k++) //petla liczaca kolejne miejsca w ramce<br />{<br />for(uint8_t j=0;j&lt;10;j++) //petla odliczajaca przypisanie cyfr<br />{<br />if(ramka&#91;k&#93;==0x20) waga&#91;k-1&#93;=cyfra&#91;10&#93;; //jeżeli w ramce jest znak pusty<br />else if(ramka&#91;k&#93;==0x2D) waga&#91;k-1&#93;=cyfra&#91;11&#93;; //jeżeli w ramce jest minus<br />else if(ramka&#91;k&#93;==0x30+j) waga&#91;k-1&#93;=cyfra&#91;j&#93;; //cyfry z wagi<br />}<br />}<br />}<br /><br />void multiplex()<br />{<br /> // zmienna do przelaczania kolejno anod wyswietlacza<br /><br />if(licznik==1) PORTD=waga&#91;2&#93;;// gdy zapalony wysw.1 podaj stan zmiennej c1<br />else if(licznik==2) PORTD=waga&#91;3&#93;;// gdy zapalony wysw.2 podaj stan zmiennej c2<br />else if(licznik==4) PORTD=waga&#91;4&#93;;// gdy zapalony wysw.3 podaj stan zmiennej c3<br />else if(licznik==8) PORTD=waga&#91;5&#93;;// gdy zapalony wysw.4 podaj stan zmiennej c4<br />PORTC = (PORTC &amp; 0xF0) | (~licznik &amp; 0x0F);<br />// operacje cyklicznego przesuwania bitu zapalajacego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesuniecie zawartosci bitow licznika o 1 w lewo<br />if(licznik&gt;8)<br />{<br />licznik = 1;// jesli licznik wi?kszy niz 8 to ustaw na 1<br />}<br />j=0;<br />licznik_2=0;<br />}<br /><br />void off_segment()<br />{<br />licznik_2++;<br />if(licznik_2==1)<br />{<br />PORTC|=cyf1|cyf2|cyf3;<br />PORTC&amp;=~cyf4;<br />PORTD=waga&#91;5&#93;;<br />}<br /> // zwiekszenei licznika<br />if(licznik_2==200) // po zliczeniu do tego ma sie wylaczyc wyswietlacz<br />{<br />PORTC|=cyf1|cyf2|cyf3|cyf4;<br />licznik_2=2;<br />}<br />}<br />/**************************************************************************************************<br />********************************************PRZERWANIA*********************************************<br />**************************************************************************************************/<br />ISR (USART_RXC_vect) //przerwanie odczytu danych<br />{<br />odebrano=odbierz();<br />ramka&#91;i&#93;=odebrano; //to co odebrano przypisz do ramki<br />i++;<br />if(i==22) i=0; //jezeli odebrano 22 znaki wyzeruj licznik i, odebrano cała ramke<br />z++;<br />if(z==250) z=1;<br />}<br />ISR (TIMER2_COMP_vect) //przerwanie nadajnika podczerwieni<br />{<br />if(j==1)<br />{<br />multiplex();<br />}<br />if(j==2) off_segment();<br />}<br />ISR (TIMER1_COMPA_vect)<br />{<br />y=z;<br />}[/syntax]<br /><br />Jeżeli macie jakieś sugestie co do uproszczenia kodu prosze o info <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Jedyne co jest denerwujące to to, że podczas trwania przerwania Timera1, ktore odywa się co ok. 4sekundy wyświetlacz zamruga. Można to jakoś wyeliminować czy to już taki urok multipleksowania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3647">fotograf9</a> — 8 sty 2015, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-12-29T21:33:02+01:00</updated>
<published>2014-12-29T21:33:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=111163#p111163</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=111163#p111163"/>
<title type="html"><![CDATA[Re: Tablica, RS232, Wyświetlacz led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=111163#p111163"><![CDATA[
Na początek trochę bym kod źródłowy zmniejszył, usuwając funkcję (wywołania wraz z ich definicjami):<br /><br />[syntax=c]sprawdzenie_cyfr1();<br />sprawdzenie_cyfr2();<br />sprawdzenie_cyfr3();<br />sprawdzenie_cyfr4();[/syntax]<br />Zastępując je:<br /><br />[syntax=c]for (uint8_t i = 0; i &lt; 4; i++)<br />for (uint8_t j = 0; j &lt; 10; ++j)<br />if(ramka&#91;i + 3&#93;==0x20)<br />waga&#91;i&#93; = cyfra&#91;10&#93;;<br />else if(ramka&#91;i + 3&#93;==0x2D)<br />waga&#91;i&#93; = cyfra&#91;11&#93;;<br />else if(ramka&#91;i + 3&#93; == 0x30 + j)<br />waga&#91;i&#93;=cyfra&#91;j&#93;;[/syntax]<br /><br />Co do samego problemu to proponuję dodać &quot;timeout&quot; na jakimś timerze, którego zliczona wartość będzie resetowana w momencie odbioru dowolnej danej. Jeżeli licznik doliczy do ustalonego Tmax, wtedy wyświetlanie jest wyłączane, a moment odbioru bajtu z powrotem włącza wyświetlacz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 29 gru 2014, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fotograf9]]></name></author>
<updated>2014-12-29T20:19:24+01:00</updated>
<published>2014-12-29T20:19:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=111139#p111139</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=111139#p111139"/>
<title type="html"><![CDATA[Tablica, RS232, Wyświetlacz led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9921&amp;p=111139#p111139"><![CDATA[
Witam wszystkich <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Mam taki mały problemik. Program ma za zadania odczytu ramki danych przesyłanej przez interfejs RS232 i wyświetlanie przesłanych cyfr na wyświetlaczu siedmiosegmentowym. Po braku transmisji (wyłączenie nadajnika) wyświetlacze led mają się wyłączać jednak nie mam pomysłu jak to uczynić. Domyślam się, że potrzeba warunku sprawdzającego czy leci transmisja i potem przypisanie do tablicy odpowiednich znaków odpowiadających za wygaszenie LED.<br /><br />Poniżej kod programu:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 11-12-2014<br /> *      Author: Błażej<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;UART/UART.h&quot;<br /><br />#define cyf1 (1&lt;&lt;PB0)<br />#define cyf2 (1&lt;&lt;PB1)<br />#define cyf3 (1&lt;&lt;PB2)<br />#define cyf4 (1&lt;&lt;PB3)<br /><br />void sprawdzenie_cyfr1();<br />void sprawdzenie_cyfr2();<br />void sprawdzenie_cyfr3();<br />void sprawdzenie_cyfr4();<br /><br />uint8_t odebrano;<br />int i;<br />char ramka&#91;22&#93;, waga&#91;6&#93;;<br /><br />const uint8_t cyfra&#91;12&#93; = {<br />0b10000001,// 0<br />0b11110011,// 1<br />0b01001001,// 2<br />0b01100001,// 3<br />0b00110011,// 4<br />0b00100101,// 5<br />0b00000101,// 6<br />0b11110001,// 7<br />0b00000001,// 8<br />0b00100001,// 9<br />0b11111111,// NIC (puste miejsce)<br />0b01111111,// minus<br />};<br /><br />int main(void)<br />{<br />DDRD=0b11111110;<br />PORTD=0x00;<br />DDRB=0b00001111;<br />PORTB|=cyf1 |cyf2 |cyf3 | cyf4;<br /><br />UART_init(9600);<br />sei ();<br /><br /><br />while(1)<br />{<br />if(ramka&#91;0&#93;==0x02 &amp;&amp; ramka&#91;19&#93;==0x0d &amp;&amp; ramka&#91;21&#93;==0x04)<br />{<br />sprawdzenie_cyfr1();<br />sprawdzenie_cyfr2();<br />sprawdzenie_cyfr3();<br />sprawdzenie_cyfr4();<br />}<br /><br />if(ramka&#91;0&#93;==0x02)<br />{<br />PORTB &amp;=~cyf1;<br />PORTB|=cyf2|cyf3|cyf4;<br />PORTD=waga&#91;0&#93;;<br />_delay_ms(1);<br /><br />PORTB &amp;=~cyf2;<br />PORTB|=cyf1|cyf3|cyf4;<br />PORTD=waga&#91;1&#93;;<br />_delay_ms(1);<br /><br />PORTB &amp;=~cyf3;<br />PORTB|=cyf2|cyf1|cyf4;<br />PORTD=waga&#91;2&#93;;<br />_delay_ms(1);<br /><br />PORTB &amp;=~cyf4;<br />PORTB|=cyf2|cyf3|cyf1;<br />PORTD=waga&#91;3&#93;;<br />_delay_ms(1);<br />}<br />}<br />}<br /><br />void sprawdzenie_cyfr1()<br />{<br />if(ramka&#91;3&#93;==0x30) waga&#91;0&#93;=cyfra&#91;0&#93;;<br />if(ramka&#91;3&#93;==0x31) waga&#91;0&#93;=cyfra&#91;1&#93;;<br />if(ramka&#91;3&#93;==0x32) waga&#91;0&#93;=cyfra&#91;2&#93;;<br />if(ramka&#91;3&#93;==0x33) waga&#91;0&#93;=cyfra&#91;3&#93;;<br />if(ramka&#91;3&#93;==0x34) waga&#91;0&#93;=cyfra&#91;4&#93;;<br />if(ramka&#91;3&#93;==0x35) waga&#91;0&#93;=cyfra&#91;5&#93;;<br />if(ramka&#91;3&#93;==0x36) waga&#91;0&#93;=cyfra&#91;6&#93;;<br />if(ramka&#91;3&#93;==0x37) waga&#91;0&#93;=cyfra&#91;7&#93;;<br />if(ramka&#91;3&#93;==0x38) waga&#91;0&#93;=cyfra&#91;8&#93;;<br />if(ramka&#91;3&#93;==0x39) waga&#91;0&#93;=cyfra&#91;9&#93;;<br />if(ramka&#91;3&#93;==0x20) waga&#91;0&#93;=cyfra&#91;10&#93;;<br />if(ramka&#91;3&#93;==0x2D) waga&#91;0&#93;=cyfra&#91;11&#93;;<br />}<br /><br />void sprawdzenie_cyfr2()<br />{<br />if(ramka&#91;4&#93;==0x30) waga&#91;1&#93;=cyfra&#91;0&#93;;<br />if(ramka&#91;4&#93;==0x31) waga&#91;1&#93;=cyfra&#91;1&#93;;<br />if(ramka&#91;4&#93;==0x32) waga&#91;1&#93;=cyfra&#91;2&#93;;<br />if(ramka&#91;4&#93;==0x33) waga&#91;1&#93;=cyfra&#91;3&#93;;<br />if(ramka&#91;4&#93;==0x34) waga&#91;1&#93;=cyfra&#91;4&#93;;<br />if(ramka&#91;4&#93;==0x35) waga&#91;1&#93;=cyfra&#91;5&#93;;<br />if(ramka&#91;4&#93;==0x36) waga&#91;1&#93;=cyfra&#91;6&#93;;<br />if(ramka&#91;4&#93;==0x37) waga&#91;1&#93;=cyfra&#91;7&#93;;<br />if(ramka&#91;4&#93;==0x38) waga&#91;1&#93;=cyfra&#91;8&#93;;<br />if(ramka&#91;4&#93;==0x39) waga&#91;1&#93;=cyfra&#91;9&#93;;<br />if(ramka&#91;4&#93;==0x20) waga&#91;1&#93;=cyfra&#91;10&#93;;<br />if(ramka&#91;4&#93;==0x2D) waga&#91;1&#93;=cyfra&#91;11&#93;;<br />}<br /><br />void sprawdzenie_cyfr3()<br />{<br />if(ramka&#91;5&#93;==0x30) waga&#91;2&#93;=cyfra&#91;0&#93;;<br />if(ramka&#91;5&#93;==0x31) waga&#91;2&#93;=cyfra&#91;1&#93;;<br />if(ramka&#91;5&#93;==0x32) waga&#91;2&#93;=cyfra&#91;2&#93;;<br />if(ramka&#91;5&#93;==0x33) waga&#91;2&#93;=cyfra&#91;3&#93;;<br />if(ramka&#91;5&#93;==0x34) waga&#91;2&#93;=cyfra&#91;4&#93;;<br />if(ramka&#91;5&#93;==0x35) waga&#91;2&#93;=cyfra&#91;5&#93;;<br />if(ramka&#91;5&#93;==0x36) waga&#91;2&#93;=cyfra&#91;6&#93;;<br />if(ramka&#91;5&#93;==0x37) waga&#91;2&#93;=cyfra&#91;7&#93;;<br />if(ramka&#91;5&#93;==0x38) waga&#91;2&#93;=cyfra&#91;8&#93;;<br />if(ramka&#91;5&#93;==0x39) waga&#91;2&#93;=cyfra&#91;9&#93;;<br />if(ramka&#91;5&#93;==0x20) waga&#91;2&#93;=cyfra&#91;10&#93;;<br />if(ramka&#91;5&#93;==0x2D) waga&#91;2&#93;=cyfra&#91;11&#93;;<br />}<br /><br />void sprawdzenie_cyfr4()<br />{<br />if(ramka&#91;6&#93;==0x30) waga&#91;3&#93;=cyfra&#91;0&#93;;<br />if(ramka&#91;6&#93;==0x31) waga&#91;3&#93;=cyfra&#91;1&#93;;<br />if(ramka&#91;6&#93;==0x32) waga&#91;3&#93;=cyfra&#91;2&#93;;<br />if(ramka&#91;6&#93;==0x33) waga&#91;3&#93;=cyfra&#91;3&#93;;<br />if(ramka&#91;6&#93;==0x34) waga&#91;3&#93;=cyfra&#91;4&#93;;<br />if(ramka&#91;6&#93;==0x35) waga&#91;3&#93;=cyfra&#91;5&#93;;<br />if(ramka&#91;6&#93;==0x36) waga&#91;3&#93;=cyfra&#91;6&#93;;<br />if(ramka&#91;6&#93;==0x37) waga&#91;3&#93;=cyfra&#91;7&#93;;<br />if(ramka&#91;6&#93;==0x38) waga&#91;3&#93;=cyfra&#91;8&#93;;<br />if(ramka&#91;6&#93;==0x39) waga&#91;3&#93;=cyfra&#91;9&#93;;<br />if(ramka&#91;6&#93;==0x20) waga&#91;3&#93;=cyfra&#91;10&#93;;<br />if(ramka&#91;6&#93;==0x2D) waga&#91;3&#93;=cyfra&#91;11&#93;;<br />}<br /><br />ISR (USART_RXC_vect) //przerwanie odczytu danych<br />{<br />odebrano=odbierz();<br />ramka&#91;i&#93;=odebrano;<br />i++;<br />if(i==22)i=0;<br />}[/syntax]<br /><br />I tu w razie co inicjalizacja UART:<br />[syntax=c]/*<br /> * UART.c<br /> *<br /> *  Created on: 21-08-2014<br /> *      Author: B?a?ej<br /> */<br /><br />#include &quot;avr/io.h&quot;<br />#include &quot;UART.h&quot;<br />#include &quot;avr/pgmspace.h&quot;<br />#include &quot;stdlib.h&quot; //biblioteka do ltoa<br /><br />void UART_init( uint16_t baud)<br />{<br />uint16_t _UBRR = ((8000000+baud*8UL)/(16UL*baud)-1);<br />UBRRH = (uint8_t)(_UBRR&gt;&gt;8);<br />UBRRL = (uint8_t) _UBRR;<br />UCSRB = (1&lt;&lt;RXCIE) | (1&lt;&lt;RXEN);//| (1&lt;&lt;TXEN); //ustawienie odbierania, wysy��ania i flagi odebrania danych<br /><br />}<br /><br />uint8_t odbierz(void) //odbieranie pojedynczego znaku<br />{<br />while (!( UCSRA &amp; (1&lt;&lt;RXC))) ; //czeka az bufor bedzie pusty<br />return UDR; //przeslanie do bufora znaku<br />}<br />void UART_putc(char data ) //wysy��anie pojdeynczego znaku<br />{<br />while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) ); //czeka a��� bufor b���dzie pusty<br />UDR = data; //przes���anie do bufora znaku<br />}<br /><br />void UART_puts(char *s)  //wysy��anie ciagu znak��w<br />{<br />while (*s) UART_putc(*s++);<br />}<br /><br />void UART_putlong (uint32_t liczba, uint8_t radix) //radix czyli jaki system zapisu liczb wybieramy<br />{<br />char buf&#91;17&#93;;<br />ltoa(liczba, buf, radix); //zamiana liczby na znak ascii<br />UART_puts(buf);<br />}[/syntax]<br /><br />Kombinowałem z flagą odbioru danych ale kompletnie mi to nie wychodzi, jakby były jakieś trafne sugestie, z góry dzięki <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=3647">fotograf9</a> — 29 gru 2014, o 20:19</p><hr />
]]></content>
</entry>
</feed>