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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-18T00:41:56+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3564&amp;mode</id>
<entry>
<author><name><![CDATA[gienas8]]></name></author>
<updated>2013-07-18T00:41:56+01:00</updated>
<published>2013-07-18T00:41:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42252#p42252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42252#p42252"/>
<title type="html"><![CDATA[Re: Uart i LCD osobno]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42252#p42252"><![CDATA[
Dziękuję, pomogło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1324">gienas8</a> — 18 lip 2013, o 00:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-17T21:40:05+01:00</updated>
<published>2013-07-17T21:40:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42237#p42237</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42237#p42237"/>
<title type="html"><![CDATA[Re: Uart i LCD osobno]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42237#p42237"><![CDATA[
Twoja funkcja uart_getc() wstrzymuje program bo zawiera pętle oczekującą na znak i jak on nie nadejdzie to możesz czekać w nieskończoność.<br />Spróbuj tak:<br />[syntax=c]uint8_t uart_getc()<br />{<br />        // Czy w buforze są dane?<br />        if(!uart_ischar()) return 0; //jak nie ma danych to zwróć 0<br />        // Dane z bufora<br />        return UDR0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 17 lip 2013, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gienas8]]></name></author>
<updated>2013-07-17T13:12:46+01:00</updated>
<published>2013-07-17T13:12:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42168#p42168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42168#p42168"/>
<title type="html"><![CDATA[Uart i LCD osobno]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3564&amp;p=42168#p42168"><![CDATA[
Witam! Napisałem sobie program który wysyła mi 3 losowe liczby na terminal i na LCD. Teraz chciałem zrobić, żeby to działało niezależnie. Tzn. chciałbym, żeby te liczby pojawiały mi się na LCD powiedzmy co 1s, a na terminalu gdy wcisnę klawisz np. 's'. i tutaj pojawił się problem. Jak w pliku main.c zakomentuję sobię linię i = uart_getc(); to wszystko działa równocześnie ale gdy komentarz sobie usunę to na LCD pojawiają się te liczby tylko raz i nic więcej nie idzie. Mógłby mi ktoś podpowiedzieć jak mogę to zrealizować żeby mi działało? Mój uC to ATmega328p.<br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;uart_328p/uart_328p.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />char losowa&#91;10&#93;;<br />char losowa2&#91;10&#93;;<br />char losowa3&#91;10&#93;;<br />char liczba_RND;  //wylosowana liczba<br />char liczba_RND2;  //wylosowana liczba<br />char liczba_RND3;  //wylosowana liczba<br />char i;<br /><br />int main( void ) {<br />uart_init( __UBRR );<br />lcd_init();<br />tr_cls(1);<br />lcd_str(&quot;   ...start...&quot;);<br />_delay_ms(750);<br />while(1){<br />liczba_RND = rand();<br />liczba_RND2 = rand();<br />liczba_RND3 = rand();<br />itoa(liczba_RND, losowa, 10);<br />itoa(liczba_RND2, losowa2, 10);<br />itoa(liczba_RND3, losowa3, 10);<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(losowa);<br />lcd_locate(0,4);<br />lcd_str(losowa2);<br />lcd_locate(0,8);<br />lcd_str(losowa3);<br />_delay_ms(1000);<br />i = uart_getc();<br />if(i == 's'){<br />uart_puts(losowa);<br />uart_puts( &quot;,&quot;);<br />uart_puts(losowa2);<br />uart_puts( &quot;,&quot;);<br />uart_puts(losowa3);<br />uart_puts( &quot;,&quot;);<br />uart_putc('\r');// wyślij znak CR (enter)<br />uart_putc('\n');<br />_delay_ms(100);<br />}<br />}<br />}[/syntax]<br /><br />uart_328p.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;uart_328p.h&quot;<br /><br />void uart_init( uint16_t _UBRR ) {<br />/* Set baud rate */<br />UBRR0H = (uint8_t)(_UBRR&gt;&gt;8);<br />UBRR0L = (uint8_t)_UBRR;<br />/* Enable transmitter */<br />UCSR0B = (1 &lt;&lt; RXEN0) | (1 &lt;&lt; TXEN0);<br />UCSR0C = (1 &lt;&lt; UCSZ00) | (1 &lt;&lt; UCSZ01);<br /><br />}<br /><br />void uart_putc( char data ) {<br />/* Wait for empty transmit buffer */<br />while ( !( UCSR0A &amp; (1&lt;&lt;UDRE0)) );<br />/* Put data into buffer, sends the data */<br />UDR0 = data;<br />}<br /><br />void uart_puts( char * s ) {<br />while( *s ) uart_putc( *s++ );<br />}<br /><br />void uart_puts_P(const char *s)// wysyła łańcuch z pamięci RAM na UART<br />{<br />  register char c;<br />  while ((c = pgm_read_byte( s++) )) uart_putc(c);// dopóki nie napotkasz 0 wysyłaj znak<br />}<br /><br />void uart_putlong( uint32_t liczba, uint8_t radix ) {<br />char buf&#91;17&#93;;<br />ltoa( liczba, buf, radix );<br />uart_puts( buf );<br />}<br /><br />uint8_t uart_ischar()<br />{<br />// Czy w buforze są dane?<br />return (UCSR0A &amp; (1 &lt;&lt; RXC0));<br />}<br /><br />uint8_t uart_getc()<br />{<br />// Czy w buforze są dane?<br />while(!uart_ischar());<br />// Dane z bufora<br />return UDR0;<br />}[/syntax]<br /><br />uart_328p.h<br />[syntax=c]#ifndef UART_328P_H_<br />#define UART_328P_H_<br />#define UART_BAUD 9600<br />#define __UBRR ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1)<br /><br />uint8_t uart_ischar();<br />uint8_t uart_getc();<br />void uart_init( uint16_t _UBRR );<br />void uart_putc( char data );<br />void uart_puts( char * s );<br />void uart_puts_P(const char *s);<br />void uart_putlong( uint32_t liczba, uint8_t radix );<br /><br />#endif /* UART_328P_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1324">gienas8</a> — 17 lip 2013, o 13:12</p><hr />
]]></content>
</entry>
</feed>