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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-05-25T20:22:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=18484&amp;mode</id>
<entry>
<author><name><![CDATA[Jeziorek74]]></name></author>
<updated>2017-05-25T20:22:29+01:00</updated>
<published>2017-05-25T20:22:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18484&amp;p=189788#p189788</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18484&amp;p=189788#p189788"/>
<title type="html"><![CDATA[Problem z poprawnym odczytem PWM z odbiornika RC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18484&amp;p=189788#p189788"><![CDATA[
Proszę szanownych kolegów o pomoc. Pokrótce opiszę problem:<br />Zakupiłem jakiś czas temu moduł oświetlenia mojego samolotu od pewnego kolegi z innego forum. Przeraziła mnie ilość przewodów do jego podłączenia, więc zbudowałem swoją wersję tegoż modułu wraz z płytką dystrybucji zasilania, która zminimalizowała mi ilość przewodów w modelu. Całość oparta jest o Arduino Nano. Oprogramowanie, to zlepek różnych fragmentów programów znalezionych w sieci dostosowanych do moich potrzeb plus pomoc kolegi z forum pfmrc.eu plus moja skromna wiedza. <br /><br /><a href="https://obrazkiforum.atnel.pl/2483/a3d632a742c14e5d823ce285e0818722.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/2483/a3d632a742c14e5d823ce285e0818722.png" alt="Obrazek" /></a><br /><br /><br /><br />[syntax=c]#include &lt;Arduino.h&gt;<br />#include &lt;EnableInterrupt.h&gt;<br /><br />#define SERIAL_PORT_SPEED 57600<br /><br />#define RC_CH9  0<br />#define RC_CH6  1<br />#define RC_CH3  2<br /><br />// ---- ustawienia progów zadziałania przełączników<br />#define THR     1000    // gaz włączony<br />#define CH9_MIN 1000    // światła aktywne<br />#define CH9_MID 1500    // światła aktywne + światła lądowania<br />#define CH6_ON  1490    // światła lądowania przy włączonych klapach<br /><br />#define RC_NUM_CHANNELS  3  // liczba odczytywanych kanałów RC<br /><br />// definicja pinów dla Arduino Nano<br />#define RC_CH9_INPUT  4   // kanał 9 przełącznik 3 pozycyjny: 0 - brak świateł, 1 - światła włączone (navi + strob), 2 - światła włączone (wymuszone land i Taxi)<br />#define RC_CH6_INPUT  3   // kanał 6 przełacznik 3 pozycyjny: 0 - brak świateł land i taxi, 1-2 - właczone światła land i Taxi<br />#define RC_CH3_INPUT  2   // kanał 3 drążek Throttle - światłą beacon włączone gdy gaz w uzyciu<br /><br /><br />// ---------------------------------------- odczyt długości sygnałów w odbiorniku RC -------------------------<br />uint16_t rc_values&#91;RC_NUM_CHANNELS&#93;;<br />uint32_t rc_start&#91;RC_NUM_CHANNELS&#93;;<br />volatile uint16_t rc_shared&#91;RC_NUM_CHANNELS&#93;;<br /><br />void rc_read_values() {<br />  noInterrupts();<br />  memcpy(rc_values, (const void *)rc_shared, sizeof(rc_shared));<br />  interrupts();<br />}<br /><br />void calc_input(uint8_t channel, uint8_t input_pin) {<br />  if (digitalRead(input_pin) == HIGH) {<br />    rc_start&#91;channel&#93; = micros();<br />  } else {<br />    uint16_t rc_compare = (uint16_t)(micros() - rc_start&#91;channel&#93;);<br />    rc_shared&#91;channel&#93; = rc_compare;<br />  }<br />}<br /><br />void calc_ch9() { calc_input(RC_CH9, RC_CH9_INPUT); }<br />void calc_ch6() { calc_input(RC_CH6, RC_CH6_INPUT); }<br />void calc_ch3() { calc_input(RC_CH3, RC_CH3_INPUT); }<br /><br /><br />// ===================================================== USTAWIENIA POCZĄTKOWE ========================================<br />void setup() {<br /><br />Serial.begin(SERIAL_PORT_SPEED);<br />   <br />  enableInterrupt(RC_CH9_INPUT, calc_ch9, CHANGE);<br />  enableInterrupt(RC_CH6_INPUT, calc_ch6, CHANGE);<br />  enableInterrupt(RC_CH3_INPUT, calc_ch3, CHANGE);<br />}<br />// =================================================== PETLA GŁÓWNA ========================================================================<br />void loop() {<br />  rc_read_values();<br /><br />  if (rc_values&#91;RC_CH9&#93; &gt; CH9_MIN) <br />  {<br />      Led_pos_wing_tail.start = true;<br />      Led_strobe_tail.start = true;<br />      Led_strobe_wing.start = true;<br />      Led_beacon.start = ( rc_values&#91;RC_CH3&#93; &gt; THR ) ? true : false;            // włacz beacon jesli gaz właczony<br /><br />      // włacz światła lądowania i taxi jesli klapy włączone lub przełacznik CH9 na pozycji 2<br />      if ((rc_values&#91;RC_CH9&#93; &gt; CH9_MID)  || (rc_values&#91;RC_CH6&#93; &lt; CH6_ON)) <br />      {<br />          Led_taxi.start = true; Led_landing.start = true ;<br />      }<br />      else {<br />          Led_taxi.start = false; Led_landing.start = false ;<br />      }<br />  }<br />  else {<br />      lights_off();<br />  }<br />    <br />  Serial.print(&quot;CH9:&quot;); Serial.print(rc_values&#91;RC_CH9&#93;); Serial.print(&quot;\t&quot;);<br />  Serial.print(&quot;CH6:&quot;); Serial.print(rc_values&#91;RC_CH6&#93;); Serial.print(&quot;\t&quot;);<br />  Serial.print(&quot;CH3:&quot;); Serial.print(rc_values&#91;RC_CH3&#93;); Serial.print(&quot;\t\n&quot;);<br />  delay(100);<br />}[/syntax]<br /><br />W kodzie podane tylko istotne fragmenty - resztę na tę chwilę wyciąłem.<br /><br />Krótki opis: <br />Na podstawie wartości PWM odczytywanych z odbiornika RC samolotu (FRSky L9R) Arduino Nano załącza odpowiednie światła w samolocie. Na kanale 9 (CH9) mam przełącznik trójpozycyjny 1- światła wyłączone /2 - włączone światła nawigacyjne / 3 - włączone wszystkie światła.<br />Kanał 3 (CH3) steruje silnikiem i Arduino w momencie uruchomienia silnika włącza światła beacon (Arduino odczytuje wartość PWM z odbiornika na kanale 3). I to działa prawidłowo.<br />Na kanale 6 (CH6) załączane są klapy na skrzydłach i jednocześnie włączają się światła lądowania na podstawie odczytanej wartości PWM tegoż kanału. Niestety Arduino błędnie odczytuje wartość PWM na kanale 6 (odczytuje wartość 0).<br />Klapy sterowane są dwoma serwomechanizmami. Jeśli odłączę serwomechanizmy, to arduino poprawnie odczytuje PWM z tego kanału. Jeśli odłączę jeden serwomechanizm, to wartość PWM jest zaniżona o 200-250us (mimo, że klapa działa dobrze). <br /><br />Czy ktoś jest w stanie wytłumaczyć mi, dlaczego tak się dzieje ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2483">Jeziorek74</a> — 25 maja 2017, o 20:22</p><hr />
]]></content>
</entry>
</feed>