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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-05T17:20:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3770&amp;mode</id>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2013-08-05T17:20:13+01:00</updated>
<published>2013-08-05T17:20:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44493#p44493</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44493#p44493"/>
<title type="html"><![CDATA[Re: PROBLEM Z UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44493#p44493"><![CDATA[
Noto programowe echo robiło się zdaje się tak:<br /><br />[syntax=c]ISR( USART_RXC_vect ) {<br /><br />    register uint8_t tmp_head;<br />    register char data;<br /><br />    data = UDR; //pobieramy natychmiast bajt danych z bufora sprzętowego<br />UDR = data;  //włacza echo[/syntax]<br /><br />Wyłącz inicjacje menu, wyłącz zawartość pętli nieskończonej i wyślij mu coś z terminala.<br />Procek powinien to odbić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 5 sie 2013, o 17:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jari17]]></name></author>
<updated>2013-08-05T16:59:18+01:00</updated>
<published>2013-08-05T16:59:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44487#p44487</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44487#p44487"/>
<title type="html"><![CDATA[Re: PROBLEM Z UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44487#p44487"><![CDATA[
zwarcie tx i rx<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1173">jari17</a> — 5 sie 2013, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2013-08-05T15:30:21+01:00</updated>
<published>2013-08-05T15:30:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44481#p44481</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44481#p44481"/>
<title type="html"><![CDATA[Re: PROBLEM Z UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44481#p44481"><![CDATA[
Ale z echem programowym (w procu) czy sprzętowym (zwarcie tx z rx)?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 5 sie 2013, o 15:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2013-08-05T14:48:15+01:00</updated>
<published>2013-08-05T14:48:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44478#p44478</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44478#p44478"/>
<title type="html"><![CDATA[Re: PROBLEM Z UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44478#p44478"><![CDATA[
Używasz jakiejś przejściówki USB-RS, a jeżeli tak to jakiej?<br />Wcześniej udało Ci się na tym układzie testowym odpalić transmisję w obu kierunkach?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 5 sie 2013, o 14:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jari17]]></name></author>
<updated>2013-08-05T14:21:35+01:00</updated>
<published>2013-08-05T14:21:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44476#p44476</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44476#p44476"/>
<title type="html"><![CDATA[Re: PROBLEM Z UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44476#p44476"><![CDATA[
Ktoś ma pomysł?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1173">jari17</a> — 5 sie 2013, o 14:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jari17]]></name></author>
<updated>2013-08-05T12:10:49+01:00</updated>
<published>2013-08-05T12:10:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44463#p44463</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44463#p44463"/>
<title type="html"><![CDATA[PROBLEM Z UART]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3770&amp;p=44463#p44463"><![CDATA[
Próbuje zrobić MENU na podstawie filmu:<br /><!-- m --><a class="postlink" href="http://www.youtube.com/watch?v=qDDCU3udirA" >http://www.youtube.com/watch?v=qDDCU3udirA</a><!-- m --><br /><br />Nie działa mi jednak odbieranie danych z terminalu...<br />Program zatrzymuje się na:<br /><a href="http://forum.atnel.pl/_obrazki/o/1173/20f334759c1a804c24580af1728f14b6.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1173/20f334759c1a804c24580af1728f14b6.JPG" alt="Obrazek" /></a><br /><br />Kod programu<br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;MYUART/myuart.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />uint16_t pomiar(uint8_t kanal);<br />uint16_t wynik=0;<br />uint8_t licznik;<br /><br />void rysuj_menu(void);<br />void show_ADC(void);<br />void show_counter(void);<br /><br />int main(void)<br />{<br />/*ADMUX |= (1&lt;&lt;REFS0)|(1&lt;&lt;REFS1);//wewnetrzne zródło zasilania<br />ADCSR |= (1&lt;&lt;ADEN);//włącz ADC<br />ADCSR |= (1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);//preskaler*/<br /><br />char k;<br />uart_init( __UBRR);//inicjalizacja uart (usart)<br />sei();<br />tr_cls(0);<br />uart_puts(&quot;******start******&quot;);<br />_delay_ms(1000);<br /><br />rysuj_menu();<br /><br /><br />while(1)<br />{<br />k=uart_getc();<br />if(k=='1') show_ADC();<br />if(k=='2') show_counter();<br />if(k=='3')<br />{<br />tr_cls(0);<br />uart_puts(&quot;koniec&quot;);<br />while(1);<br />}<br /><br />}<br />}<br /><br />uint16_t pomiar(uint8_t kanal)<br />{<br />ADMUX = (ADMUX &amp; 0xF8)|kanal;<br />ADCSR |= (1&lt;&lt;ADSC);//start pomiaru<br />while(ADCSR &amp; (1&lt;&lt;ADSC));//oczekiwanie na koniec pomiaru<br />return ADCW;<br />}<br /><br /><br />void rysuj_menu(void)<br />{<br />tr_cls(0);<br />tr_attr(0,BLACK,YELLOW);<br />tr_locate(2,5); uart_puts(&quot;   MENU   &quot;);<br /><br />tr_attr(0,CYAN,BLACK);<br />tr_locate(4,5); uart_puts(&quot;1. Pokaż wartoć ADC&quot;);<br />tr_locate(5,5); uart_puts(&quot;2. Pokaż licznik&quot;);<br />tr_locate(6,5); uart_puts(&quot;3. Zakoncz program&quot;);<br /><br />tr_attr(0,WHITE,BLACK);<br />tr_locate(8,5); uart_puts(&quot;Wybierz opcje 1-3&quot;);<br /><br />}<br /><br />void show_ADC(void)<br />{<br />char k;<br />tr_cls(1);<br />tr_attr(0,WHITE,BLACK);<br />tr_locate(2,5);<br />uart_puts(&quot;NAPIECIE ADC&quot;);<br />tr_brush_color(BLUE);<br />tr_locate(3,5); fill_line(' ',21);<br />tr_locate(5,5); fill_line(' ',21);<br /><br />tr_attr(0,YELLOW,BLACK);<br />tr_locate(4,7);<br />uart_puts(&quot;Wartoc:&quot;);<br />tr_locate(4,17);<br />tr_attr(BOLD,RED,BLACK);<br />uart_puts(&quot;2,54 V&quot;);<br />tr_attr(0,YELLOW,BLACK);<br /><br />while(1)<br />{<br /><br /><br />k=uart_getc();<br />if(k=='q')<br />{<br />rysuj_menu();<br />break;<br />}<br /><br /><br />}<br /><br />}<br /><br />void show_counter(void)<br />{<br />char k;<br />tr_cls(1);<br />tr_attr(0,WHITE,BLACK);<br />tr_locate(2,5);<br />uart_puts(&quot;Licznik&quot;);<br />tr_locate(3,5); fill_line('-',21);<br />tr_locate(5,5); fill_line('-',21);<br /><br />while(1)<br />{<br />tr_attr(0,YELLOW,BLACK);<br />tr_locate(4,7);<br />uart_puts(&quot;Wartoc:&quot;);<br />tr_locate(4,17);<br />tr_attr(BOLD,RED,BLACK);<br />uart_puts(&quot;  &quot;);<br />uart_putlong(licznik++,100);<br />uart_puts(&quot; &quot;);<br />tr_attr(0,YELLOW,BLACK);<br />uart_puts(&quot; &quot;);<br />_delay_ms(100);<br /><br />k=uart_getc();<br />if(k=='q')<br />{<br />rysuj_menu();<br />break;<br />}<br /><br />}<br />}[/syntax]<br /><br />myuart.c<br />[syntax=c]#include &quot;avr/io.h&quot;<br />#include &quot;myuart.h&quot;<br />#include &quot;../MK_TERMINAL/mk_term.h&quot;<br />#include &lt;avr/pgmspace.h&gt;//potrzebne do &quot;wysyłanie znaków z pamieci flash&quot;, gotowa biblioteka<br />#include &lt;stdlib.h&gt; //do wysylania liczb, gotowa biblioteka<br />#include &lt;avr/interrupt.h&gt;//?????????????????????<br /><br />//inicjalizacja UART (USART)<br />void uart_init( uint16_t _UBRR )//z noty<br />{<br />    // ustawienie prędkoci<br />    UBRRH = (uint8_t)(_UBRR &gt;&gt;8);<br />    UBRRL = (uint8_t)_UBRR ;<br /><br />    //załączenie nadajnika i odbiornika<br />    //&quot;USART Control and Status Register B – UCSRB&quot;<br />    //receiver - odbiornik, transmitter - nadajnik<br />    UCSRB = (1&lt;&lt;TXEN)|(1&lt;&lt;RXEN);<br /><br />    // ustawienie format ramki: 8bitów danych, 1stop bit - niekonieczne bo ustawione fabrycznie<br />    //USART Control and Status Register C – UCSRC<br />    //UCSRC = (1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ0);<br />}<br /><br />//wysyłanie znaku, z noty &quot;Data Transmission – The USART Transmitter&quot;<br />void uart_putc(unsigned char data )<br />{<br />    //czekaj az bufor nadawczy bedzie pusty = 0<br />    while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) ) ;<br />    //Wrzuć dane do bufora nadawczego, start transmisji<br />    UDR = data;<br />}<br /><br />//wysyłanie stringów<br />//*nazwa-&gt;to co znajduje się pod odresem pamięci<br />//nazwa -&gt; da w wyniku adres pamięci<br />void uart_puts(char *s)<br />{<br />while(*s) uart_putc(*s++);//sprawdza czy nie znajduje się 0 oznaczające koniec łańcucha znakowego.<br /><br />}<br /><br />//wysyłanie znaków z pamieci flash<br />void uart_puts_P(const char *s)<br />{<br />register char c;<br />while((c=pgm_read_byte(s++))) uart_putc(c);//funkcja wbudowana<br />}<br /><br /><br />//wysyłanie liczb<br />void uart_putlong(uint32_t liczba, uint8_t radix)<br />{<br />char buf&#91;17&#93;;<br />ltoa(liczba, buf, radix); //ltoa long to ascii, funkcja wbudowana<br />uart_puts(buf);<br />}<br /><br /><br />//===========================================================================<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 />// definiujemy funkcję pobierającą jeden bajt z bufora cyklicznego<br />char uart_getc(void) {<br />    // sprawdzamy czy indeksy są równe<br />    if ( UART_RxHead == UART_RxTail ) return 0;<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 />// definiujemy procedurę obsługi przerwania odbiorczego, zapisującą dane do bufora cyklicznego<br /><br />ISR(USART_RXC_vect) {<br />    uint8_t tmp_head;<br />   char data;<br /><br />    data = UDRE; //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 />    } else {<br />UART_RxHead = tmp_head; // zapamiętujemy nowy indeks<br />UART_RxBuf&#91;tmp_head&#93; = data; // wpisujemy odebrany bajt do bufora<br />    }<br />}&#91;/code&#93;<br /><br />myuart.h<br /><br />&#91;code&#93;#ifndef MYUART_H_<br />#define MYUART_H_<br /><br />//wziete ze strony blog atnel RS232 UBRR - jak prawidłowo obliczać - TRICK<br />#define UART_BAUD 9600<br />#define __UBRR ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1)<br /><br />//wysyłanie znaku, z noty &quot;Data Transmission – The USART Transmitter&quot;<br />void uart_putc(unsigned char data);<br /><br />//inicjalizacja UART<br />void uart_init( uint16_t _UBRR );<br /><br />//wysyłanie stringów<br />void uart_puts(char * s);<br /><br />//wysyłanie znaków z pamieci flash<br />void uart_puts_P(const char *s);<br /><br />//wysyłanie liczb<br />void uart_putlong(uint32_t liczba, uint8_t radix);<br /><br />//================================================================================<br /><br />#define UART_RX_BUF_SIZE 32 // definiujemy bufor o rozmiarze 32 bajtów<br />// definiujemy maskę dla naszego bufora<br />#define UART_RX_BUF_MASK ( UART_RX_BUF_SIZE - 1)<br /><br />char uart_getc(void);<br /><br />#endif /* MYUART_H_ */[/syntax]<br /><br />program się kompiluje<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Różowy J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1173">jari17</a> — 5 sie 2013, o 12:10</p><hr />
]]></content>
</entry>
</feed>