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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16151&amp;mode</id>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-09T22:01:56+01:00</updated>
<published>2016-09-09T22:01:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168509#p168509</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168509#p168509"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168509#p168509"><![CDATA[
procesor mam atmega32 i jest taktowany 16MHz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 9 wrz 2016, o 22:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nemo]]></name></author>
<updated>2016-09-09T21:27:54+01:00</updated>
<published>2016-09-09T21:27:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168507#p168507</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168507#p168507"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168507#p168507"><![CDATA[
Podaj jaki masz procesor i jak taktowany. Od tego zależy konfiguracja timerów. W różnych procesorach nazwy rejestrów i funkcje mogą być różne.<br />Poniżej kod &quot;przetłumaczony&quot; na C, sprawdziłem tylko na szybko symulację w AS.<br /><br />[syntax=c]//wiem, że tak sie nie robi,ale Arduino ma kwarc 16MHz<br />// i tu wyjatkowo dla podkreślenia, że kod jest dla<br />//takiej własnie częstotliwości<br />#define F_CPU 16000000L<br />//arduino ma na pkładzie atmegę 168<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />//this programm will put out a PPM signal<br /><br />//////////////////////CONFIGURATION///////////////////////////////<br />#define chanel_number 8  //set the number of chanels<br />#define default_servo_value 1500  //set the default servo value<br />#define PPM_FrLen 22500  //set the PPM frame length in microseconds (1ms = 1000µs)<br />#define PPM_PulseLen 300  //set the pulse length<br />#define onState 1  //set polarity of the pulses: 1 is positive, 0 is negative<br />#define sigPin 10  //set PPM signal output pin on the arduino<br />#define true 1<br />#define faalse 0<br />//////////////////////////////////////////////////////////////////<br /><br /><br />/*this array holds the servo values for the ppm signal<br /> change theese values in your code (usually servo values move between 1000 and 2000)*/<br />int ppm&#91;chanel_number&#93;;<br /><br />void setup(){  <br />  //initiallize default ppm values<br />  for(int i=0; i&lt;chanel_number; i++){<br />    ppm&#91;i&#93;= default_servo_value;<br />  }<br /><br />  //pinMode(sigPin, OUTPUT);<br />  DDRB |= (1 &lt;&lt; PB2);  <br />  <br />  //digitalWrite(sigPin, !onState);  //set the PPM signal pin to the default state (off)<br />  PORTB &amp;= ~ (1&lt;&lt;PB2);<br />  <br />  cli();<br />  TCCR1A = 0; // set entire TCCR1 register to 0<br />  TCCR1B = 0;<br />  <br />  OCR1A = 100;  // compare match register, change this<br />  TCCR1B |= (1 &lt;&lt; WGM12);  // turn on CTC mode<br />  TCCR1B |= (1 &lt;&lt; CS11);  // 8 prescaler: 0,5 microseconds at 16mhz<br />  TIMSK1 |= (1 &lt;&lt; OCIE1A); // enable timer compare interrupt<br />  sei();<br />}<br /><br />void loop(){<br />  //put main code here<br />  static int val = 1;<br />  <br />  ppm&#91;0&#93; = ppm&#91;0&#93; + val;<br />  if(ppm&#91;0&#93; &gt;= 2000){ val = -1; }<br />  if(ppm&#91;0&#93; &lt;= 1000){ val = 1; }<br />  _delay_ms(10);<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{  //leave this alone<br />  //static boolean state = true; //nie ma typu bolean<br />  static uint8_t state=true;<br />  TCNT1 = 0;<br />  <br />  if(state) {  //start pulse<br />    <br />//digitalWrite(sigPin, onState);<br />     PORTB |= (1&lt;&lt;PB2);<br /><br />OCR1A = PPM_PulseLen * 2;<br />    state = 0;//false;<br />  }<br />  else{  //end pulse and calculate when to start the next pulse<br />    static uint8_t cur_chan_numb;//startc byte cur_chan_numb;<br />    static unsigned int calc_rest;<br />  <br />    //digitalWrite(sigPin, !onState);<br />PORTB &amp;= ~ (1&lt;&lt;PB2);<br />    state = true;<br /><br />    if(cur_chan_numb &gt;= chanel_number){<br />      cur_chan_numb = 0;<br />      calc_rest = calc_rest + PPM_PulseLen;// <br />      OCR1A = (PPM_FrLen - calc_rest) * 2;<br />      calc_rest = 0;<br />    }<br />    else{<br />      OCR1A = (ppm&#91;cur_chan_numb&#93; - PPM_PulseLen) * 2;<br />      calc_rest = calc_rest + ppm&#91;cur_chan_numb&#93;;<br />      cur_chan_numb++;<br />    }     <br />  }<br />}<br /><br /><br />int function(void)<br />{<br />    setup();<br />while(1){loop();};<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13966">nemo</a> — 9 wrz 2016, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-09T19:13:24+01:00</updated>
<published>2016-09-09T19:13:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168490#p168490</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168490#p168490"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168490#p168490"><![CDATA[
Co będę musiał zrobić by skompilować ten kod w C++ ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 9 wrz 2016, o 19:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-07T14:44:09+01:00</updated>
<published>2016-09-07T14:44:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168250#p168250</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168250#p168250"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168250#p168250"><![CDATA[
Już zaczęłę pisać kod, sprawdzam po kawałku z oscyloskopem na pinie OC1A pojawił sie tylko stan wysoki.Nie miał się pojawić start puls?<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />uint16_t chanel&#91;7&#93;;<br /><br />int main (void){<br /><br />DDRA |= (1&lt;&lt;PA0);<br /><br />DDRD |= (1&lt;&lt;PD5);<br /><br />//TCCR1A |= (1&lt;&lt;COM1A1) | (1&lt;&lt;COM1A0);     // set polarity 1<br />TCCR1A |= (1&lt;&lt;COM1A1);                  // set polarity 0<br /><br />OCR1A = 100;  // compare match register, change this<br />TCCR1B |= (1 &lt;&lt; WGM12) | (1 &lt;&lt; WGM13);  // turn on CTC mode<br />TCCR1B |= (1 &lt;&lt; CS11);  // 8 prescaler: 0,5 microseconds at 16mhz<br />TIMSK |= (1 &lt;&lt; OCIE1A); // enable timer compare interrupt<br /><br />sei();<br /><br />while(1){<br /><br />    _delay_ms(500);<br />    PORTA ^= (1&lt;&lt;PA0);  //LED<br /><br />}<br />}<br /><br />ISR(TIMER1_COMPA_vect){<br /><br />static uint8_t state = 1;<br /><br />TCNT1 = 0;<br /><br />if(state){<br />TCCR1A |= (1&lt;&lt;COM1A1) | (1&lt;&lt;COM1A0);     // set polarity 1<br />    OCR1A = 600;<br />    state = 0;<br /><br />}<br />else{<br />TCCR1A |= (1&lt;&lt;COM1A1);                  // set polarity 0<br />state = 1;<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 7 wrz 2016, o 14:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-07T13:14:56+01:00</updated>
<published>2016-09-07T13:14:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168246#p168246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168246#p168246"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168246#p168246"><![CDATA[
Dlaczego przerwanie jest tak szybkie około 19,76 KHz ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 7 wrz 2016, o 13:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nemo]]></name></author>
<updated>2016-09-07T07:10:24+01:00</updated>
<published>2016-09-07T07:10:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168229#p168229</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168229#p168229"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168229#p168229"><![CDATA[
To nie jest czyste C tylko Arduino. W Arduino mamy specjalne funkcje do sterowania wyjściami.<br />Myślę, że najlepiej wyjaśnie na podstawie wybranyck kilku linijek w/w kodu:<br />[syntax=cpp]#define onState 1  //set polarity of the pulses: 1 is positive, 0 is negative<br />#define sigPin 10  //set PPM signal output pin on the arduino<br />pinMode(sigPin, OUTPUT);<br />digitalWrite(sigPin, !onState);  //set the PPM signal pin to the default state (off)[/syntax]<br /><br />linia 1: definiujemy polaryzację sygnału PPM, tu onState jest 1 czyli HIGH<br />linia 2: definiujemy które wyjście będzie wyjściem sygnału PPM, w tym przypadku jest to pin Arduino nr 10, który odpowiada pinowi atmega PB2<br />linia 3: ustawiamy pin 10 jako wyjście cyfrowe<br />linia 4: ustawia wyjście cyfrowe Arduino nr 10 w stan !onState czyli niski.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13966">nemo</a> — 7 wrz 2016, o 07:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-06T22:43:11+01:00</updated>
<published>2016-09-06T22:43:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168218#p168218</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168218#p168218"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168218#p168218"><![CDATA[
Jak przetłumaczyć ten fragment kodu do Języka C<br />[syntax=cpp]digitalWrite(sigPin, !onState);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 6 wrz 2016, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nemo]]></name></author>
<updated>2016-09-06T20:32:46+01:00</updated>
<published>2016-09-06T20:32:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168182#p168182</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168182#p168182"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168182#p168182"><![CDATA[
Pełny projekt na Arduino jest na <!-- m --><a class="postlink" href="https://github.com/Hasi123/generate-ppm-signal/blob/master/Generate_PPM_signal_nodelay.ino" >https://github.com/Hasi123/generate-ppm ... odelay.ino</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13966">nemo</a> — 6 wrz 2016, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-06T19:32:34+01:00</updated>
<published>2016-09-06T19:32:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168159#p168159</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168159#p168159"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168159#p168159"><![CDATA[
Chodzi mi o nadanie ramki.<br />W jakim trybie mam skonfigurować timer TCT czy PWM, jak szybko ma liczycz?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 6 wrz 2016, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nemo]]></name></author>
<updated>2016-09-06T10:47:01+01:00</updated>
<published>2016-09-06T10:47:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168116#p168116</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168116#p168116"/>
<title type="html"><![CDATA[Re: PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168116#p168116"><![CDATA[
A chodzi o nadawanie czy odbiór?<br />Jeśli odbiór, to sprawa jest prosta - mierzysz czas między zboczami. Można to zrobić przez przerwanie, które jest wywoływane zboczem i odczytuje stan timera. Może potem zerować timer lub też zapamiętać jego wartość, by przy następnym przerwaniu obliczyć różnicę.<br />Jeśli chodzi o nadawanie, to potrzebujesz tablicy wartości długości okresu (w tym przypadku 8 elementowa), oraz indeksu/wskaźnika który element tablicy ma być aktywny. A działać ma to mniej więcej tak:<br />- zerujesz wyjście <br />- opóźnienie 0,3ms <br />- ustawiasz wyjście<br />- odczytujesz z tablicy wartość opóźnienia i wpisujesz go do timera<br />- zwiększasz indeks, by wskazywał następny czas<br />- czekasz na zakończenie zliczania timera<br /> i od nowa, aż zostaną wysłanie wszystkie impulsy i na koniec impuls stop.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13966">nemo</a> — 6 wrz 2016, o 10:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kuba]]></name></author>
<updated>2016-09-05T23:35:37+01:00</updated>
<published>2016-09-05T23:35:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168083#p168083</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168083#p168083"/>
<title type="html"><![CDATA[PPM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16151&amp;p=168083#p168083"><![CDATA[
Witam <br />Potrzebuję pomóc ź protokołem PPM.<br />Można to zrobić na jednym timerze? Nie mogę sobie wyobrazić, jak przeliczyć 8 kanałów.<br /><a href="https://obrazkiforum.atnel.pl/1439/dc7a8d4f9aecb442f3aee2be60dbe40f.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1439/dc7a8d4f9aecb442f3aee2be60dbe40f.gif" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1439">kuba</a> — 5 wrz 2016, o 23:35</p><hr />
]]></content>
</entry>
</feed>