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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-18T19:01:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=17664&amp;mode</id>
<entry>
<author><name><![CDATA[Jeziorek74]]></name></author>
<updated>2017-02-18T19:01:34+01:00</updated>
<published>2017-02-18T19:01:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=183002#p183002</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=183002#p183002"/>
<title type="html"><![CDATA[Re: Pomiar długości PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=183002#p183002"><![CDATA[
Dzięki za podpowiedź. Spróbuję coś z tego wyciągnąć dla siebie.  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Mam taki fragment kodu:<br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;  <br /><br />volatile uint16_t impuls;         // długość impulsu PWM   <br /><br />// główna funkcja programu - main()<br />int main( void ) { <br /><br />    // ustawienie TIMER1<br />    TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS11);       // preskaler = 64<br />    TCCR1B |= (ICES1);                    //zbocze narastające<br />    TIMSK1 |= (1&lt;&lt;ICIE1);                  //przerwanie przechwytywania<br /><br /><br />    sei();        //włączenie globalnego zezwolenia na przerwania<br /><br />    while(1) { <br />}<br /><br />ISR (TIMER1_CAPT_vect)<br />{<br />     static uint16_t last_icr;<br />     uint16_t width;<br />     width = ICR1 - last_icr;<br />     last_icr = ICR1;<br />     TCCR1B ^=(1&lt;&lt;ICES1);<br />     impuls = width;<br />}[/syntax]<br /><br />W jaki sposób wskazać pin do pomiaru długości sygnału ?<br /><br />Nie do końca jeszcze rozumiem przerwania, ale miksując wiedzę z bluebooka o multipleksowaniu LED, odbiorniku RC5 i innych źródeł coś zaczyna mi świtać.<br /><br />EDIT:<br />Już wiem - to jest pin ICP1. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2483">Jeziorek74</a> — 18 lut 2017, o 19:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2017-02-18T18:08:19+01:00</updated>
<published>2017-02-18T18:08:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=182997#p182997</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=182997#p182997"/>
<title type="html"><![CDATA[Re: Pomiar długości PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=182997#p182997"><![CDATA[
Kod odbiornika pilota NEC lub RC5 się nada. Możesz zajrzeć do wnętrza takiej biblioteki Arduino. W przerwaniu odczytywane są impulsy o szerokości około 1 ms. Coś takiego można zrobić:<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 />//szerokosc 0.9 ms<br />#define W_CMD1_MINF_CPU/8000*0.8<br />#define W_CMD1_MAXF_CPU/8000*1.0<br /><br />//szerokosc 1.1 ms<br />#define W_CMD2_MINF_CPU/8000*1.2<br />#define W_CMD2_MAXF_CPU/8000*1.4<br /><br />enum {IDLE, COMMAND1, COMMAND2};<br /><br />volatile uint8_t command; //zmienia sie w przerwaniu<br /><br />int main(void)<br />{<br />TCCR1B |= (1 &lt;&lt; CS11); //preskaler 8<br />TCCR1B |= (1 &lt;&lt; ICES1); //narastajace zbocze<br />TIMSK1 |= (1 &lt;&lt; ICIE1); //przerwanie przechwytywania<br /><br />sei(); //globalne odblokowanie przerwan<br /><br />while (1)<br />{<br />switch (command)<br />{<br />case COMMAND1:<br />//coś do zrobienia np. TOGGLE_PIN;<br />break;<br /><br />case COMMAND2:<br />//coś innego do zrobienia<br />break;<br /><br />default:<br />break;<br />}<br />command = IDLE; //jednorazowe wykonanie komendy<br />}<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect)<br />{<br />static uint16_t last_icr;<br />uint16_t width; //szerokosc impulsu<br />width = ICR1 - last_icr;<br />last_icr = ICR1;<br />TCCR1B ^= (1 &lt;&lt; ICES1); //przeciwne zbocze<br /><br />if (width &gt; W_CMD1_MIN &amp;&amp; width &lt; W_CMD1_MAX) //jak szerokosc impulsu pasuje do 1 komendy<br />{<br />command = COMMAND1;<br />}<br />else if (width &gt; W_CMD2_MIN &amp;&amp; width &lt; W_CMD2_MAX)<br />{<br />command = COMMAND2;<br />}<br />else<br />{<br />command = IDLE;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 18 lut 2017, o 18:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeziorek74]]></name></author>
<updated>2017-02-18T16:51:16+01:00</updated>
<published>2017-02-18T16:51:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=182990#p182990</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=182990#p182990"/>
<title type="html"><![CDATA[Pomiar długości PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17664&amp;p=182990#p182990"><![CDATA[
Witam!<br /><br />Mam prośbę do kolegów. <br />Chciałbym wyposażyć mój model samolotu w dodatkowe urządzenie - sterowany nadajnikiem 2.4GHz przełącznik. Sterowałby np. sekwencyjnym otwieraniem podwozia, czy komór bombowych w przypadku, gdy wymaganych jest kilka elementów uruchamianych sekwencyjnie . Próbowałem najpierw zrobić to na bazie Arduino. Do odczytu długości PWM wykorzystałem funkcję PulseIn(). I byłoby OK, gdyby nie to, że funkcja ta wykonuje się całą wieczność - nawet do 1 s.  <img src="https://forum.atnel.pl/images/smilies/icon_evil.gif" alt=":evil:" title="Zły" /> Arduino więc odpada.  <br /><br />I teraz moja prośba - czy dysponujecie jakimiś przykładami w C, pokazującymi jak odczytać długość impulsu PWM z odbiornika modelarskiego (jest to zakres od 800us do 2200us)  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  Chodzi mi o cokolwiek, co naprowadzi mnie na właściwą drogę - jakiś przykład, opis teoretyczny lub gotowiec do zaadaptowania, bo w tej chwili nawet nie wiem, jak się do tego zabrać.  <img src="https://forum.atnel.pl/images/smilies/icon_idea.gif" alt=":idea:" title="Pomysł" /> <br />Dodam, że całością ma sterować Atmega328P z zestawem Mosfetów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2483">Jeziorek74</a> — 18 lut 2017, o 16:51</p><hr />
]]></content>
</entry>
</feed>