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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-12-18T21:29:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21719&amp;mode</id>
<entry>
<author><name><![CDATA[Lex_]]></name></author>
<updated>2018-12-18T21:29:13+01:00</updated>
<published>2018-12-18T21:29:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21719&amp;p=214741#p214741</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21719&amp;p=214741#p214741"/>
<title type="html"><![CDATA[Re: HC-SR04 Atmega2560 program nie działa tak jak powinien]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21719&amp;p=214741#p214741"><![CDATA[
Operacje w main są bardzo skąpe - albo zapal albo nie. <br />Używasz przerwania i dodatkowo delay'a w main - czasami jest to potrzebne, ale 100ms to bardzo dużo, rozważ czy aż tyle potrzebujesz. <br />Delay w przerwaniu - zła praktyka. <br />Na moje oko istnieją po prostu duże braki w kodzie - jeżeli pomiar jest błędny to cała reszta jest do niczego. Od tego bym zaczął. Najlepiej gdybyś wiedział co kryje się pod zmienną 'dist' w każdym momencie, metoda prób i błędów będzie czasochłonna. <br />Jeżeli pomiar będzie w porządku to wtedy można pójść dalej. Zwykła dioda do sprawdzania wyniku to moim zdaniem za mało.<br />Spraw sobie wyświetlacz 2x16 i będziesz miał jakąś kontrolę nad programem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2676">Lex_</a> — 18 gru 2018, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[209652]]></name></author>
<updated>2018-12-18T20:05:47+01:00</updated>
<published>2018-12-18T20:05:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21719&amp;p=214740#p214740</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21719&amp;p=214740#p214740"/>
<title type="html"><![CDATA[HC-SR04 Atmega2560 program nie działa tak jak powinien]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21719&amp;p=214740#p214740"><![CDATA[
Witam,<br />Musze stworzyć projekt do obsługi czujnika HC-SR04. Jeżeli czujnik wykryje przeszkodę w odległości mniejszej niż 20 cm to zapala się lampka, która to sygnalizuje ( w późniejszym czasie możliwe, że będzie to hamować pojazd). Jestem początkujący w tym temacie i sama obsługa HC-SR04 jest dla mnie dość sporym problemem. <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define F_CPU 16000000UL<br />#include &lt;util/delay.h&gt;<br />#define LED_PIN (1&lt;&lt;PC7)<br />#define LED_ON PORTC &amp;= ~LED_PIN<br />#define LED_OFF PORTC |= LED_PIN<br />uint16_t rising, falling;<br />volatile uint32_t counts;<br />volatile uint32_t dist;<br />uint16_t us_per_count;<br /><br /><br /><br />ISR (TIMER4_CAPT_vect)<br />{<br />  <br />   <br /><br />  if (TCCR4B &amp; (1&lt;&lt;ICES4))<br />  {<br />    TCCR4B &amp;= ~(1&lt;&lt;ICES1); <br />    rising = ICR1; <br />  }<br />  else <br />  {<br />    TCCR4B |= (1&lt;&lt;ICES4); <br />    falling = ICR4; <br />    counts = (uint32_t)falling - (uint32_t)rising;<br />    dist = (uint32_t)us_per_count * counts / 58; <br />  }<br />}<br /><br />ISR (TIMER4_COMPA_vect)<br />{<br />   <br />    PORTC |= 1 &lt;&lt; PINC4;<br />    _delay_us(12);<br />    PORTC &amp;= ~(1 &lt;&lt; PINC4);<br />}<br /><br />void init_timer4()<br />{<br />  <br />  TCCR4A |= (1 &lt;&lt; WGM41);<br />   <br />  TCCR4B |= 1 &lt;&lt; CS41 | 1 &lt;&lt; CS40; // prescaler 64<br /><br />  TIMSK4 |= 1 &lt;&lt; OCIE4A | 1 &lt;&lt; ICIE4;<br />  <br />  TCCR4B |= 1 &lt;&lt; ICES4; <br />  <br />  OCR4A = 8750;<br /> <br />  <br />  sei();<br />  us_per_count = 4; // 8MHz / 64 = 125000 counts/second =&gt; 1000000/125000<br /><br />}<br /><br />int main()<br />{<br />  DDRC |= 1 &lt;&lt; PINC4;<br />  PORTC &amp;= ~(1 &lt;&lt; PINC4);<br />  init_timer4();<br />  DDRC |=LED_PIN;<br /><br />  while(1)<br />  {<br />       if(dist&lt;=20) {<br />       LED_ON;<br />       _delay_ms(100);<br />       }<br />       else<br />       LED_OFF;<br />       _delay_ms(100);<br />       }<br />  }[/syntax]<br /><br />Ten program, który stworzyłem działa, ale nie tak jak powinien. Lampka zapala się ale ja czujnik wykryje przeszkodę w odległości około 40cm natomiast, gdy przeszkoda znajduje się bliżej niż około 8 cm czujnik jej nie wykrywa. <br />Proszę o pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20432">209652</a> — 18 gru 2018, o 20:05</p><hr />
]]></content>
</entry>
</feed>