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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-03-23T22:22:08+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17948&amp;mode</id>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-03-23T22:22:08+01:00</updated>
<published>2017-03-23T22:22:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185474#p185474</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185474#p185474"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185474#p185474"><![CDATA[
W tym kodzie może i działa, ale napisanie, że == i to != działa tak samo, z założenia jest błędne.<br />A co do działania programu, jesteś pewien, że to będzie działać poprawnie? Piszesz:<br />[syntax=c]UltInfo = 1;[/syntax]I już w kolejnej linijce:<br />[syntax=c]while (UltInfo == 5)[/syntax](wartości mniej więcej te, nie sprawdzałem dokładnie). Jesteś pewien, że w tym czasie przerwanie od timera wykonało się odpowiednią ilość razy? Jakoś nie mogę rozpisać tego działanie, gdzieś mi się gubią wartości.<br />Możesz rozpisać, jak po kolei, w zamyśle, ma ten program działać?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 23 mar 2017, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zb111112]]></name></author>
<updated>2017-03-23T20:18:47+01:00</updated>
<published>2017-03-23T20:18:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185465#p185465</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185465#p185465"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185465#p185465"><![CDATA[
To zbuduj układ i zobacz, układ pracuje tak samo wolno<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15085">zb111112</a> — 23 mar 2017, o 20:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-03-23T08:49:14+01:00</updated>
<published>2017-03-23T08:49:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185414#p185414</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185414#p185414"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185414#p185414"><![CDATA[
<div class="quotetitle">zb111112 napisał(a):</div><div class="quotecontent"><br />powyższe linijki dają taki sam efekt, a więc można je stosować zamiennie.<br /></div>Nie można. Pierwsza linijka oznacza &quot;dopóki UltInfo jest równe stop&quot;, natomiast druga &quot;dopóki UltInfo jest różne od stop&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 23 mar 2017, o 08:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zb111112]]></name></author>
<updated>2017-03-22T22:37:56+01:00</updated>
<published>2017-03-22T22:37:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185397#p185397</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185397#p185397"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185397#p185397"><![CDATA[
[syntax=c]while(UltInfo == stop);[/syntax]<br />lub<br />[syntax=c]while(UltInfo != stop);[/syntax]<br />powyższe linijki dają taki sam efekt, a więc można je stosować zamiennie. Dziwne. Bardziej mnie zastanawia dlaczego ten pomiar jest wykonywany tak długo gdy dam _delay_ms(1000) (pomiar ok. raz na minutę); , a jeśli dam _delay_ms(10); to zdecydowanie szybciej (co jakąś jedną sekundę jest pomiar wyświetlany). Skąd się biorą takie duże opóźnienia? Może coś z tym przerwaniem, czy coś się zawiesza że tak długo to trwa. Może ktoś wie XD<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15085">zb111112</a> — 22 mar 2017, o 22:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2017-03-22T21:28:27+01:00</updated>
<published>2017-03-22T21:28:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185395#p185395</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185395#p185395"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185395#p185395"><![CDATA[
spróbuj może tak:<br /><br />[syntax=c]while(UltInfo != stop);[/syntax]<br /><br />i zmniejsz czas oczekiwania w pętli [syntax=c]_delay_ms(10);[/syntax]<br /><br />sprawdzałem u mnie i działa na atmega32 na 8 mhz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 22 mar 2017, o 21:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zb111112]]></name></author>
<updated>2017-03-22T20:39:58+01:00</updated>
<published>2017-03-22T20:39:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185390#p185390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185390#p185390"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185390#p185390"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;LCD/lcd.h&quot;<br /><br />#define TRIG_PORT B<br />#define TRIG 2<br />#define ECHO_PORT B<br />#define ECHO 1<br /><br />enum UltStan {trigerH = 1, trigerL, czekaj, odliczanie, stop};<br /><br />volatile uint8_t UltInfo;<br />volatile uint32_t licznikUL;<br /><br />volatile uint8_t Odleglosc;<br /><br />void UltraInit(void)<br />{<br />DDR(TRIG_PORT) |= (1&lt;&lt;TRIG);     //trig jako wyjscie<br />DDR(ECHO_PORT) &amp;= ~(1&lt;&lt;ECHO);    //echo jako wejscie<br />PORT(TRIG_PORT) &amp;= ~(1&lt;&lt;TRIG);   //stan ujemny na trig<br />PORT(ECHO_PORT) &amp;= ~(1&lt;&lt;ECHO);    //stan ujemny na echo<br /><br />TCCR2 |= (1&lt;&lt;WGM21);    //tryb CTC<br />TCCR2 |= (1&lt;&lt;CS21);     //prescaler 8<br />OCR2 = 9;<br />TIMSK |= (1&lt;&lt;OCIE2);<br />}<br /><br />uint8_t UltraPomiar(void)<br />{<br />UltInfo = trigerH;    //inicjalizacja dokonania pomiaru<br />while(UltInfo == stop);<br />return Odleglosc;     //zwraca ostatni zapamiętany wynik pomiaru<br />}<br /><br />int main(void)<br />{<br />UltraInit();<br />LcdInit();<br />sei();<br /><br />while(1)<br />{<br />CLR();<br />LcdInt(UltraPomiar());<br />if(UltInfo == stop) LCD(&quot;stop&quot;);<br />_delay_ms(1000);<br />}<br />}<br /><br /><br />ISR(TIMER2_COMP_vect)<br />{<br />if(UltInfo == trigerL) {PORT(TRIG_PORT) &amp;= ~(1&lt;&lt;TRIG); UltInfo = czekaj;}    //po 10us stan ujemny na trigerze i czekaj na echo<br />if(UltInfo == trigerH) {PORT(TRIG_PORT) |= (1&lt;&lt;TRIG); UltInfo = trigerL;}   //stan dodatni na trigerze<br /><br />if(UltInfo==czekaj &amp;&amp; (PIN(ECHO_PORT) &amp; (1&lt;&lt;ECHO))) {licznikUL = 0; UltInfo = odliczanie;}   //jeśli wykryje stan dodatni na echo to...<br />if(UltInfo == odliczanie &amp;&amp; (PIN(ECHO_PORT) &amp; (1&lt;&lt;ECHO))) licznikUL++;                   //odliczaj impulsy<br /><br />if(UltInfo==odliczanie &amp;&amp; (!(PIN(ECHO_PORT) &amp; (1&lt;&lt;ECHO))))    //jeśli stan ujemny na echo to zakończ odliczanie...<br />{UltInfo = stop; Odleglosc = (licznikUL*34)/100/2;}           //i oblicz odległośc w cm<br />}[/syntax]<br />Broszę bardzo XD, ktoś wie co może być nie tam?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15085">zb111112</a> — 22 mar 2017, o 20:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Situs]]></name></author>
<updated>2017-03-22T19:27:36+01:00</updated>
<published>2017-03-22T19:27:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185375#p185375</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185375#p185375"/>
<title type="html"><![CDATA[Re: Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185375#p185375"><![CDATA[
Pokaż cały kod razem z UltInfo, Port i reszta rzeczy oki?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14339">Situs</a> — 22 mar 2017, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zb111112]]></name></author>
<updated>2017-03-22T18:44:30+01:00</updated>
<published>2017-03-22T18:44:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185368#p185368</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185368#p185368"/>
<title type="html"><![CDATA[Problem z Ultradźwiękowym Czujnikiem Odległości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17948&amp;p=185368#p185368"><![CDATA[
Posiadam Ultradźwiękowym Czujnikiem Odległości HC-SR04. Podłączyłem go tak jak trzeba, Triger do nóżki PB2, a Echo do nóżki PB1.<br />Nie wszystko działa poprawnie, czujnik mierzy odległość ale potrzebuje na to dużo czasu. Poniżej kod:<br />[syntax=c]void UltraInit(void)<br />{<br />DDR(TRIG_PORT) |= (1&lt;&lt;TRIG);     //trig jako wyjscie<br />DDR(ECHO_PORT) &amp;= ~(1&lt;&lt;ECHO);    //echo jako wejscie<br />PORT(TRIG_PORT) &amp;= ~(1&lt;&lt;TRIG);   //stan ujemny na trig<br />PORT(ECHO_PORT) &amp;= ~(1&lt;&lt;ECHO);    //stan ujemny na echo<br /><br />TCCR2 |= (1&lt;&lt;WGM21);    //tryb CTC<br />TCCR2 |= (1&lt;&lt;CS21);     //prescaler 8<br />OCR2 = 9;<br />TIMSK |= (1&lt;&lt;OCIE2);<br />}[/syntax]<br />Powyżej ustawienie Trig jako wyjścia, a Echo jako wejście, oraz inicjalizacja Timera2. <br />Timer ten generuje przerwanie z f=100.000Hz, czyli co 10us. <br />[syntax=c]enum UltStan {trigerH = 1, trigerL, czekaj, odliczanie, stop};<br /><br />uint8_t UltraPomiar(void)<br />{<br />UltInfo = trigerH;    //inicjalizacja dokonania pomiaru<br />        while(UltInfo == stop);    //czekaj na dokonanie pomiaru<br />return Odleglosc;     //zwraca wynik pomiaru<br />}[/syntax]<br />Czyli rozpoczyna nowy pomiar i go zwraca<br />[syntax=c]int main(void)<br />{<br />UltraInit();<br />LcdInit();<br />sei();<br /><br />while(1)<br />{<br />CLR();<br />LcdInt(UltraPomiar());<br />_delay_ms(1000);<br />}<br />}[/syntax]<br />Część główna programu, ma co 1 sekundę wyświetlić zmierzoną odległość, i tutaj występuje problem bo pomiar dokonywany jest znacznie dłużej, jakąś minutę. Mogę co prawda zmienić opóźnienie na _delay_ms(10); i wtedy pomiar jest wykonywany raz na jakąś sekundę.<br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />if(UltInfo == trigerL) {PORT(TRIG_PORT) &amp;= ~(1&lt;&lt;TRIG); UltInfo = czekaj;}    //po 10us stan ujemny na trigerze i czekaj na echo<br />if(UltInfo == trigerH) {PORT(TRIG_PORT) |= (1&lt;&lt;TRIG); UltInfo = trigerL;}   //stan dodatni na trigerze<br /><br />if(UltInfo==czekaj &amp;&amp; (PIN(ECHO_PORT) &amp; (1&lt;&lt;ECHO))) {licznikUL = 0; UltInfo = odliczanie;}   //jeśli wykryje stan dodatni na echo to...<br />if(UltInfo == odliczanie) licznikUL++;                   //odliczaj impulsy<br /><br />if(UltInfo==odliczanie &amp;&amp; (!(PIN(ECHO_PORT) &amp; (1&lt;&lt;ECHO))))    //jeśli stan ujemny na echo to zakończ odliczanie...<br />{UltInfo = stop; Odleglosc = (licznikUL*34)/100/2;}           //i oblicz odległośc w cm<br />}[/syntax]<br />powyżej przerwanie, ustawia ono stan dodatni na 10us na Trigerze, a następnie czeka na sygnał Echo. Jeśli się pojawi to odlicza czas tego sygnału aż do zakończenia sygnału. Następnie przetwarza wynik na cm.<br /><br />Nie wiem co tu jest nie tak, może jakieś problemy ze stosem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15085">zb111112</a> — 22 mar 2017, o 18:44</p><hr />
]]></content>
</entry>
</feed>