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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-04-25T22:07:52+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15190&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-04-25T22:07:52+01:00</updated>
<published>2016-04-25T22:07:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159332#p159332</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159332#p159332"/>
<title type="html"><![CDATA[Re: Odczyt sygnału PWM przez procesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159332#p159332"><![CDATA[
Witam<br />Przecież za powierzchnię nie płacisz - zamieść cały kod ( oczywiście bez Mirkowych bibliotek - jeśli takie są ) to wtedy można obejrzeć.<br />Być może błąd jest w tym fragmencie który podałeś, ale...<br />Tak zastanawiam się nad tym warunkiem &quot;if...  else&quot; - else wykona się dla każdego innego niż to po if'ie.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 25 kwi 2016, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-04-25T21:29:35+01:00</updated>
<published>2016-04-25T21:29:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159328#p159328</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159328#p159328"/>
<title type="html"><![CDATA[Re: Odczyt sygnału PWM przez procesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159328#p159328"><![CDATA[
Niestety muszę jeszcze poprosić o pomoc. Napisałem przerwanie, które sprawdza czas trwania sygnału wysokiego oraz niskiego. Niestety przy prawie maksymalnym współczynniku wypełnienia sygnału pojawia się problem. Oba czasy trwania sygnału zarówno wysokiego jak i niskiego są takie same, a przecież czas trwania sygnału wysokiego powinien być możliwie najdłuższy, a niskiego najniższy. Kod:<br />[syntax=c]ISR(TIMER1_CAPT_vect)//przerwanie ICP{<br />    if( !(TCCR1B &amp; (1&lt;&lt;ICES1)) ) {<br />    falling_edge = ICR1;<br />    TCCR1B |= (1&lt;&lt;ICES1);//Capture now on rising edge<br />    PulseWidth_On = falling_edge - rising_egde;<br />    }else {<br />    rising_egde = ICR1;<br />    TCCR1B &amp;= ~(1&lt;&lt;ICES1); //Capture now on falling edge<br />    PulseWidth_Off = rising_egde - falling_edge;<br />    }<br />}[/syntax]<br /><br />Możliwe, że popełniłem gdzieś błąd, którego nie widzę. <br />Proszę o pomoc <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=8379">drewpol</a> — 25 kwi 2016, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-04-25T18:05:29+01:00</updated>
<published>2016-04-25T18:05:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159293#p159293</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159293#p159293"/>
<title type="html"><![CDATA[Re: Odczyt sygnału PWM przez procesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159293#p159293"><![CDATA[
Napisałem taki oto program do obsługi tego sygnału, gdzie na początku ustawiam Timer1 do trybu Input Capture:<br />[syntax=c]TCCR1A = 0;<br />TCCR1B |= (1&lt;&lt;CS11);//Preskaler 8<br />TCCR1B|=(1&lt;&lt;ICES1);//Rozpoczęcie zboczem narastającym<br />TIMSK |=(1&lt;&lt;TICIE1);//Zezwolenie na przerwanie Input Capture[/syntax]<br />a następnie typowy kod znaleziony na tym forum:<br />[syntax=c]ISR(TIMER1_CAPT_vect)//przerwanie ICP<br />{<br />    static uint16_t LastCapture;<br />    if( !(TCCR1B &amp; (1&lt;&lt;ICES1)) ) PulseWidth = ICR1 - LastCapture;<br />    LastCapture = ICR1;<br /><br />    TCCR1B ^= (1&lt;&lt;ICES1); //zmiana zbocza[/syntax]<br /><br />Wartość PulseWidth wyświetlam sobie na wyświetlaczu. Procesor ustawiony jest na taktowanie 16MHz. Przy preskalerze o wartości 8 daje to zmianę licznika Timera1 co 0,5us. W przypadku sygnału PWM, który podaję na sterownik minimalna szerokość impulsu wynosi 1us, a maksymalna 4095. Zgodnie z tym wartość zmienne PulseWidth powinna wynosić od 2 do 8190. Jednak zaczyna się od 6 i kończy na 8002. Czy ktoś mógłby mi wyjaśnić dlaczego tak jest ? Wygląda na to, że czegoś nadal nie rozumiem<br /><br />Pozdrawiam<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />Wszystko już wiem. Okazało się, że czujnik który używam może oscylować swoją częstotliwością PWM w zakresie +/-10% i stąd takie różnice.<br />Dziękuję koledze &quot;kicajek&quot; za link do tematu <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=8379">drewpol</a> — 25 kwi 2016, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-04-25T11:19:17+01:00</updated>
<published>2016-04-25T11:19:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159252#p159252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159252#p159252"/>
<title type="html"><![CDATA[Re: Odczyt sygnału PWM przez procesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159252#p159252"><![CDATA[
Wyczytalem, że odpowiednie do tego zastosowania będzie wykorzystanie timera1 jako input capture unit. Jedna rzecz mnie zastanawia. Rozumiem że licznik będzie zliczal z taką częstotliwością jaką ustawie preskaler. Czyli jeżeli chce uzyskać maksymalną różnice 4095 tak jak opisałem to w pierwszym poście to muszę załadować dodatkowo do rejestru licznika timera 1 odpowiednią wartość tak aby uzyskać częstotliwość zmian licznika co 1us tak ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 25 kwi 2016, o 11:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-04-23T16:31:10+01:00</updated>
<published>2016-04-23T16:31:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159053#p159053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159053#p159053"/>
<title type="html"><![CDATA[Re: Odczyt sygnału PWM przez procesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159053#p159053"><![CDATA[
Witam<br />Może tutaj coś wygrzebiesz: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic14801.html" >topic14801.html</a><!-- l --><br />...bo to prawie to samo.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 kwi 2016, o 16:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-04-23T13:58:14+01:00</updated>
<published>2016-04-23T13:58:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159043#p159043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159043#p159043"/>
<title type="html"><![CDATA[Odczyt sygnału PWM przez procesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15190&amp;p=159043#p159043"><![CDATA[
Witam. Muszę zrealizować odczyt zewnętrznego sygnału PWM pochodzącego z pewnego czujnika. Sygnał ma być odczytywany przez procesor i odpowiednio obrabiany. Częstotliwość sygnału wynosi 244 Hz, czyli okres sygnału to 4097 us. Najmniejszy okres przy najmniejszym wypełnieniu wynosi 1us. <br />Proszę o porady w jaki sposób najlepiej obsłużyć taki sygnał ? Dodam, że muszę także wyznaczać czas trwania poszczególnych wypełnień zaczynając od zbocza narastającego i kończąc na zboczu opadającym. Czy do tego celu wystarczy zwykła obsługa sygnału wejściowego przez dowolny pin, czy może wykorzystać przerwania zewnętrzne ? Czy może są jeszcze jakieś inne sposoby na to? <br />Bardzo proszę o wszelkie porady <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dodam, że procesor to ATmega32 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Pozdrawiam <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=8379">drewpol</a> — 23 kwi 2016, o 13:58</p><hr />
]]></content>
</entry>
</feed>