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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-28T01:20:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11759&amp;mode</id>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-22T13:16:24+01:00</updated>
<published>2015-05-22T13:16:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129839#p129839</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129839#p129839"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129839#p129839"><![CDATA[
Tak jak pisałem wcześniej, zacznij od uart_puts(&quot;hello world&quot;) i patrzysz czy putty ci coś wyświetla.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 22 maja 2015, o 13:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Buczek]]></name></author>
<updated>2015-05-21T21:57:25+01:00</updated>
<published>2015-05-21T21:57:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129818#p129818</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129818#p129818"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129818#p129818"><![CDATA[
Panowie wracając do tematu,<br />teraz wszystko się kompiluje, ale strona się nie ładuje. Pewnie nie mam komunikacji po Uarcie. Sprawdziłem mkuart.c, przerwania i rejestry mam poprawione. Chyba że jest jakiś babor którego nie widzę.<br />Na razie idę spać jutro sprawdzę jeszcze konfigurację Wifi.<br /><br />Zamieszczam kod może wam coś się rzuci w oczy czego ja nie widzę<br /><br />[syntax=c]/*<br /> * mkuart.c<br /> *<br /> *  Created on: 2010-09-04<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;mkuart.h&quot;<br /><br /><br />volatile uint8_t ascii_line;<br /><br /><br />// definiujemy w końcu nasz bufor UART_RxBuf<br />volatile char UART_RxBuf&#91;UART_RX_BUF_SIZE&#93;;<br />// definiujemy indeksy określające ilość danych w buforze<br />volatile uint8_t UART_RxHead; // indeks oznaczający „głowę węża”<br />volatile uint8_t UART_RxTail; // indeks oznaczający „ogon węża”<br /><br /><br /><br />// definiujemy w końcu nasz bufor UART_RxBuf<br />volatile char UART_TxBuf&#91;UART_TX_BUF_SIZE&#93;;<br />// definiujemy indeksy określające ilość danych w buforze<br />volatile uint8_t UART_TxHead; // indeks oznaczający „głowę węża”<br />volatile uint8_t UART_TxTail; // indeks oznaczający „ogon węża”<br /><br /><br />// wskaźnik do funkcji callback dla zdarzenia UART_RX_STR_EVENT()<br />static void (*uart_rx_str_event_callback)(char * pBuf);<br /><br /><br />// funkcja do rejestracji funkcji zwrotnej w zdarzeniu UART_RX_STR_EVENT()<br />void register_uart_str_rx_event_callback(void (*callback)(char * pBuf)) {<br />uart_rx_str_event_callback = callback;<br />}<br /><br /><br /><br />// Zdarzenie do odbioru danych łańcucha tekstowego z bufora cyklicznego<br />void UART_RX_STR_EVENT(char * rbuf) {<br /><br />if( ascii_line ) {<br />if( uart_rx_str_event_callback ) {<br />uart_get_str( rbuf );<br />(*uart_rx_str_event_callback)( rbuf );<br />} else {<br />UART_RxHead = UART_RxTail;<br />}<br />}<br />}<br /><br /><br /><br />void USART_Init( uint16_t baud ) {<br />/* Ustawienie prędkości */<br />UBRR0H = (uint8_t)(baud&gt;&gt;8);<br />UBRR0L = (uint8_t)baud;<br />/* Załączenie nadajnika I odbiornika */<br />UCSR0B = (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);<br />/* Ustawienie format ramki: 8bitów danych, 1 bit stopu */<br />UCSR0C = (3&lt;&lt;UCSZ00);<br /><br />// jeśli korzystamy z interefejsu RS485<br />#ifdef UART_DE_PORT<br />// inicjalizujemy linię sterującą nadajnikiem<br />UART_DE_DIR |= UART_DE_BIT;<br />UART_DE_ODBIERANIE;<br />#endif<br /><br />// jeśli korzystamy z interefejsu RS485<br />#ifdef UART_DE_PORT<br />// jeśli korzystamy z interefejsu RS485 załączamy dodatkowe przerwanie TXCIE<br />UCSR0B |= (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0)|(1&lt;&lt;RXCIE0)|(1&lt;&lt;TXCIE0);<br />#else<br />// jeśli nie  korzystamy z interefejsu RS485<br />UCSR0B |= (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0)|(1&lt;&lt;RXCIE0);<br />#endif<br />}<br /><br />// procedura obsługi przerwania Tx Complete, gdy zostanie opóżniony UDR<br />// kompilacja gdy używamy RS485<br />#ifdef UART_DE_PORT<br />ISR( USART0_TX_vect ) {<br />UART_DE_ODBIERANIE;// zablokuj nadajnik RS485<br />}<br />#endif<br /><br /><br />// definiujemy funkcję dodającą jeden bajtdoz bufora cyklicznego<br />void uart_putc( char data ) {<br />uint8_t tmp_head;<br /><br />    tmp_head  = (UART_TxHead + 1) &amp; UART_TX_BUF_MASK;<br /><br />          // pętla oczekuje jeżeli brak miejsca w buforze cyklicznym na kolejne znaki<br />    while ( tmp_head == UART_TxTail ){}<br /><br />    UART_TxBuf&#91;tmp_head&#93; = data;<br />    UART_TxHead = tmp_head;<br /><br />    // inicjalizujemy przerwanie występujące, gdy bufor jest pusty, dzięki<br />    // czemu w dalszej części wysyłaniem danych zajmie się już procedura<br />    // obsługi przerwania<br />    UCSR0B |= (1&lt;&lt;UDRIE0);<br />}<br />/////////////////////////////////<br />void uart_puts_P( const char *s )<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 /><br />void uart_puts(char *s)// wysyła łańcuch z pamięci RAM na UART<br />{<br />  register char c;<br />  while ((c = *s++)) uart_putc(c);// dopóki nie napotkasz 0 wysyłaj znak<br />}<br /><br />void uart_putint(int value, int radix)// wysyła na port szeregowy tekst<br />{<br />char string&#91;17&#93;;// bufor na wynik funkcji itoa<br />itoa(value, string, radix);// konwersja value na ASCII<br />uart_puts(string);// wyślij string na port szeregowy<br />}<br /><br /><br />// definiujemy procedurę obsługi przerwania nadawczego, pobierającą dane z bufora cyklicznego<br />ISR( USART0_UDRE_vect)  {<br />    // sprawdzamy czy indeksy są różne<br />    if ( UART_TxHead != UART_TxTail ) {<br />    // obliczamy i zapamiętujemy nowy indeks ogona węża (może się zrównać z głową)<br />    UART_TxTail = (UART_TxTail + 1) &amp; UART_TX_BUF_MASK;<br />    // zwracamy bajt pobrany z bufora  jako rezultat funkcji<br />#ifdef UART_DE_PORT<br />    UART_DE_NADAWANIE;<br />#endif<br />    UDR0 = UART_TxBuf&#91;UART_TxTail&#93;;<br />    } else {<br />// zerujemy flagę przerwania występującego gdy bufor pusty<br />UCSR0B &amp;= ~(1&lt;&lt;UDRIE0);<br />    }<br />}<br /><br /><br />// definiujemy funkcję pobierającą jeden bajt z bufora cyklicznego<br />int uart_getc(void) {<br />    // sprawdzamy czy indeksy są równe<br />    if ( UART_RxHead == UART_RxTail ) return -1;<br /><br />    // obliczamy i zapamiętujemy nowy indeks „ogona węża” (może się zrównać z głową)<br />    UART_RxTail = (UART_RxTail + 1) &amp; UART_RX_BUF_MASK;<br />    // zwracamy bajt pobrany z bufora  jako rezultat funkcji<br />    return UART_RxBuf&#91;UART_RxTail&#93;;<br />}<br /><br />char * uart_get_str(char * buf) {<br />int c;<br />char * wsk = buf;<br />if( ascii_line ) {<br />while( (c = uart_getc()) ) {<br />if( 13 == c || c &lt; 0) break;<br />*buf++ = c;<br />}<br />*buf=0;<br />ascii_line--;<br />}<br />return wsk;<br />}<br /><br />// definiujemy procedurę obsługi przerwania odbiorczego, zapisującą dane do bufora cyklicznego<br />ISR( USART0_RX_vect ) {<br /><br />    register uint8_t tmp_head;<br />    register char data;<br /><br />    data = UDR0; //pobieramy natychmiast bajt danych z bufora sprzętowego<br /><br />    // obliczamy nowy indeks „głowy węża”<br />    tmp_head = ( UART_RxHead + 1) &amp; UART_RX_BUF_MASK;<br /><br />    // sprawdzamy, czy wąż nie zacznie zjadać własnego ogona<br />    if ( tmp_head == UART_RxTail ) {<br />    // tutaj możemy w jakiś wygodny dla nas sposób obsłużyć  błąd spowodowany<br />    // próbą nadpisania danych w buforze, mogłoby dojść do sytuacji gdzie<br />    // nasz wąż zacząłby zjadać własny ogon<br />    UART_RxHead = UART_RxTail;<br />    } else {<br />    switch( data ) {<br />    case 0:// ignorujemy bajt = 0<br />    case 10: break;// ignorujemy znak LF<br />    case 13: ascii_line++;// sygnalizujemy obecność kolejnej linii w buforze<br />    default : UART_RxHead = tmp_head; UART_RxBuf&#91;tmp_head&#93; = data;<br />    }<br /><br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=546">Buczek</a> — 21 maja 2015, o 21:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-21T21:31:30+01:00</updated>
<published>2015-05-21T21:31:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129816#p129816</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129816#p129816"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129816#p129816"><![CDATA[
Nie żebym sie czepiał czy coś, ale co do czytelności makr<br /><br />[syntax=c]uart_init(0, BAUD_CALC(19200));<br />uart_init(1, BAUD_CALC(115200));<br />uart_init(2, BAUD_CALC(9600));<br />uart_init(3, BAUD_CALC(666));[/syntax]<br /><br />Czyż nie jest to przypadkiem bardziej czytelne od czterokrotnego wyliczania MYUBBR, gdzieś daleko wyżej ?  <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=8491">jnk0le</a> — 21 maja 2015, o 21:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-21T20:57:54+01:00</updated>
<published>2015-05-21T20:57:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129813#p129813</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129813#p129813"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129813#p129813"><![CDATA[
<div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />Z tego co widzę pojawiła się lepsza alternatywa mojej funkcji, ale co takiego złego w makrze na PSTR() ?<br /></div><br />Alternatyw może być tyle ilu programistów na świecie i każda jest dobra ... <br /><br />Ja nie mówię - że ta czy siamta jest najlepsza - ot po prostu skłaniam się do tej bez dodatkowych makr - właśnie ze względu na czytelność kodu ale też ze względu na to - że w 90% przypadkach kodów używa się PSTR() ... wtedy jest wszystko jasne .... makro to &quot;zasłania&quot; i później po stokroć łatwiej o pomyłkę ... więc nie tylko czytelność kodu - bo jak nie widać PSTR() to gdzieś w głowie zaciera się później różnica - i o co w tym chodzi ....<br /><br />Ale jeśli sam piszesz swoje programy i tylko ty ich używasz i tak się przyzwyczaiłeś - porobiłeś swoje makra - to czemu miałbyś ich nie używać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> działa? - działa .... więc nie ma problemu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 maja 2015, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-05-21T20:54:35+01:00</updated>
<published>2015-05-21T20:54:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129811#p129811</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129811#p129811"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129811#p129811"><![CDATA[
Czytelność kodu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 21 maja 2015, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-21T20:52:45+01:00</updated>
<published>2015-05-21T20:52:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129810#p129810</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129810#p129810"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129810#p129810"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">anshar napisał(a):</div><div class="quotecontent">To co niżej wklej do pliku mkuart.c:<br />[syntax=c]void uart_puts_P( const char *z )<br />{<br />register char c;<br />while ((c = pgm_read_byte(z++)) ) uart_putc(c);// dopóki nie napotkasz 0 wysyłaj znak<br />}[/syntax]<br /><br />oraz to co niżej do pliku mkuart.h:<br /><br />[syntax=c]void uart_puts_P( const char *z );[/syntax]<br /></div><br /><br />To rozwiązanie polecam bardziej niż to z dodatkowym makrem, które pomija konieczność wpisywania PSTR()</div><br />Z tego co widzę pojawiła się lepsza alternatywa mojej funkcji, ale co takiego złego w makrze na PSTR() ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 21 maja 2015, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-21T20:46:09+01:00</updated>
<published>2015-05-21T20:46:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129808#p129808</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129808#p129808"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129808#p129808"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br />To co niżej wklej do pliku mkuart.c:<br />[syntax=c]void uart_puts_P( const char *z )<br />{<br />register char c;<br />while ((c = pgm_read_byte(z++)) ) uart_putc(c);// dopóki nie napotkasz 0 wysyłaj znak<br />}[/syntax]<br /><br />oraz to co niżej do pliku mkuart.h:<br /><br />[syntax=c]void uart_puts_P( const char *z );[/syntax]<br /></div><br /><br />To rozwiązanie polecam bardziej niż to z dodatkowym makrem, które pomija konieczność wpisywania PSTR()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 maja 2015, o 20:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-05-21T20:38:16+01:00</updated>
<published>2015-05-21T20:38:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129803#p129803</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129803#p129803"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129803#p129803"><![CDATA[
To co niżej wklej do pliku mkuart.c:<br />[syntax=c]void uart_puts_P( const char *z )<br />{<br />register char c;<br />while ((c = pgm_read_byte(z++)) ) uart_putc(c);// dopóki nie napotkasz 0 wysyłaj znak<br />}[/syntax]<br /><br />oraz to co niżej do pliku mkuart.h:<br /><br />[syntax=c]void uart_puts_P( const char *z );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 21 maja 2015, o 20:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Buczek]]></name></author>
<updated>2015-05-21T20:07:45+01:00</updated>
<published>2015-05-21T20:07:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129799#p129799</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129799#p129799"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129799#p129799"><![CDATA[
Nie rozumem tego wcale:<br />w tórym miejscu definicja tej funkcji musi się znajdować aby ten serwer ruszył. Mirek twierdzi że ją sobie gdzieś dopisał ale gdzie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=546">Buczek</a> — 21 maja 2015, o 20:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-21T19:27:09+01:00</updated>
<published>2015-05-21T19:27:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129795#p129795</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129795#p129795"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129795#p129795"><![CDATA[
Nie, ale będziesz musiał zawsze wpisywać stringi w PSTR(&quot;costam&quot;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 21 maja 2015, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Buczek]]></name></author>
<updated>2015-05-21T18:54:11+01:00</updated>
<published>2015-05-21T18:54:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129793#p129793</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129793#p129793"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129793#p129793"><![CDATA[
czy ja tą definicję muszę dopisać MK_USART?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=546">Buczek</a> — 21 maja 2015, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-21T12:58:27+01:00</updated>
<published>2015-05-21T12:58:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129768#p129768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129768#p129768"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129768#p129768"><![CDATA[
[syntax=c]#define uart_puts_P(str)    uart_puts_p(PSTR(str))<br />void uart_puts_p(const char *string)<br />{<br />   while(pgm_read_byte(string))<br />      uart_putc(pgm_read_byte(string++));<br />}[/syntax]<br />Tak jakby co  <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=8491">jnk0le</a> — 21 maja 2015, o 12:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Buczek]]></name></author>
<updated>2015-05-20T23:19:31+01:00</updated>
<published>2015-05-20T23:19:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129743#p129743</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129743#p129743"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129743#p129743"><![CDATA[
Zajrzę jutro, dzisiaj już biorę moją szpadę pod kołdrę i idę spać;) <br />dzięki za nocny pojedynek z serwerem, mam coś ciekawego w głowie, nie do końca wiem czy da się to wykonać na Twoim module Wifi ale powalczę z tym serwerem do ostatniej kropli krwi lub złamania szpady;).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=546">Buczek</a> — 20 maja 2015, o 23:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-20T22:21:21+01:00</updated>
<published>2015-05-20T22:21:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129739#p129739</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129739#p129739"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129739#p129739"><![CDATA[
<div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />dzięki czemuś takiemu uniknąłem scalania a następnie wyłuskiwania bajtów, no i działa analogicznie do scanf'a<br /></div><br />Ależ oczywiście, że można w C to robić na wiele sposobów, poprzez argumenty również w związku ze wskaźnikami <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale to o czym piszę nie jest także niczym nowym i osobliwym<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">Buczek napisał(a):</div><div class="quotecontent"><br />Mirek <br /><br />consola wyświetla że mam nie zdefiniowaną funkcję uart_puts_P, ale przeglądam twój poradnik i ty też nigdzie jej nie definiowałeś a tobie się kompilowało bez problemów.<br /></div><br /><br />Bo sobie ją po prostu dopisałem - zdaje się, że w książce jej nie ma ... no ale ... zajrzyj do książki nawet do Bluebooka, albo i do Greenbooka chociażby do biblioteki LCD i zobacz jak się taką funkcję tworzy<br /><br />lcd_str_P()<br /><br />w Bluebooku opisywałem o co chodzi w funkcjach z postfixem _P ... warto o tym pamiętać - żeby później gdy się to widzi nie być skonsternowanym i umieć sobie poradzić trzema ruchami szpady <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> — 20 maja 2015, o 22:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Buczek]]></name></author>
<updated>2015-05-20T21:16:13+01:00</updated>
<published>2015-05-20T21:16:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129737#p129737</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129737#p129737"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129737#p129737"><![CDATA[
Mirek <br /><br />consola wyświetla że mam nie zdefiniowaną funkcję uart_puts_P, ale przeglądam twój poradnik i ty też nigdzie jej nie definiowałeś a tobie się kompilowało bez problemów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=546">Buczek</a> — 20 maja 2015, o 21:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-20T20:23:12+01:00</updated>
<published>2015-05-20T20:23:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129730#p129730</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129730#p129730"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129730#p129730"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent">A co ma na celu takie udziwnianie ?<br /></div><br />Jakie udziwnienie - zakładam na przyszłość odbiór binarki, więc wtedy przesyłanie NULA mija się z celem bo to normalny bajt. Odpowiedź w postaci dwóch bajtów to dodatkowo możliwość przekazywania rozszerzonych komunikatów błędów np: -1, -2 ... itd To nie żadne udziwnienie tylko normalna technika programowania w C.<br /></div><br /><br />[syntax=c]uint8_t uart_getData(uint8_t *data);[/syntax]<br />dzięki czemuś takiemu uniknąłem scalania a następnie wyłuskiwania bajtów, no i działa analogicznie do scanf'a <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=8491">jnk0le</a> — 20 maja 2015, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-20T20:11:05+01:00</updated>
<published>2015-05-20T20:11:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129729#p129729</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129729#p129729"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129729#p129729"><![CDATA[
<div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />A co ma na celu takie udziwnianie ?<br /></div><br />Jakie udziwnienie - zakładam na przyszłość odbiór binarki, więc wtedy przesyłanie NULA mija się z celem bo to normalny bajt. Odpowiedź w postaci dwóch bajtów to dodatkowo możliwość przekazywania rozszerzonych komunikatów błędów np: -1, -2 ... itd To nie żadne udziwnienie tylko normalna technika programowania w C.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />A Consola pokazuje coś takiego<br /></div><br />A consola pokazuje CAŁKIEM COŚ innego - to żółte podkreślenie to nie żaden błąd kompilacji, jakbyś sukcesywnie oglądał moje poradniki - chociażby tylko te o programowaniu WIFI to byś wiedział o co chodzi a także jak można i pozbyć się tej żółtej pchełki na dwa sposoby jeśli cię drażni.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />poczytaj te błędy z konsoli i zobacz jakich funkcji nie masz zdefiniowanych<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 maja 2015, o 20:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-25T16:48:27+01:00</updated>
<published>2015-05-20T19:49:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129726#p129726</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129726#p129726"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129726#p129726"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />zwraca typ int, no właśnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czyli warunek wtedy nie wydaje się być dziwny hmm ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br />A co ma na celu takie udziwnianie ? <br />Przecież wystarczy zwrócić NULL w przypadku pustego bufora, A zabawy w sprawdzanie czy coś nadeszło (bo znak przychodzący może być NULLem) są troszeczkę trudne gdy w przerwaniu jest wycinany jeden znak z pary CR LF (bo jeśli sprawdzamy czy przyszedł null to chyba dane przychodzące obejmują cały zakres 8 bitów).<br /><br />[syntax=c]void uart_getsl(char *buffer, uint8_t bufferlimit)<br />{<br />while(--bufferlimit)<br />{<br />*buffer = uart_getc();<br />if(*buffer++ == 0)<br />return;<br />}<br />*buffer = 0;<br />}[/syntax]<br /><br />I czemu jeszcze nikt się jeszcze nie przyczepił do listingu (#3) ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br /><div class="quotetitle">Buczek napisał(a):</div><div class="quotecontent"><br />... mieli ... nie wyświetla ...<br /></div><br /><br />Jak coś nie działa to debugujesz u podstaw - w twoim przypadku należy sprawdzić czy transmisja rs232 w ogóle działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 20 maja 2015, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Buczek]]></name></author>
<updated>2015-05-20T19:59:59+01:00</updated>
<published>2015-05-20T19:47:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129725#p129725</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129725#p129725"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129725#p129725"><![CDATA[
Rejestry udało mi się pozmieniać, lecz zostało jeszcze jedno żółte ostrzeżenie.<br />efekt jest taki, że na LCD wyświetlają się napisy (mrugają podczas próby łączenia strony z AVR), a strona z napisem Hello World się nie wyświetla (mieli mieli i mieli przy próbie łączenia się z AVR).<br /><br />Na wszelki wypadek zamieszczam kod z AVR<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 15 maj 2015<br /> *      Author: Jacek<br /> */<br />#include &lt;avr/io.h&gt;<br />#include&lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br /><br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;MK_USART/mkuart.h&quot;<br /><br />char uart_buf&#91;255&#93;;<br /><br />void parse_rs232(char*buf);<br />void print_webpage(void);<br />void http200ok(void);<br /><br />int main( void ){<br /><br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7);<br /><br />lcd_init ();<br />lcd_str (&quot;www.atnel.pl&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;AVR/HTTP serwer&quot;);<br />_delay_ms(500);<br />lcd_cls();<br /><br /><br />USART_Init( __UBRR );<br />register_uart_str_rx_event_callback(parse_rs232);<br /><br />sei();<br /><br />while(1) {<br /><br />UART_RX_STR_EVENT(uart_buf);<br />}<br />}<br /><br />void http200ok(void) {<br />uart_puts_P(PSTR(&quot;HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n&quot;) );<br /><br />}<br />void print_webpage(void) {<br /><br />http200ok();<br />uart_puts_P(PSTR(&quot;&lt;html&gt;&lt;body&gt;hello world&lt;/body&gt;&lt;html&gt;&quot;));<br />}<br />void parse_rs232(char*buf){<br />if (!strncap(&quot;GET /&quot;,buf,6)) {<br />print_webpage();<br />}<br /><br /><br />}[/syntax]<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/546/ea9d94e46fc7264d86074257a92d6a49.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/546/ea9d94e46fc7264d86074257a92d6a49.jpg" alt="Obrazek" /></a><br /><br />A Consola pokazuje coś takiego<br /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/546/d2881731db17faa31c50d6e0d203ca2d.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/546/d2881731db17faa31c50d6e0d203ca2d.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=546">Buczek</a> — 20 maja 2015, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-20T15:20:11+01:00</updated>
<published>2015-05-20T15:20:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129702#p129702</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129702#p129702"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129702#p129702"><![CDATA[
<div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />Chwila, chwila ... uart_getc zwraca int16_t ?<br /></div><br />zwraca typ int, no właśnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czyli warunek wtedy nie wydaje się być dziwny hmm ? <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> — 20 maja 2015, o 15:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-05-20T15:02:00+01:00</updated>
<published>2015-05-20T15:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129699#p129699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129699#p129699"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129699#p129699"><![CDATA[
Chwila, chwila ... uart_getc zwraca int16_t ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 20 maja 2015, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-20T14:19:43+01:00</updated>
<published>2015-05-20T14:19:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129698#p129698</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129698#p129698"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129698#p129698"><![CDATA[
<div class="quotetitle">jnk0le napisał(a):</div><div class="quotecontent"><br />dosyć ... ciekawy warunek<br /></div><br />Ciekawy bo ? <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> — 20 maja 2015, o 14:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2016-06-28T01:20:15+01:00</updated>
<published>2015-05-20T14:00:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129695#p129695</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129695#p129695"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129695#p129695"><![CDATA[
Możesz też użyć tej biblioteki, albo wyciągnąć z niej potrzebne rejestry. <br /><br /><a href="https://github.com/jnk0le/Easy-AVR-USART-C-Library"  class="postlink">https://github.com/jnk0le/Easy-AVR-USART-C-Library</a><br /><br />Tylko weź pod uwagę, że mkusart może używać UDIRE zamiast TXCIE.<br /><br />EDIT:<br />[syntax=c]if( c &lt; 0 )[/syntax]<br />dosyć ciekawy warunek  <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=8491">jnk0le</a> — 20 maja 2015, o 14:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-05-20T13:36:54+01:00</updated>
<published>2015-05-20T13:36:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129690#p129690</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129690#p129690"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129690#p129690"><![CDATA[
<div class="quotetitle">Buczek napisał(a):</div><div class="quotecontent"><br />wszystko wg Twojego przepisu bibliotekę mam z Greenbooka<br /></div><br />A no to właściwa biblioteka - po co więc szukać innej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> oj panie kochany - a podmiana rejestrów dla innego procka to co ? ... Poczytaj rzeczywiście wątek który poleca kolega wyżej - a jeśli jeszcze coś będzie nie tak to pytaj ... pokaż też wtedy ew fragmenty biblioteki które podmieniłeś<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 maja 2015, o 13:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-05-20T13:32:04+01:00</updated>
<published>2015-05-20T13:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129689#p129689</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129689#p129689"/>
<title type="html"><![CDATA[Re: Atmega 644P i MK_USART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11759&amp;p=129689#p129689"><![CDATA[
Musisz zmienić nazwy rejestrów jak i nazwy przerwań. Zobacz na przykładzie <br /><a href="http://forum.atnel.pl/topic10414.html"  class="postlink">http://forum.atnel.pl/topic10414.html</a> co trzeba zrobić (zmienić).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 20 maja 2015, o 13:32</p><hr />
]]></content>
</entry>
</feed>