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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-05T23:05:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7663&amp;mode</id>
<entry>
<author><name><![CDATA[Jacentyg1990]]></name></author>
<updated>2014-07-05T23:05:58+01:00</updated>
<published>2014-07-05T23:05:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86707#p86707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86707#p86707"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86707#p86707"><![CDATA[
Dziękuję wszystkim za pomoc, zgodnie z podpowiedzią kolegi jacekk232 udało mi się wszystko wykonać i hula <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=2567">Jacentyg1990</a> — 5 lip 2014, o 23:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[stachu]]></name></author>
<updated>2014-07-04T22:51:23+01:00</updated>
<published>2014-07-04T22:51:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86625#p86625</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86625#p86625"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86625#p86625"><![CDATA[
Cześć<br />Czy przypadkiem nierobisz ultradźwiękowe go skanera 3D ?<br />Oczywiście jeśli możesz powiedzieć bo wygląda to mi na wyciąganie współrzędnych i lądowaniem do STL-a ?<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=72">stachu</a> — 4 lip 2014, o 22:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-07-04T20:43:58+01:00</updated>
<published>2014-07-04T20:43:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86616#p86616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86616#p86616"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86616#p86616"><![CDATA[
<div class="quotetitle">mokrowski napisał(a):</div><div class="quotecontent"><br />Jak jeszcze raz umieścisz kod bez syntax C, to zrobię laleczkę vodoo z twoim inicjałem i będę kłuł szpilkami ;-/<br /></div><br /><br />dobre dobre tego jeszcze nie było<br /><br />sorry za offtop ale nie mogłem się powstrzymać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> bym mógł postawił bym flaszkę <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=1628">majster</a> — 4 lip 2014, o 20:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-07-04T18:13:18+01:00</updated>
<published>2014-07-04T18:13:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86613#p86613</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86613#p86613"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86613#p86613"><![CDATA[
Tak chodzi o tą funkcję. A chodziło mi o taką modyfikację<br />[syntax=c]//funkcja wyświetlająca liczby 32-bitowe ze znakiem<br />//czyli ujemne i dodatnie<br />void lcd_long(int32_t val)<br />{<br />char bufor&#91;17&#93;;<br />lcd_str( ltoa(val, bufor, 10) );<br />}<br /><br />//funkcja wyświetlająca liczby 32-bitowe bez znaku<br />//czyli dodatnie<br />void lcd_ulong(uint32_t val)<br />{<br />char bufor&#91;17&#93;;<br />lcd_str( ultoa(val, bufor, 10) );<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 4 lip 2014, o 18:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jacentyg1990]]></name></author>
<updated>2014-07-04T17:51:43+01:00</updated>
<published>2014-07-04T17:31:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86610#p86610</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86610#p86610"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86610#p86610"><![CDATA[
Czy mówimy o tej funkcji:<br />[syntax=c]void lcd_int(int val)<br />{<br />char bufor&#91;17&#93;;<br />lcd_str( itoa(val, bufor, 10) );<br />}[/syntax]<br />Jeśli tak to proszę o pomoc w jej modyfikacji bo nie wiem gdzie te zakresy należy pozmieniać. z Góry dziękuję za pomoc.<br />Jeszcze mam jedno pytanie:<br />mam za zadanie pomnożyć liczbę 100 przez sqrt(6). Wynik który wyświetlam to 200. Czy jest możliwe, żebym wyświetlał wynik 244 na wyświetlaczu lcd?<br />Używałem typu float i niestety nic to nie dało...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2567">Jacentyg1990</a> — 4 lip 2014, o 17:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-07-04T16:35:15+01:00</updated>
<published>2014-07-04T16:35:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86608#p86608</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86608#p86608"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86608#p86608"><![CDATA[
Jeśli używasz funkcji lcd_int() z Bluebooka to funkcja ta poprawnie wyświetla liczby o wartości od −32 768 do +32 767, czyli liczby 16-bitowe ze znakiem int16_t. <br /><br />Jeśli chcesz wyświetlać liczby 32-bitowe to musisz albo lekko zmodyfikować funkcję lcd_int() albo napisać nową np. lcd_long(). Wystarczy, że w funkcji lcd_int() zmienisz <strong>itoa</strong> na:<br /><strong>ltoa</strong> dla liczb z zakresu −2 147 483 648 — +2 147 483 647 czyli int32_t<br /><strong>ultoa</strong> dla liczb z zakresu 0 — +4 294 967 295 czyli uint32_t.<br /><br />Jeszcze należało by zmienić typ przekazywanego argumentu z int na uint32_t albo int32_t.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 4 lip 2014, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jacentyg1990]]></name></author>
<updated>2014-07-04T15:07:27+01:00</updated>
<published>2014-07-04T15:07:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86607#p86607</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86607#p86607"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86607#p86607"><![CDATA[
Z moich obserwacji wynika, że wyświetlacz wyświetla tylko pierwsze 16 bitów pełnej 32-bitowej liczby. Istnieje możliwość uzyskania pełnej 32 bitowej liczby na LCD?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2567">Jacentyg1990</a> — 4 lip 2014, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2014-07-04T09:19:26+01:00</updated>
<published>2014-07-04T09:19:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86591#p86591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86591#p86591"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86591#p86591"><![CDATA[
W jakimś moim przykładowym programie dałem po 2 średniki i nic. Zero błędów nawet jak dałem ich po 5 w odstępach. W asm są one wyznacznikami komentarza więc w C może jest podobnie. Ale być może przez nie program może nie zadziałać właściwie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 4 lip 2014, o 09:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-07-04T06:23:28+01:00</updated>
<published>2014-07-04T06:23:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86587#p86587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86587#p86587"/>
<title type="html"><![CDATA[Re: Odp: Problem z wymnożeniem liczb sczytanych z czujnika H]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86587#p86587"><![CDATA[
Panowie a kod się wam kompiluje?<br /><br />Przecie tu są 2x ;;<br /><br />volatile uint16_t time1 = 0, time2 = 0, i = 0;;<br /><br />Powinien być błąd kompilacji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 4 lip 2014, o 06:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2014-07-03T23:17:27+01:00</updated>
<published>2014-07-03T23:17:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86581#p86581</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86581#p86581"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86581#p86581"><![CDATA[
Zobacz jakie masz typy zmiennych p,r są typami uint32_t a powiedz mi jaką największa liczbę można podać na lcd_int(p); lcd_int(r); ?? Hmm dodaj operatory rzutowania przy wyliczaniu tych skomplikowanych wzorów. Zainteresuj się UL <!-- m --><a class="postlink" href="http://atnel.pl/domyslna-promocja-do-typu-int.html" >http://atnel.pl/domyslna-promocja-do-typu-int.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 3 lip 2014, o 23:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nondzu]]></name></author>
<updated>2014-07-03T22:49:26+01:00</updated>
<published>2014-07-03T22:49:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86579#p86579</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86579#p86579"/>
<title type="html"><![CDATA[Re: Problem z wymnożeniem liczb sczytanych z czujnika HC-SR0]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86579#p86579"><![CDATA[
wpisz kod w  syntax c . <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> trochę lepiej to wygląda  i lepiej się go analizuje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />[syntax=c]#define F_CPU 11059200UL<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;lcd/lcd44780.h&quot;<br />#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;math.h&gt;<br /><br />#define KEY_1 (1&lt;&lt;PC1) //klawisz 1<br />#define KEY_2 (1&lt;&lt;PC2) //klawisz 2<br />#define TRIGER_1 (1&lt;&lt;PD0) //pin wyzwalaj�cy 1<br />#define TRIGER_2 (1&lt;&lt;PD1) //pin wyzwalaj�cy 2<br />#define ECHO_1 (1&lt;&lt;PD2) //przerwanie zewn�trzne INT0<br />#define ECHO_2 (1&lt;&lt;PD3) //przerwanie zewn�trzne INT1<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz);<br />void triger(int x);<br />volatile uint16_t time1 = 0, time2 = 0, i = 0;;<br />volatile int8_t flaga1 = -1, flaga2 = -1, trigger_flag = 0,flaga = 0; <br /><br />uint16_t x = 52; //odleg�o�� pomi�dzy dwoma czujnikami, podstawa tr�jk�ta<br />uint16_t y; //odleg�o�� czujnika A od punktu<br />uint16_t z; //odleg�o�� czujnika B od punktu<br />uint16_t h,b,c; //p-po�owa obwodu powsta�ego tr�jk�ta, r-wz�r Herona na pole tr�jk�ta, <br />uint32_t r,p; //h-wysoko�� tr�jk�ta ze wzoru P=(x*h)/2, b-odleg�o�� pomi�dzy czujnikiem A <br />//i miejscem przeci�cia wysoko�ci h i podstawy tr�jk�ta<br /><br /><br /><br />int main(void)<br />{<br />DDRC &amp;= ~((KEY_1) | (KEY_2));<br />PORTC |= ((KEY_1) | (KEY_2));<br /><br />DDRC |= 1&lt;&lt;PC3;<br />PORTC &amp;= ~(1&lt;&lt;PC3);<br /><br />DDRD |= ((TRIGER_1) | (TRIGER_2));<br />PORTD &amp;= ~((TRIGER_1) | (TRIGER_2));<br /><br />DDRD &amp;= ~((ECHO_1) | (ECHO_2));<br />PORTD |= ((ECHO_1) | (ECHO_2));<br /><br />//Ustawienia rejestru przerwania INT0<br />MCUCR |= (1&lt;&lt;ISC00) | (0&lt;&lt;ISC01); //Jakiekolwiek zbocze generuje przerwanie<br />GICR |= (1&lt;&lt;INT0); //Bit odblokowuj�cy zewn�trzne przerwanie INT0<br />//Ustawienia rejestru przerwania INT1<br />MCUCR |= (1&lt;&lt;ISC10) | (0&lt;&lt;ISC11); //Jakiekolwiek zbocze generuje przerwanie<br />GICR |= (1&lt;&lt;INT1); //Bit odblokowuj�cy zewn�trzne przerwanie INT1<br /><br />//Ustawienia Timera TC0 - zliczanie co 10us<br />TCCR0 |= (1&lt;&lt;WGM01);<br />TCCR0 |= (1&lt;&lt;CS00); //bez preskalera<br />OCR0 = 110; //dzielnik dla 11.0592 MHz<br />TIMSK |= (1&lt;&lt;OCIE0);<br /><br />sei(); //globalne zezwolenie na przerwania<br />lcd_init();<br /><br />while(1)<br />{<br /><br />if(klawisz_wcisniety(KEY_1))<br />{<br />time1 = 0; //zerowanie pomiaru w momencie przycisniecia przycsku<br />flaga1 = -1; //zerowanie flagi pomiaru<br />triger(TRIGER_1); //wyzwolenie<br /><br />_delay_ms(100); //�eby sie echa z 2 czujnik�w nie nak�ada�y na siebie<br /><br />time2 = 0;<br />flaga2 = -1;<br />triger(TRIGER_2);<br /><br />_delay_ms(100);<br />y = time1*10 / 58; //powinno by� 5,8 ale to jest zaokraglenie, takt procesora jest co 10 us<br />z = time2*10 / 58;<br /><br />p=0.5*(x+y+z);<br />r=p*(p-x)*(p-y)*(p-z);<br /><br />h=(2*r)/x;<br />b=sqrt((y*y)-(h*h));<br />c = 52 - b;<br /><br />}<br />// wy�wietlanie wyniku na ekranie<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;a=&quot;);<br />lcd_locate(0,2);<br />lcd_int(y);<br />lcd_locate(0,5);<br />lcd_str(&quot;cm&quot;);<br />lcd_locate(0,8);<br />lcd_str(&quot;b=&quot;);<br />lcd_locate(0,10);<br />lcd_int(z);<br />lcd_locate(0,13);<br />lcd_str(&quot;cm&quot;);<br /><br />/*<br />lcd_locate(1,0);<br />lcd_str(&quot;X=&quot;);<br />lcd_locate(1,2);<br />lcd_int(h);<br /><br />lcd_locate(1,8);<br />lcd_str(&quot;Y=&quot;);<br />lcd_locate(1,10);<br />lcd_int(c);<br />*/<br />lcd_locate(1,0);<br />lcd_str(&quot;p=&quot;);<br />lcd_locate(1,2);<br />lcd_int(p);<br /><br />lcd_locate(1,6);<br />lcd_str(&quot;Y=&quot;);<br />lcd_locate(1,9);<br />lcd_int(r);<br />_delay_ms(10);<br /><br />}<br />}<br />//----------------------PRZERWANIA<br />ISR(INT0_vect)<br />{<br />flaga1 *= -1; // ustawianie flagi do pomiaru czasu time1<br />}<br /><br />ISR(INT1_vect)<br />{<br />flaga2 *= -1; // ustawianie flagi do pomiaru czasu time2<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />trigger_flag = 1; //flaga do odmierzania 10 us<br /><br /><br />if(flaga1==1)<br />{<br />time1++;<br />}<br /><br />if(flaga2==1)<br />{<br />time2++;<br />}<br /><br />}<br /><br />/*ISR(TIMER2_COMP_vect)<br />{<br />i++;<br />if(i&gt;=500)<br />{<br />flaga = 1;<br />//PORTC ^= (1&lt;&lt;PC3);<br />i = 0;<br />}<br /><br /><br />}*/<br /><br /><br />//----------------------FUNKCJE<br />void triger(int x)<br />{<br />PORTD &amp;= ~(x); //zerowanie portu D<br />trigger_flag = 0; //zerowanie trigger flag, miejsce <br />while(!trigger_flag);<br /><br />PORTD |= x;<br />trigger_flag = 0;<br />while(!trigger_flag);<br /><br />PORTD &amp;= ~(x);<br /><br />}<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz){<br />if (!(PINC &amp; klawisz)) {<br />_delay_ms(120);<br />if (!(PINC &amp; klawisz)){<br />return 1;<br />}<br />}<br />return 0;<br /><br />}[/syntax]<br /><br /><br /><br /><br />ps. chodź niewiele sie znam na tym ale pierwsze co to sprawdziłbym czy wynik jest w stanie się zmieścić w zmiennej &quot;<strong>r</strong>&quot; typu uint32_t<br />bo jeżeli jeszcze zmienna &quot;p&quot; jest mnożona a ona też jest typu uint32_t i to przez zmienne typu uint16_t to wynik może nie zmieścić się w zmiennej &quot;r&quot;. Taka moja sugestia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1672">Nondzu</a> — 3 lip 2014, o 22:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jacentyg1990]]></name></author>
<updated>2014-07-04T17:52:47+01:00</updated>
<published>2014-07-03T22:42:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86578#p86578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86578#p86578"/>
<title type="html"><![CDATA[Problem z wymnożeniem liczb sczytanych z czujnika HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7663&amp;p=86578#p86578"><![CDATA[
Witam,<br />Mam problem, próbuje dojść co może być przyczyną i niestety już nie daję rady... Spróbuję go opisać: mam zaprogramowane 2 czujniki ultradźwiękowe na atmega 32. Zczytują one odległość od punktu(w kodzie są to wartości y i z). p jest połową obwodu trójkąta, x-wartość stała. W momencie kiedy wyświetlam osobno wartości na wyswietlaczu: p-y, p-z uzyskuję dobre wartości(dodatnie). Problem pojawia się gdy chcę dokonać iloczynu liczb:<br />r=p*(p-x)*(p-y)*(p-z);<br />Wychodzą wyniki nieprawdziwe, ujemne co jest głęboką nieprawdą. Czy miałby ktoś jakieś pomysły na to jak rozwiązać ten problem? Kod poniżej:<br /><br /><br />[syntax=c]#define F_CPU 11059200UL<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;lcd/lcd44780.h&quot;<br />#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;math.h&gt;<br /><br />#define KEY_1 (1&lt;&lt;PC1)                  //klawisz 1<br />#define KEY_2 (1&lt;&lt;PC2)                  //klawisz 2<br />#define TRIGER_1 (1&lt;&lt;PD0)         //pin wyzwalaj�cy 1<br />#define TRIGER_2 (1&lt;&lt;PD1)         //pin wyzwalaj�cy 2<br />#define ECHO_1 (1&lt;&lt;PD2)         //przerwanie zewn�trzne INT0<br />#define ECHO_2 (1&lt;&lt;PD3)         //przerwanie zewn�trzne INT1<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz);<br />void triger(int x);<br />volatile uint16_t time1 = 0, time2 = 0, i = 0;;<br />volatile int8_t flaga1 = -1, flaga2 = -1, trigger_flag = 0,flaga = 0; <br /><br />uint16_t x = 52;           //odleg�o�� pomi�dzy dwoma czujnikami, podstawa tr�jk�ta<br />uint16_t y;                //odleg�o�� czujnika A od punktu<br />uint16_t z;                //odleg�o�� czujnika B od punktu<br />uint16_t  h,b,c;    //p-po�owa obwodu powsta�ego tr�jk�ta, r-wz�r Herona na pole tr�jk�ta, <br />uint32_t r,p;  //h-wysoko�� tr�jk�ta ze wzoru P=(x*h)/2, b-odleg�o�� pomi�dzy czujnikiem A <br />//i miejscem przeci�cia wysoko�ci h i podstawy tr�jk�ta<br /><br /><br /><br />int main(void)<br />{<br />    DDRC &amp;= ~((KEY_1) | (KEY_2));<br />    PORTC |= ((KEY_1) | (KEY_2));<br /><br />DDRC |= 1&lt;&lt;PC3;<br />PORTC &amp;= ~(1&lt;&lt;PC3);<br />    <br />    DDRD |= ((TRIGER_1) | (TRIGER_2));<br />    PORTD &amp;= ~((TRIGER_1) | (TRIGER_2));<br />    <br />    DDRD &amp;= ~((ECHO_1) | (ECHO_2));<br />    PORTD |= ((ECHO_1) | (ECHO_2));<br />    <br />    //Ustawienia rejestru przerwania INT0<br />    MCUCR |= (1&lt;&lt;ISC00) | (0&lt;&lt;ISC01);     //Jakiekolwiek zbocze generuje przerwanie<br />    GICR |= (1&lt;&lt;INT0);                     //Bit odblokowuj�cy zewn�trzne przerwanie INT0<br />    //Ustawienia rejestru przerwania INT1<br />    MCUCR |= (1&lt;&lt;ISC10) | (0&lt;&lt;ISC11);     //Jakiekolwiek zbocze generuje przerwanie<br />    GICR |= (1&lt;&lt;INT1);                     //Bit odblokowuj�cy zewn�trzne przerwanie INT1<br />    <br />    //Ustawienia Timera TC0 - zliczanie co 10us<br />    TCCR0 |= (1&lt;&lt;WGM01);<br />    TCCR0 |= (1&lt;&lt;CS00); //bez preskalera<br />    OCR0 = 110;  //dzielnik dla 11.0592 MHz<br />    TIMSK |= (1&lt;&lt;OCIE0);<br />    <br />    sei();                 //globalne zezwolenie na przerwania<br />    lcd_init();<br /><br />while(1)<br />{<br /><br />if(klawisz_wcisniety(KEY_1))<br />{<br />time1 = 0;//zerowanie pomiaru w momencie przycisniecia przycsku<br />flaga1 = -1;//zerowanie flagi pomiaru<br />triger(TRIGER_1);//wyzwolenie<br /><br />_delay_ms(100);//�eby sie echa z 2 czujnik�w nie nak�ada�y na siebie<br /><br />time2 = 0;<br />flaga2 = -1;<br />triger(TRIGER_2);<br /><br />_delay_ms(100);<br />y = time1*10 / 58;//powinno by� 5,8 ale to jest zaokraglenie, takt procesora jest co 10 us<br />z = time2*10 / 58;<br /><br /> p=0.5*(x+y+z);<br /> r=p*(p-x)*(p-y)*(p-z);<br /><br /> h=(2*r)/x;<br /> b=sqrt((y*y)-(h*h));<br /> c = 52 - b;<br /><br />}<br />// wy�wietlanie wyniku na ekranie<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;a=&quot;);<br />lcd_locate(0,2);<br />lcd_int(y);<br />lcd_locate(0,5);<br />lcd_str(&quot;cm&quot;);<br />lcd_locate(0,8);<br />lcd_str(&quot;b=&quot;);<br />lcd_locate(0,10);<br />lcd_int(z);<br />lcd_locate(0,13);<br />lcd_str(&quot;cm&quot;);<br /><br />/*<br />lcd_locate(1,0);<br />lcd_str(&quot;X=&quot;);<br />lcd_locate(1,2);<br />lcd_int(h);<br /><br />lcd_locate(1,8);<br />lcd_str(&quot;Y=&quot;);<br />lcd_locate(1,10);<br />lcd_int(c);<br />*/<br />lcd_locate(1,0);<br />lcd_str(&quot;p=&quot;);<br />lcd_locate(1,2);<br />lcd_int(p);<br /><br />lcd_locate(1,6);<br />lcd_str(&quot;Y=&quot;);<br />lcd_locate(1,9);<br />lcd_int(r);<br />_delay_ms(10);<br /><br />}<br />}<br />//----------------------PRZERWANIA<br />ISR(INT0_vect)<br />{<br />flaga1 *= -1; // ustawianie flagi do pomiaru czasu time1<br />}<br /><br />ISR(INT1_vect)<br />{<br />flaga2 *= -1; // ustawianie flagi do pomiaru czasu time2<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />trigger_flag = 1; //flaga do odmierzania 10 us<br /><br /><br />if(flaga1==1)<br />{<br />time1++;<br />}<br /><br />if(flaga2==1)<br />{<br />time2++;<br />}<br /><br />}<br /><br />/*ISR(TIMER2_COMP_vect)<br />{<br />i++;<br />if(i&gt;=500)<br />{<br />flaga = 1;<br />//PORTC ^= (1&lt;&lt;PC3);<br />i = 0;<br />}<br /><br /><br />}*/<br /><br /><br />//----------------------FUNKCJE<br />void triger(int x)<br />{<br />PORTD &amp;= ~(x);//zerowanie portu D<br />trigger_flag = 0;//zerowanie trigger flag, miejsce <br />while(!trigger_flag);<br /><br />PORTD |= x;<br />trigger_flag = 0;<br />while(!trigger_flag);<br /><br />PORTD &amp;= ~(x);<br /><br />}<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz){<br />if (!(PINC &amp; klawisz)) {<br />_delay_ms(120);<br />if (!(PINC &amp; klawisz)){<br />return 1;<br />}<br />}<br />return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2567">Jacentyg1990</a> — 3 lip 2014, o 22:42</p><hr />
]]></content>
</entry>
</feed>