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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-05-16T14:57:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11694&amp;mode</id>
<entry>
<author><name><![CDATA[matez7]]></name></author>
<updated>2015-05-16T14:57:30+01:00</updated>
<published>2015-05-16T14:57:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129296#p129296</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129296#p129296"/>
<title type="html"><![CDATA[Re: ODBIERANIE ZNAKU Z KLAWIATURY]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129296#p129296"><![CDATA[
Dzięki wielkie za radę , przerwanie+porady od Pana Mirka rozwiązało problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9572">matez7</a> — 16 maja 2015, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[eMCe2]]></name></author>
<updated>2015-05-14T21:09:49+01:00</updated>
<published>2015-05-14T21:09:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129194#p129194</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129194#p129194"/>
<title type="html"><![CDATA[Re: DALMIERZ-ODBIERANIE ZNAKU Z KLAWIATURY]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129194#p129194"><![CDATA[
Bo widzisz po wejsciu w funkcję UARTReadChar() tkwisz w niej w bezczynności do czasu aż odbierzesz jakiś znak (while(!(UCSRA &amp; (1&lt;&lt;RXC)));)<br />Dlatego twoja pętla główna nie przechodzi do sprawdzania pozostałych warunków...<br />zamiast odbierać w pętli głównej ten znak może po prostu w przerwaniu usart RX przypisują odebrany znak zmiennej data...<br /><br /><!-- m --><a class="postlink" href="http://www.avrfreaks.net/forum/tut-soft-using-usart-interrupt-driven-serial-comms?page=all" >http://www.avrfreaks.net/forum/tut-soft ... s?page=all</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1363">eMCe2</a> — 14 maja 2015, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matez7]]></name></author>
<updated>2015-05-16T10:32:56+01:00</updated>
<published>2015-05-14T14:32:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129139#p129139</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129139#p129139"/>
<title type="html"><![CDATA[ODBIERANIE ZNAKU Z KLAWIATURY]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11694&amp;p=129139#p129139"><![CDATA[
Witam,<br />robię dalmierz optyczny oparty o czujnik sharp, skonfigurowałem microswitche do wyzwalania pomiaru pojedynczego ciaglego oraz zatrzymanie pomiaru. Skonfigurowalem rowniez uart- po nacisnieciu przycisku np.pomiar poj atmega wysyla dane do terminala.<br /><br />Kolejnym krokiem bylo wyzwolenie pomiaru z komputera. Wciskajac odpowiedni przycisk na klawiaturze p-pom poj, c -pom ciagly, s- stop. Napisałem do tego celu standardowa funkcje jak podaje dokumentacja atmegi.<br /><br />Problem polega na tym ze moge albo robic pomiar za pomoca microswitchy albo z komputera.<br /><br />główna pętla programu:<br />[syntax=c]while(1)<br />          {<br /> <br /> <br />                   data=UARTReadChar();<br />                          // pomiar poj z klawiatury<br />                                  if(data=='p')<br />                                  {<br />                                      ADCSRA |=(1&lt;&lt;ADSC);d=odleglosc(ADCW);<br />                                          while((ADCSRA &amp; (1&lt;&lt;ADSC)));<br />                                          LCD_Initalize();                                //inicjalizacja LCD<br />                                          sprintf(wynik,&quot;D=%d&#91;cm&#93;&quot;,d);      //konwersja wyniku do tablicy char<br />                                          LCD_GoTo(0, 0);                         //Ustawienie kursora w pozycji (0,0)<br />                                          LCD_WriteText(&quot;ODLEGLOSC:&quot;);<br />                                          LCD_GoTo(5, 1);                         //Ustawienie kursora w pozycji (5,1)<br />                                          LCD_WriteText(wynik);               //Wyświetlenie wyniku<br />                                          uart_puts(&quot;Odleglosc = &quot;);<br />                                          uart_putlong(d,10);<br />                                          uart_puts(&quot;cm&quot;);<br />                                          uart_puts(&quot;  \r\n&quot;);<br />                                          _delay_ms(1000);                            //opóźnienie}<br />                                                                                  }<br />                                  //pomiar ciagly z klawiatury<br />                                  if (data=='c')<br /> <br />                                  {<br />                                          do{<br /> <br />                                          _delay_ms(250);<br />                                          ADCSRA |=(1&lt;&lt;ADSC);d=odleglosc(ADCW);<br />                                          while((ADCSRA &amp; (1&lt;&lt;ADSC)));<br />                                          LCD_Initalize();                                //inicjalizacja LCD<br />                                          sprintf(wynik,&quot;D=%d&#91;cm&#93;&quot;,d);      //konwersja wyniku do tablicy char<br />                                          LCD_GoTo(0, 0);                         //Ustawienie kursora w pozycji (0,0)<br />                                          LCD_WriteText(&quot;ODLEGLOSC:&quot;);<br />                                          LCD_GoTo(5, 1);                         //Ustawienie kursora w pozycji (5,1)<br />                                          LCD_WriteText(wynik);               //Wyświetlenie wyniku<br />                                          uart_puts(&quot;Odleglosc = &quot;);<br />                                          uart_putlong(d,10);<br />                                          uart_puts(&quot;cm&quot;);<br />                                          uart_puts(&quot;  \r\n&quot;);<br /> <br />                                          _delay_ms(1000);                            //opóźnienie}<br />                                          }while (!(UDR=='s'));<br />                                  }<br /> <br />                                  if(data=='s')<br />                                   {LCD_Initalize();<br />                                        LCD_GoTo(0, 0);                           //Ustawienie kursora w pozycji (0,0)<br />                                        LCD_WriteText(&quot;1-POM.POJ&quot;);<br />                                        LCD_GoTo(0, 1);                           //Ustawienie kursora w pozycji (0,0)<br />                                        LCD_WriteText(&quot;2-POM.CIAGLY&quot;);<br />                                   }<br /> <br /> <br />                  ////POMIAR Pojedynczy za pomocą mikroswitcha  // Jesli wcisniety przycisk key1 (1&lt;&lt;PD3)<br />                                          if(!(PIND&amp;key1))<br />                                        do {<br />                         ADCSRA |=(1&lt;&lt;ADSC);d=odleglosc(ADCW);<br />                         while((ADCSRA &amp; (1&lt;&lt;ADSC)));<br />                         LCD_Initalize();                                 //inicjalizacja LCD<br />                         sprintf(wynik,&quot;D=%d&#91;cm&#93;&quot;,d);      //konwersja wyniku do tablicy char<br />                         LCD_GoTo(0, 0);                          //Ustawienie kursora w pozycji (0,0)<br />                         LCD_WriteText(&quot;ODLEGLOSC:&quot;);<br />                         LCD_GoTo(5, 1);                          //Ustawienie kursora w pozycji (5,1)<br />                         LCD_WriteText(wynik);                //Wyświetlenie wyniku<br />                         uart_puts(&quot;Odleglosc = &quot;);<br />                         uart_putlong(d,10);<br />                         uart_puts(&quot;cm&quot;);<br />                         uart_puts(&quot;  \r\n&quot;);<br />                         _delay_ms(80);                       //opóźnienie}<br />                         if(!(PINC&amp;STOP)) { break; goto poczatek; } //jeśli wcisniety stop<br />                                                                                                        //to przerwij idz do początku<br />                                                          } while (!(PIND&amp;key1));<br /> <br /> <br /> <br />                  ////POMIAR CIAGŁY   // Jesli wcisniety przycisk key2 (1&lt;&lt;PC0)<br />                          if(!(PINC&amp;key2))<br />                                  {<br /> <br />                                          do {<br />                         ADCSRA |=(1&lt;&lt;ADSC);d=odleglosc(ADCW);<br />                         while((ADCSRA &amp; (1&lt;&lt;ADSC)));<br />                         LCD_Initalize();                                 //inicjalizacja LCD<br />                         sprintf(wynik,&quot;D=%d&#91;cm&#93;&quot;,d);      //konwersja wyniku do tablicy char<br />                         LCD_GoTo(0, 0);                          //Ustawienie kursora w pozycji (0,0)<br />                         LCD_WriteText(&quot;ODLEGLOSC:&quot;);<br />                         LCD_GoTo(5, 1);                          //Ustawienie kursora w pozycji (5,1)<br />                         LCD_WriteText(wynik);                //Wyświetlenie wyniku<br />                         uart_puts(&quot;Odleglosc = &quot;);<br />                         uart_putlong(d,10);<br />                         uart_puts(&quot;cm&quot;);<br />                         uart_puts(&quot;  \r\n&quot;);<br />                         _delay_ms(1000);                     //opóźnienie}<br />                         if(!(PINC&amp;STOP))<br />                         { break; goto poczatek; } //jeśli wcisniety stop to przerwij idz do początku<br /> <br />                                          } while ((PINC&amp;key2));<br />                                  }<br /> <br /> <br />poczatek:<br />                  if(!(PINC&amp;STOP))<br />                                {<br />                                          LCD_Clear();<br />                                          LCD_GoTo(0, 0);                         //Ustawienie kursora w pozycji (0,0)<br />                                          LCD_WriteText(&quot;1-POM.POJ&quot;);<br />                                          LCD_GoTo(0, 1);                         //Ustawienie kursora w pozycji (0,0)<br />                                          LCD_WriteText(&quot;2-POM.CIAGLY&quot;);<br />                                 }<br /> <br />                   }<br /> <br /> <br /> <br /> <br /> <br />    }<br /> <br /> <br /> uint16_t odleglosc (uint16_t x)<br /> {<br /> <br /> <br />     if(x&gt;=1000) return 3;<br />     if((x&lt;=900)&amp;&amp;(x&gt;=816)) return 4;<br />     if((x&gt;=704)&amp;&amp;(x&lt;=816)) return 5;<br />     if((x&lt;=700)&amp;&amp;(x&gt;=608)) return 6;<br />     if((x&lt;=608)&amp;&amp;(x&gt;=540)) return 7;<br />     if((x&lt;=540)&amp;&amp;(x&gt;=480)) return 8;<br />     if((x&lt;=480)&amp;&amp;(x&gt;=430)) return 9;<br />     if((x&lt;=430)&amp;&amp;(x&gt;=395)) return 10;<br />     if((x&lt;=391)&amp;&amp;(x&gt;=368)) return 11;<br />     return 0;<br /> <br /> }[/syntax]<br />w momencie kiedy zakomentuje funkcje data=UARTReadChar(); , moge robic pomiar za pomoca microswitchy,<br />jesli tego nie zakomentuje pomiar robiony jest tylko z klawiatury.<br />Funkcja odbierająca uart wygląda następująco:<br />[syntax=c]char UARTReadChar()<br />{<br />      while(!(UCSRA &amp; (1&lt;&lt;RXC)));<br />      return UDR;<br />}[/syntax]<br /><br />Będę wdzięczny za radę i wszelką pomoc w rozwiązaniu tego problemu.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9572">matez7</a> — 14 maja 2015, o 14:32</p><hr />
]]></content>
</entry>
</feed>