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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-03-02T08:13:54+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14697&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-02T08:13:54+01:00</updated>
<published>2016-03-02T08:13:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155210#p155210</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155210#p155210"/>
<title type="html"><![CDATA[Re: Problem nierozpoznawanej krańcówki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155210#p155210"><![CDATA[
Witam<br /><div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Aha, popraw również komentarze - niektóre z nich obecnie wprowadzają czytelnika w błąd<br /></div><br />...no ja też zacząłem patrzeć, ale się wysypałem.<br />Druga sprawa to dla czytelności ( sugeruję osobne pliki ) to przynajmniej przegrupuj je aby analizując nie trzeba było skakać od początku do końca i z powrotem. I tak jak pisali koledzy - cztery wyłączniki z których każdy może się włączyć w dowolnej chwili sprawdzane w odstępach &quot;_delay_ &quot; to jeden z gorszych pomysłów.<br />W.g mnie jest niemal nieprawdopodobne aby dwie krańcówki w tym samym czasie zostały zainicjowane ( w tym samym czasie - mam na myśli czas/szybkość w jakim uC sprawdza ich stan ), a stąd już o krok od wykorzystania &quot;Mirkowego&quot; kodu do obsługi klawiszy pilota - gotowe funkcje klawisz/reakcja_na_jego_naciśnięcie. <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 2 mar 2016, o 08:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2016-03-02T07:55:02+01:00</updated>
<published>2016-03-02T07:55:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155208#p155208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155208#p155208"/>
<title type="html"><![CDATA[Re: Problem nierozpoznawanej krańcówki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155208#p155208"><![CDATA[
Kolego z tymi delayami to będziesz miał tak że raz coś ci działa raz nie. Bo przez nie zatrzymujesz program . Zainwestuj w timera <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 2 mar 2016, o 07:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mepfisto]]></name></author>
<updated>2016-03-01T23:13:29+01:00</updated>
<published>2016-03-01T23:13:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155193#p155193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155193#p155193"/>
<title type="html"><![CDATA[Problem nierozpoznawanej krańcówki]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14697&amp;p=155193#p155193"><![CDATA[
Witam.<br />Mam problem z krańcówką, a raczej z czynnością którą powinna inicjować, a tego nie robi (a przynajmniej nie zawsze).<br />Otóż mam 4 krańcówki wpięte pod porty PB1-PB4. 3 krańcówki działają w dowolnym momencie (sprawdzam sobie to na terminal po RS232) natomiast jedna z nich KR_D pod PB3 nie reaguje i w konsekwencji nie załącza polecenia DC2_LEWO;. Krańcówki są sprawne, porty uC także, błąd prawdopodobnie jest gdzieś wewnątrz funkcji szukaj().<br />Zdarza się, że po kilkukrotnym jej włączeniu w końcu zaskoczy, a czasami w ogóle. <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;uart.h&quot;<br />#include &quot;adc.h&quot;<br /><br /><br />//uint16_t getADC0( uint16_t kanal0 );<br />//uint16_t getADC1( uint8_t kanal1 );<br />//uint16_t getADC2( uint8_t kanal2 );<br />//uint16_t getADC3( uint8_t kanal3 );<br />//uint16_t getADC4( uint8_t kanal4 );<br /><br />void dispaly_on_rs232(void);<br /><br /><br />/*<br /><br />======= Silnik górny (góra - dół)============<br /><br /> * panel w góre DC1_P<br /> * panel w dół  DC1_L<br /><br />======= Silnik dolny (lewno - prawo)=========<br /> * panel w lewo DC2_L<br /> * panel w prawo DC2_P<br /><br /> */<br /><br />// definicje pinów Krańcówek<br />#define Krancowka_gora (1&lt;&lt;PB4)<br />#define KR_G_DOWN !(PINB &amp; Krancowka_gora)<br />#define Krancowka_dol (1&lt;&lt;PB3)<br />#define KR_D_DOWN !(PINB &amp; Krancowka_dol)<br />#define Krancowka_lewo (1&lt;&lt;PB2)<br />#define KR_L_DOWN !(PINB &amp; Krancowka_lewo)<br />#define Krancowka_prawo (1&lt;&lt;PB1)<br />#define KR_P_DOWN !(PINB &amp; Krancowka_prawo)<br /><br /><br />uint8_t KR_G(void);// deklaracja funkcji<br />uint8_t KR_D(void);// deklaracja funkcji<br />uint8_t KR_L(void);// deklaracja funkcji<br />uint8_t KR_P(void);// deklaracja funkcji<br /><br />// zmienna tolerancja<br />int tolerancja = 150;<br /><br />//zmienna do której będzie wstawiany wynik z fotorezystorów<br />volatileuint16_t R1=0;    //Fotorezystor Lewy Górny<br />volatileuint16_t R2=0;    //Fotorezystor Prawy Górny<br />volatileuint16_t R3=0;    //Fotorezystor Lewy Dolny<br />volatileuint16_t R4=0;    //Fotorezystor Prawy Dolny<br /><br />//Uśrednione wyniki z fotorezystorów - pogrupowane w zależności od kierunku sterowania<br />volatileuint16_t R12=0;   //Fotorezystory Górne<br />volatileuint16_t R34=0;   //Fotorezystory Dolne<br />volatileuint16_t R13=0;   //Fotorezystory Lewe<br />volatileuint16_t R24=0;   //Fotorezystory Prawe<br /><br />// definicje pinów sterujących<br />#define DC1_L PC5  //panel w dół<br />#define DC1_P PB0  //panel w góre<br />#define DC2_L PD2  //panel w lewo<br />#define DC2_P PD3  //panel w prawo<br /><br />//definicje poleceń sterujących pracą silników<br />//Silnik 1<br />#define DC1_DOL PORTB &amp;= ~(1&lt;&lt;DC1_P); PORTC |= (1&lt;&lt;DC1_L)   //panel dół<br />#define DC1_GORA PORTB |= (1&lt;&lt;DC1_P); PORTC &amp;= ~(1&lt;&lt;DC1_L)  //panel góra<br />#define DC1_STOP PORTC &amp;= ~(1&lt;&lt;DC1_L); PORTB &amp;= ~(1&lt;&lt;DC1_P)<br /><br />//Silnik 2<br />#define DC2_LEWO PORTD &amp;= ~(1&lt;&lt;DC2_P); PORTD |= (1&lt;&lt;DC2_L)   //panel lewo<br />#define DC2_PRAWO PORTD |= (1&lt;&lt;DC2_P); PORTD &amp;= ~(1&lt;&lt;DC2_L)   //panel prawo<br />#define DC2_STOP PORTD &amp;= ~(1&lt;&lt;DC2_L); PORTD &amp;= ~(1&lt;&lt;DC2_P)<br /><br /><br />//funkcja do wyświetlania napięcia na LCD<br />void display_on_lcd()<br />{<br />//zmienne do przechowywania wyniku<br />uint32_t wynik; //wynik po przemnożeniu<br />uint32_t pm;   //wynik z ADC (0-1024)<br />uint8_t cz_d;  //częsc całkowita<br />uint8_t cz_u;  //częśc ułamkowa<br /><br />//funkcja wyświetlania napięcia z panelu na LCD<br />lcd_cls();          // kasowanie zawartości LCD<br />pm = getADC(0, 0xF0);     // odczyt wart ADC<br />wynik = pm * 5029;   // 107*47 =0,00107 (1,1/1024) * 4,7 (współczynnik k (r1+r2)/r) * 1000000<br />cz_d = wynik/1000000;<br />cz_u = (wynik/100) % 100;<br />lcd_str( &quot;Napiecie ogniwa&quot;);<br />lcd_locate(1,5);  //ustawienie w drugim wierszu<br />lcd_int(cz_d);<br />lcd_char('.');<br />lcd_int( cz_u );<br />lcd_str( &quot; V&quot;);<br />_delay_ms(500);<br />}<br /><br /><br />void reset_pomiar()<br />{<br />R1 = 0;<br />R2 = 0;<br />R3 = 0;<br />R4 = 0;<br />}<br /><br /><br />void pomiar()<br />{<br /><br />R1 = getADC( PC1, 0xF1 );<br />R2 = getADC( PC2, 0xF2 );<br />R3 = getADC( PC3, 0xF3 );<br />R4 = getADC( PC4, 0xF4 );<br /><br />//Uśrednione wyniki pomiarów z fotorezystorów<br />R12 = (R1+R2)/2;<br />R34 = (R3+R4)/2;<br />R13 = (R1+R3)/2;<br />R24 = (R2+R4)/2;<br />}<br /><br /><br />// funkcja do sterowania panelem - podążanie za słońcem<br />void szukaj()<br />{<br /><br />reset_pomiar();<br />pomiar();<br /><br />//Jeśli krańcówka górna nie naciśnięta i lewa naciśnięta mierz ADC i panel w górę<br />if (KR_G() &amp;&amp; !KR_L())<br />{<br />if((( R12 &gt; (R34+tolerancja)) &amp;&amp; KR_G() ))  //górne &gt; dolne<br />{<br />DC1_GORA;    //panel w góre<br />_delay_ms (80);<br />DC1_STOP;<br />}<br />}<br /><br /><br />//Jeśli krańcówka górna naciśnięta i lewa naciśnięta obracaj panel w prawo do naciśnięcia prawej krańcówki<br />if (!KR_G() &amp;&amp; !KR_L())<br />{<br />do<br />{<br />DC2_PRAWO; //panel w prawo<br />}while(KR_P());<br />DC2_STOP;<br />}<br /><br /><br />//Jeśli krańcówka prawa naciśnięta mierz ADC i panel w dół do naciśnięcia dolnej krańcówki<br />if (!KR_P() )<br />{<br /><br />do<br />{<br />reset_pomiar();<br />pomiar();<br />if((( R34 &gt; (R12+tolerancja)) &amp;&amp; KR_D() )) //dolne &gt; górne<br />{<br />DC1_DOL;// panel w dół<br />_delay_ms (80);<br />DC1_STOP;<br />}<br />}while(!KR_D());<br />DC1_STOP;<br />}<br /><br />reset_pomiar();<br />pomiar();<br />//Jeśli krańcówka prawa i dolna naciśnięta panel w prawo do naciśnięcia lewej krańcówki<br />if ( !KR_P() &amp;&amp; !KR_D() )<br />{<br />do<br />{<br />DC2_LEWO;  //panel w lewo<br />}<br />while(KR_L());<br />DC2_STOP;<br />}<br /><br />}<br /><br />//----------------------------------  main  ------------------------------------------------------<br /><br />int main(void) {<br /><br /><br />//inicjalizacja UART<br />USART_init();<br />//inicjalizacja LCD<br />lcd_init();<br />//inicjalizacja ADC<br />ADC_Init();<br /><br />// ustawiamy piny sterujące L293D jako wyjścia<br />DDRD |= (1&lt;&lt;DC2_L)|(1&lt;&lt;DC2_P);  //ustawienie  pinów na WYJSCIE<br />DDRC |= (1&lt;&lt;DC1_L);<br />DDRB |= (1&lt;&lt;DC1_P);<br /><br />/*===============================================================<br />//zmienna do której będzie wstawiany wynik z fotorezystorów<br />uint16_t R1=0;    //Fotorezystor Lewy Górny<br />uint16_t R2=0;    //Fotorezystor Prawy Górny<br />uint16_t R3=0;    //Fotorezystor Lewy Dolny<br />uint16_t R4=0;    //Fotorezystor Prawy Dolny<br /><br />//Uśrednione wyniki z fotorezystorów - pogrupowane w zależności od kierunku sterowania<br />uint16_t R12;   //Fotorezystory Górne<br />uint16_t R34;   //Fotorezystory Dolne<br />uint16_t R13;   //Fotorezystory Lewe<br />uint16_t R24;   //Fotorezystory Prawe<br />=================================================================*/<br /><br />//Ustawienie pinów krańcówek<br />DDRB &amp;= ~Krancowka_gora;// kierunek pinu PB4 - wejściowy<br />DDRB &amp;= ~Krancowka_dol;// kierunek pinu PB3 - wejściowy<br />DDRB &amp;= ~Krancowka_lewo;// kierunek pinu PB2 - wejściowy<br />DDRB &amp;= ~Krancowka_prawo;// kierunek pinu PB1 - wejściowy<br />PORTB |= Krancowka_gora;// podciągnięcie pinu do VCC<br />PORTB |= Krancowka_dol;// podciągnięcie pinu do VCC<br />PORTB |= Krancowka_lewo;// podciągnięcie pinu do VCC<br />PORTB |= Krancowka_prawo;// podciągnięcie pinu do VCC<br /><br /><br />// ---------------------------------  while --------------------------------------------------<br /><br />while(1)<br />{<br /><br />szukaj();<br />display_on_lcd();<br />dispaly_on_rs232();<br /><br />}<br />}<br /><br /><br /><br />void dispaly_on_rs232()<br />{<br /><br />char str&#91;10&#93;;<br /><br />itoa(R1,str,10);<br />USART_putstring(str);<br />USART_putstring(&quot;            &quot;);<br />itoa(R2,str,10);<br />USART_putstring(str);<br />USART_putstring(&quot;            &quot;);<br />itoa(R3,str,10);<br />USART_putstring(str);<br />USART_putstring(&quot;            &quot;);<br />itoa(R4,str,10);<br />USART_putstring(str);<br />USART_putstring(&quot;                              &quot;);<br /><br /><br />itoa(R12,str,10);<br />USART_putstring(str);<br />USART_putstring(&quot;      &quot;);<br /><br />itoa(R34,str,10);<br />USART_putstring(str);<br />USART_putstring(&quot;      &quot;);<br /><br /><br />USART_putstring(&quot;\n\r&quot;);<br /><br />}<br /><br />// definicje funkcji sprawdzającej włączenie krańcówek<br /><br /><br />//DÓŁ<br />uint8_t KR_D(void)<br />{<br />if( KR_G_DOWN )// Krańcówka dolna włączona ?<br />{<br />_delay_ms(5);// czas drgań styków<br />if( KR_G_DOWN )<br />{<br />USART_putstring(&quot;KR_D&quot;);<br />USART_putstring(&quot;\n\r&quot;);<br />return 0;   // jeśli włączona?  zakończ funkcję - rezultat = 1<br />}<br />}<br /><br />return 1;// jeśli nie włączona, zakończ funkcję, rezultat = 0<br />}<br /><br /><br />//GÓRA<br />uint8_t KR_G(void)<br />{<br />if( KR_D_DOWN )// Krańcówka górna włączona ?<br />{<br />_delay_ms(5);// czas drgań styków<br />if( KR_D_DOWN )<br />{<br />USART_putstring(&quot;KR_G&quot;);<br />USART_putstring(&quot;\n\r&quot;);<br />return 0;   // jeśli włączona?  zakończ funkcję - rezultat = 1<br />}<br /><br />}<br /><br />return 1;// jeśli nie włączona, zakończ funkcję, rezultat = 0<br />}<br /><br /><br />//LEWA<br />uint8_t KR_L(void)<br />{<br />if( KR_L_DOWN )// Krańcówka lewa włączona ?<br />{<br />_delay_ms(5);// czas drgań styków<br />if( KR_L_DOWN )<br />{<br />USART_putstring(&quot;KR_L&quot;);<br />USART_putstring(&quot;\n\r&quot;);<br />return 0;   // jeśli włączona?  zakończ funkcję - rezultat = 1<br />}<br />}<br /><br />return 1;// jeśli nie włączona, zakończ funkcję, rezultat = 0<br />}<br /><br /><br />//PRAWA<br />uint8_t KR_P(void)<br />{<br />if( KR_P_DOWN )// Krańcówka lewa włączona ?<br />{<br />_delay_ms(5);// czas drgań styków<br />if( KR_P_DOWN )<br />{<br />USART_putstring(&quot;KR_P&quot;);<br />USART_putstring(&quot;\n\r&quot;);<br />return 0;   // jeśli włączona?  zakończ funkcję - rezultat = 1<br />}<br />}<br /><br />return 1;// jeśli nie włączona, zakończ funkcję, rezultat = 0<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3688">Mepfisto</a> — 1 mar 2016, o 23:13</p><hr />
]]></content>
</entry>
</feed>