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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-14T14:21:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=12929&amp;mode</id>
<entry>
<author><name><![CDATA[owocowy1111]]></name></author>
<updated>2015-09-14T14:21:13+01:00</updated>
<published>2015-09-14T14:21:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139806#p139806</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139806#p139806"/>
<title type="html"><![CDATA[Re: HC-SR04 na Atmega8 i ICP]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139806#p139806"><![CDATA[
O definiowaniu częstotliwości doczytałem.<br />SunRiver, na podstawie tych wątków pisałem program. Bazowałem przede wszystkim na kodzie użytkownika kiclaw, pomijając wykorzystanie UART.<br />Błąd trafnie wskazał Krauser - po poprawieniu działa jak należy.<br />Bardzo Panom dziękuję za pomoc.<br /><br />Kod postarałem się maksymalnie odchudzić, może komuś jeszcze się przyda.<br />Obsługa samego czujnika, bez wyświetlania wyniku.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />volatile uint16_t PulseWidth, LastCapture; //Zmierzona szer sygnalu i pamiec zegara<br />uint16_t Distance; //przeliczona odległosc (wynik pomiaru)<br /><br />void trigger(void);<br /><br />int main() {<br />//WE/WY<br />DDRB |= (1&lt;&lt;PB6); //jako wyjscie<br />DDRB &amp;= ~(1&lt;&lt;PB0); //jako wejscie<br />//STANY POCZATKOWE<br />PORTB &amp;= ~( (1&lt;&lt;PB6) | (1&lt;&lt;PB0) );<br />//TIMER1<br />TCCR1B |= (1&lt;&lt;ICES1);  //Zbocze narastające wywoła przerwanie<br />TCCR1B |= (1&lt;&lt;CS11);   // preskaler 8<br />TIMSK  |=  (1&lt;&lt;TICIE1);   // zezwolenie na przerwanie od ICP<br /><br />sei(); //globalne odblokowanie przerwan<br /><br />//PETLA GLOWNA<br />while(1) {<br />        trigger();//wywołanie pomiaru<br />        Distance = PulseWidth / 58; //obliczenie dystansu w cm<br />}<br />}<br />//PRZERWANIE OD CAPTURE PIN<br />ISR(TIMER1_CAPT_vect) {<br />if( (TCCR1B &amp; (1&lt;&lt;ICES1)) ) {<br />LastCapture = ICR1; //jesli zbocze narastajace, zlap ICR1<br />} else {<br />PulseWidth = ICR1 - LastCapture; //Jeśli zbocze opadajace oblicz PW<br />}<br />TCCR1B ^= (1&lt;&lt;ICES1); //Zmiana zbocza wyw przerwanie<br />}<br />//TRIGGER<br />void trigger(void) {<br /> PORTB |= (1&lt;&lt;PB6);    //uruchomienie pomiaru SC-HC04<br /> _delay_ms(10);<br /> PORTB &amp;= ~(1&lt;&lt;PB6);<br /> _delay_ms(60); // opóźnienie dla max długości echa, by pomiary sie nie nakladaly<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11012">owocowy1111</a> — 14 wrz 2015, o 14:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-13T20:55:47+01:00</updated>
<published>2015-09-13T20:55:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139769#p139769</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139769#p139769"/>
<title type="html"><![CDATA[Re: HC-SR04 na Atmega8 i ICP]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139769#p139769"><![CDATA[
<div class="quotetitle">owocowy1111 napisał(a):</div><div class="quotecontent"><br />[syntax=c]if(ICES1) {[/syntax]<br /></div><br />Tak się nie sprawdza stanu bitu w rejestrze. ICES1 to po prostu liczba określająca numer bitu. Zrób tak samo jak odczytujesz stan przycisku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 13 wrz 2015, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-09-13T18:47:41+01:00</updated>
<published>2015-09-13T18:47:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139757#p139757</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139757#p139757"/>
<title type="html"><![CDATA[Re: HC-SR04 na Atmega8 i ICP]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139757#p139757"><![CDATA[
<!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic3090.html#p36705" >topic3090.html#p36705</a><!-- l --><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2655.html#p31694" >topic2655.html#p31694</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 wrz 2015, o 18:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[owocowy1111]]></name></author>
<updated>2015-09-13T17:11:20+01:00</updated>
<published>2015-09-13T17:11:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139744#p139744</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139744#p139744"/>
<title type="html"><![CDATA[HC-SR04 na Atmega8 i ICP]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12929&amp;p=139744#p139744"><![CDATA[
Witam szanownych forumowiczów!<br /><br />Wiem, że temat tych czujników był już tutaj wałkowany, i właśnie dlatego chciałbym skorzystać z waszego doświadczenia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Przeglądałem już inne wątki o ich obsłudze, i skleciłem takie coś. I nie działa.<br /><br />uC: Atmega8L, ustawiona na 8Mhz<br />Piny:<br />TRIG - PB6<br />ECHO - PB0 (ICP1)<br />LEDy - PC0-5<br />Nie posiadam wyświetlacza LCD, stąd wynik rzucam na PORTC.<br /><br />Kod:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br /><strong><span style="color: #FF0000"><span style="font-size: 150%; line-height: normal"><em>#define F_CPU 8000000L</em> &lt;---- tego NIGDY nie robi się w kodzie - mirekk36</span></span></strong><br /></div><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />volatile uint16_t PulseWidth, LastCapture; //Zmierzona szer sygnalu i pamiec zegara (16bit)<br />uint8_t distance;                                   //przeliczona odległosc<br /><br />int main() {<br />//WE/WY<br />DDRC = 0xFF;     //jako wyjscie<br />DDRB |= (1&lt;&lt;PB6); //jako wyjscie<br />DDRB &amp;= ~(1&lt;&lt;PB0); //jako wejscie<br />//STANY POCZATKOWE<br />PORTC = 0x00;<br />PORTB = 0x00;<br />PORTD = 0x00;<br />//TIMER1<br />TCCR1B = 0x00;//Wyzerowanie CR na wszelki wypadek<br />TCCR1B |= (1&lt;&lt;ICES1);  //Zbocze narastające wywoła przerwanie<br />TCCR1B &amp;= ~(1&lt;&lt;ICNC1); //NoiseCanceller wylaczony<br />TCCR1B |= (1&lt;&lt;CS11);   // preskaler 8(dla 8Mhz daje nam 'cyk' 1 us)<br />TIMSK  |=  (1&lt;&lt;TICIE1);           // zezwolenie na przerwanie od ICP<br /><br />sei(); //globalne odblokowanie przerwan<br />//PETLA GLOWNA<br />while(1) {<br /><br />        _delay_ms(500);         //pomiar co 0,5 s<br /><br />        PORTB |= (1&lt;&lt;PB6);    //trigger dla SC-HC04<br />        _delay_ms(15);<br />        PORTB &amp;= ~(1&lt;&lt;PB6);<br />        _delay_ms(30); // opóźnienie dla max długości echa<br />        distance = PulseWidth / 58;   //obliczenie dystansu w cm<br />        PORTC = distance; // Wyswietlenie dystansu<br /><br />}<br />}<br />//PRZERWANIE OD CAPTURE PIN<br />ISR(TIMER1_CAPT_vect) {<br />if(ICES1) {<br />LastCapture = ICR1; //jesli zbocze narastajace, zlap ICR1<br />} else {<br />PulseWidth = ICR1 - LastCapture; //Jeśli zbocze opadajace oblicz PW<br />}<br />TCCR1B ^= (1&lt;&lt;ICES1); //Zmiana zbocza wyw przerwanie<br /><br />}[/syntax]<br /><br />Objawy:<br />LEDy nie wyświetlają wyniku (wszystkie zgaszone).<br />Na PB6(TRIG) pojawiają się cykliczne piki - sprawdzone multimetrem.<br />ECHO oddaje cykliczne piki - j.w.<br /><br />Inne info:<br />Wcześniej napisałem program z wykorzystaniem INTów, który działa. Więc zarówno Atmega jak i czujnik są sprawne.<br />Zależy mi na wykorzystaniu Input Capture. Układ niby prosty, ale siedzę nad nim już cały dzień, i nie mogę go ruszyć. Może program potrzebuje po prostu świeżego oka <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Nigdy wcześniej nie korzystałem z ICP, więc błąd może siedzi w konfiguracji TCNT1?<br /><br />Za wszelką pomoc/sugestie będę wdzięczny!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11012">owocowy1111</a> — 13 wrz 2015, o 17:11</p><hr />
]]></content>
</entry>
</feed>