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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-04T21:29:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=5422&amp;mode</id>
<entry>
<author><name><![CDATA[Lukasz89]]></name></author>
<updated>2014-01-04T21:29:38+01:00</updated>
<published>2014-01-04T21:29:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63827#p63827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63827#p63827"/>
<title type="html"><![CDATA[Re: Niedokładny pomiar HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63827#p63827"><![CDATA[
A co za pomocą tego czujnika mierzysz? Bo jeśli np. kierujesz na biurko raz chwyci blat, raz półkę a raz ścianę czy ekran monitora etc. to może stąd te wariacje? U mnie było podobnie, ale jak mierzyłem większe powierzchnie - oddalałem czujnik od ściany było git - wariancja 3mm. Kod z małymi zmianami od Suna. <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2655.html" >topic2655.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=590">Lukasz89</a> — 4 sty 2014, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miccaldo]]></name></author>
<updated>2014-01-04T20:07:29+01:00</updated>
<published>2014-01-04T20:07:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63814#p63814</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63814#p63814"/>
<title type="html"><![CDATA[Re: Niedokładny pomiar HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63814#p63814"><![CDATA[
Wprowadziłem poprawki, jednak wyniki nadal nie są zadowalające <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> tak obecnie wygląda kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;TERMINAL.h&quot;<br />#include &quot;main.h&quot;<br /><br /><br />volatile uint16_t dlugosc_impulsu;<br />volatile uint8_t pomiar_dokonany;<br /><br />void usonic_init();<br />//void send_to_terminal(uint16_t data);<br /><br /><br />int main(void){<br /><br />UART_Init(__UBRR);<br />usonic_init();<br /><br />sei();<br /><br />while (1){<br /><br />TRIG_PORT |= TRIG_PIN;<br />_delay_us(10);<br />TRIG_PORT ^= TRIG_PIN;<br /><br />if(pomiar_dokonany == 1){<br /><br />TRL_Clear(0);<br />TRL_GoTo(0,0);<br />TRL_Int(dlugosc_impulsu);<br />pomiar_dokonany = 0;<br />_delay_ms(700);<br />}<br />}<br />}<br /><br />void usonic_init(){<br /><br />TRIG_DIR |= TRIG_PIN;<br />ECHO_DIR &amp;= ~ECHO_PIN;<br />ECHO_PORT &amp;= ~ECHO_PIN;<br /><br />TCCR1B |= (1&lt;&lt;CS11);// ustawienie preskalera dla Timer1 = 8<br />TCCR1B |= (1&lt;&lt;ICES1);// reakcja na zbocze narastajace<br />TIMSK |= (1&lt;&lt;TICIE1);<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect) // obsluga przerwania od pinu ICP1 ( PB0)<br />{<br />static uint16_t przechwycona_wartosc;<br /><br />         if(!(TCCR1B &amp; (1&lt;&lt;ICES1)))<br />         {<br />             dlugosc_impulsu = ICR1 - przechwycona_wartosc;<br />             pomiar_dokonany = 1;<br />         }<br />         przechwycona_wartosc = ICR1;<br />         TCCR1B ^= (1&lt;&lt;ICES1);<br />}[/syntax]<br /><br />Czy może być to wina czujnika?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=974">miccaldo</a> — 4 sty 2014, o 20:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miccaldo]]></name></author>
<updated>2014-01-04T15:17:26+01:00</updated>
<published>2014-01-04T15:17:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63767#p63767</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63767#p63767"/>
<title type="html"><![CDATA[Niedokładny pomiar HC-SR04]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5422&amp;p=63767#p63767"><![CDATA[
Witam,<br /><br />wiem, że było już sporo tematów związanych z tym czujnikiem, ale niestety nie wiem co zrobić aby pomiar był bardziej dokładny. Kiedy czujnik oddalony jest od przeszkody załóżmy o 5 cm, to wartość waha się pomiędzy 5, a 6 cm. Z kolei, kiedy oddalony jest więcej niż 10 cm, wartości są bardzo niedokładne. Dziwne.. bo przy odbiorze ramek pilotów na podczerwień programy z książki bardzo dokładnie mierzą czas trwania impulsów, więc raczej jest to wina programu, choć nie wiem co jest nie tak.<br /><br />Oto program:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;TERMINAL.h&quot;<br />#include &quot;main.h&quot;<br /><br /><br />volatile uint16_t licznik_us;<br /><br />void usonic_init();<br />uint16_t pomiar( void );<br />void send_to_terminal(uint16_t data);<br /><br /><br />int main(void){<br /><br />UART_Init(__UBRR);<br />usonic_init();<br /><br />sei();<br /><br />while (1){<br /><br />send_to_terminal(pomiar());<br />}<br />}<br /><br />void usonic_init(){<br /><br />TRIG_DIR |= TRIG_PIN;<br />ECHO_DIR &amp;= ~ECHO_PIN;<br />ECHO_PORT &amp;= ~ECHO_PIN;<br /><br />TCCR1B |= (1&lt;&lt;CS11);// ustawienie preskalera dla Timer1 = 8<br />TCCR1B |= (1&lt;&lt;ICES1);// reakcja na zbocze narastajace<br />TIMSK |= (1&lt;&lt;TICIE1);<br /><br />}<br />void send_to_terminal(uint16_t data){<br /><br />TRL_Clear(0);<br />TRL_GoTo(0,0);<br />TRL_Int(data);<br />_delay_ms(300);<br />}<br /><br />uint16_t pomiar( void ){<br /><br />uint16_t wynik;<br /><br />TRIG_PORT |= TRIG_PIN;<br />_delay_us(11);<br />TRIG_PORT ^= TRIG_PIN;<br /><br />_delay_ms(5);<br />wynik = licznik_us/58;<br /><br />return wynik;<br />}<br /><br /> ISR(TIMER1_CAPT_vect) {<br /><br />static uint16_t LastCapture;<br />uint16_t PulseWidth;<br /><br />PulseWidth = ICR1 - LastCapture;<br />LastCapture = ICR1;<br /><br />licznik_us = PulseWidth;<br />TCCR1B ^= (1&lt;&lt;ICES1); //zmiana zbocza<br /> }[/syntax]<br /><br />oraz plik.h<br /><br />[syntax=c]#ifndef MAIN_H_<br />#define MAIN_H_<br /><br />#define ECHO_PIN (1&lt;&lt;PB0)// numer pinu wejścia ICP<br />#define ECHO_DIR DDRB<br />#define ECHO_PORT PORTB<br /><br />#define TRIG_PIN (1&lt;&lt;PD1)<br />#define TRIG_DIR DDRD<br />#define TRIG_PORT PORTD<br /><br />#endif /* MAIN_H_ */[/syntax]<br /><br />Procesor to atmega8, taktowana częstotliwością 8Mhz.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=974">miccaldo</a> — 4 sty 2014, o 15:17</p><hr />
]]></content>
</entry>
</feed>