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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-06-21T15:48:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=20903&amp;mode</id>
<entry>
<author><name><![CDATA[rafisoltys]]></name></author>
<updated>2018-06-21T15:48:36+01:00</updated>
<published>2018-06-21T15:48:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209168#p209168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209168#p209168"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209168#p209168"><![CDATA[
Udało mi się w końcu trafić na stronę, gdzie znalazłem potrzebne mi informację i kod.<br /><br />[syntax=c]float rev = 0;<br />int rpm;<br />int oldtime = 0;<br />int time;<br /><br />void isr() //interrupt service routine<br />{<br /> rev++;<br />}<br /><br />void setup()<br />{<br />Serial.begin(9600);            <br />attachInterrupt(0, isr, RISING);  <br />}<br /><br />void loop()<br />{<br /> delay(500);<br /> detachInterrupt(0);           <br /> time = millis()-oldtime;    <br /> rpm = (rev / time) * 6000;   <br /> oldtime = millis();           <br /> rev = 0;<br /><br /> Serial.print(&quot;Witaj&quot;);<br /> Serial.print(&quot;Prędkość obrotowa to:&quot;);<br /> Serial.print(rpm);<br /> attachInterrupt(0, isr, RISING);<br /><br />}[/syntax]<br /><br />Komunikacja z Serial jest. Wyświetla mi nawet wartość zmiennej rpm. <br />Problem jest tylko taki, że wartość ta jest w granicach 560-580 bez podłączenia czujnika (w wersji testowej chciałbym symulować czujnik przyciskiem).<br />Czy zwykły filtr RC powinien to wytłumić ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />Wynik zmiennej rpm jest zdecydowanie losowy, raz wskazuje 0, raz 300, raz 1000. Nie zależnie czy podłączony jest jakikolwiek przewód do PIN4<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />Wciśnięcie przycisku powoduje, że zmienna rpm przyjmuje wartość 0.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19178">rafisoltys</a> — 21 cze 2018, o 15:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-06-21T15:20:42+01:00</updated>
<published>2018-06-21T15:20:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209167#p209167</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209167#p209167"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209167#p209167"><![CDATA[
-sorry ale poprzednio zasugerowałem się ,że to ma być tiny2313 a nie tiny13 ( wejście reset pozostaje-aktualne).<br />-Arduino nie znam (zbyt dokładnie).<br />-Włącz: Plik/preferencje/pokaż szczegółowe... -oba ptaszki; pokaże się cały przebieg kompilacji z błędami i warningami<br />-Program na pewno nie jest właściwie przeportowany na tiny13 (np. Tiny13 nie ma rejestru TIMSK1)<br />-Nie wszystkie peryferia Tiny działają tak samo jak w Mega.<br />-Arduino używa jakichś timerów i przerwań, które mogą kolidować z Twoimi.<br />-dlaczego Tiny? nie lepiej jakieś nano lub micro ( 10-20PLN-cała płytka) itp. z Mega328P-nowszy, lepszy, więcej zasobów i dużo oprogramowania bez przeróbek. Wspierany przez arduino bez kombinacji.<br />- i ostatnie, gdzie to biedne Tiny13 ma wyjście &quot;serial&quot;? (w &quot;dużych&quot; avr-ach &quot;Tx&quot;).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 21 cze 2018, o 15:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafisoltys]]></name></author>
<updated>2018-06-21T14:48:56+01:00</updated>
<published>2018-06-21T14:48:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209165#p209165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209165#p209165"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209165#p209165"><![CDATA[
Skopiowałem wszystkie komunikaty. Program przeportowany był na ATTIny13A (przynajmniej jeśli chodzi o ustawienia TIMERA i LICZNIKA). <br />Krish tak jak wspomniałem, ja tego programu nie napisałem można wręcz powiedzieć, że próbuję go odpalić na swoim ATTiny i wyrzucić wynik prędkości do wyjścia szeregowego. Program mi nie działa. Staram się go zmusić do współpracy. <br /><br />Dziękuję, Ci za aktywność w tym wątku, ale problem dalej istnieje i ani trochę nie zbliżyłem się do jego rozwiązania. <br /><br />Zastanawiam się nad pójściem w arduinowe pulseIn() i mills() ? Może podsuniesz jakąś koncepcje jak ugryźć ten program ? Na tym etapie nie chcę uczyć się pisania programu od nowa, chciałbym już istniejący dostosować do swoich potrzeb. Na własne programy przyjdzie czas. I na pewno z rady dotyczącej zaczęcia od zmiany jasności diody skorzystam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19178">rafisoltys</a> — 21 cze 2018, o 14:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-06-21T14:10:08+01:00</updated>
<published>2018-06-21T14:10:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209164#p209164</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209164#p209164"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209164#p209164"><![CDATA[
1. Nie wspomniałeś, że używasz kompilacji w Arduino  IDE.<br />2. Program nie jest zgodny nomenklaturą z Arduino ( setup(), loop(), jest setup(), main()=pomieszane C z Arduino )<br />3. To nie jest całość komunikatów: u mnie jest błąd w linii:   Serial.println('Pomiar predkosci');<br />3. Jaką płytkę wybrałeś do kompilacji (Narzędzia/Płytka:...)?<br />4. czy Twoje Arduino wspiera Tiny2313?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 21 cze 2018, o 14:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafisoltys]]></name></author>
<updated>2018-06-21T13:35:15+01:00</updated>
<published>2018-06-21T13:35:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209163#p209163</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209163#p209163"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209163#p209163"><![CDATA[
<div class="quotetitle">krish napisał(a):</div><div class="quotecontent"><br />Kompiluje się? Chyba nie ten co zamieściłeś ( wklej komunikaty z kompilacji).<br /></div><br /><br />[syntax=c]Kompilacja zakończona.<br />Archiving built core (caching) in: C:\XXXX\AppData\Local\Temp\arduino_cache_182222\core\core_arduino_avr_uno_0c812875ac70eb4a9b385d8fb077f54c.a<br />Szkic używa 3296 bajtów (10%) pamięci programu. Maksimum to 32256 bajtów.<br />Zmienne globalne używają 201 bajtów (9%) pamięci dynamicznej, pozostawiając 1847 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19178">rafisoltys</a> — 21 cze 2018, o 13:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-06-21T12:36:49+01:00</updated>
<published>2018-06-21T12:36:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209161#p209161</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209161#p209161"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209161#p209161"><![CDATA[
Kompiluje się? Chyba nie ten co zamieściłeś ( wklej komunikaty z kompilacji).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 21 cze 2018, o 12:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafisoltys]]></name></author>
<updated>2018-06-21T11:34:43+01:00</updated>
<published>2018-06-21T11:34:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209156#p209156</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209156#p209156"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209156#p209156"><![CDATA[
<div class="quotetitle">krish napisał(a):</div><div class="quotecontent"><br />Ale żeby w domu upiec np. ciasto trzeba mieć przepis i trochę wiedzy i umiejętności.<br />Kolega łączy program w &quot;czystym&quot; C z fragmentami programu z Arduino, całość nie ma prawa nawet się skompilować ( o czym nie ma w poście ani słowa) a co dopiero działać.<br />Dlatego proponuję podłączyć LED zamiast silnika ( dla bezpieczeństwa eksperymentatora); po opanowaniu PWM ( dopiero podłączać silnik).<br /></div><br /><br />Program w obecnej postaci ma jedynie odczytywać prędkość obrotową i wysyłać do portu szeregowego, czego niestety nie robi <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />. Gdy będę miał wartość prędkości obrotowej zapisaną do zmiennej to z PWM sobie już poradzę.<br />Program się kompiluje bez błędów.<br /><br />Czy stabilizator na linii sygnałowej można zastąpić zwykłym dzielnikiem napięcia ??<br />Na różnych forach proponują też transoptor.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19178">rafisoltys</a> — 21 cze 2018, o 11:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-06-21T11:24:26+01:00</updated>
<published>2018-06-21T11:24:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209155#p209155</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209155#p209155"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209155#p209155"><![CDATA[
Ale żeby w domu upiec np. ciasto trzeba mieć przepis i trochę wiedzy i umiejętności.<br />Kolega łączy program w &quot;czystym&quot; C z fragmentami programu z Arduino, całość nie ma prawa nawet się skompilować ( o czym nie ma w poście ani słowa) a co dopiero działać.<br />Dlatego proponuję podłączyć LED zamiast silnika ( dla bezpieczeństwa eksperymentatora); po opanowaniu PWM ( dopiero podłączać silnik).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 21 cze 2018, o 11:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafisoltys]]></name></author>
<updated>2018-06-21T10:53:40+01:00</updated>
<published>2018-06-21T10:53:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209153#p209153</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209153#p209153"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209153#p209153"><![CDATA[
Autorem programu nie jestem. W prawdzie z oryginału zamieniłem tylko wyświetlanie wyniku z LCD na port szeregowy.<br />Migać diodą potrafię. <br />Nie potrafię korzystać z liczników i timerów i przerwań.Tzn nie potrafię napisać kodu, który zmierzy mi czas pomiędzy pierwszym zboczem rosnącym, a na przykład 13 zboczem rosnącym (Rozumiem, że licznik miałby zliczać do 13 i następnie wyzwalać przerwanie ????). Najlepiej byłoby gdyby, udało się z dużą powtarzalnością i dokładnością obliczyć czas pomiędzy następującymi po sobie zboczami.<br /><br />Uważam, że aby zjeść chleb nie trzeba od razu zostawać piekarzem, stąd mój post.<br /><br />Wiem, już np. ze stabilizator do tego rozwiązania się nie na da i muszę zastosować konwerter poziomów logicznych. I to jest wiedza, którą zdobyłem tutaj za którą dziękuję i proszę o jeszcze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />Niewykorzystanych pinów nie podpinasz bezpośrednio ani do VCC ani do GND (jak bardzo chcesz to stosuje się pull-up).<br /></div><br />Dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19178">rafisoltys</a> — 21 cze 2018, o 10:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-06-21T10:30:50+01:00</updated>
<published>2018-06-21T10:30:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209151#p209151</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209151#p209151"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209151#p209151"><![CDATA[
Jeszcze dużo nauki przed Kolegą.<br />&quot;Program&quot; to na razie jakaś bezładna mieszanka kodu w C oraz wstawek z Arduino.<br />Proponuję najpierw nauczyć się &quot;mrugać&quot; diodą LED (zamiast tranzystora BUZ), potem opanować PWM ( sterowanie jasnością tego LED=odpowiednik zmiany szybkości silniczka), potem opanować pomiar częstotliwości. Wtedy można połączyć to wszystko w jedną całość ( a przy okazji już trochę wiedzieć o uC i o programowaniu w C). <br /><br />ps.<br />Pin 1 w tiny2313 jest Reset-em , nawet jeżeli ten układ z 7805 zadziała to efektem będzie co chwilę reset uC.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 21 cze 2018, o 10:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2018-06-21T10:07:15+01:00</updated>
<published>2018-06-21T10:07:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209148#p209148</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209148#p209148"/>
<title type="html"><![CDATA[Re: Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209148#p209148"><![CDATA[
<div class="quotetitle">rafisoltys napisał(a):</div><div class="quotecontent"><br />Stabilizator U3 zastosowano w celu dopasowania sygnału wejściowego do logiki mikrokontrolera (Sygnał wejściowy: Stan wysoki powyżej 6,3 V, Sygnał niski poniżej 1,3 V. Częstotliwość max: 1 kHz, sygnał &quot;prostokątny&quot;)<br /></div>Nie tak Panie Kolego, nie tak <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zajrzyj jak to się robi na blog Mirka <!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2015/05/konwerter-poziomow-33v-ttl.html" >http://mirekk36.blogspot.com/2015/05/ko ... v-ttl.html</a><!-- m --><br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">rafisoltys napisał(a):</div><div class="quotecontent"><br />Niewykorzystane piny powinny być podpięte do VCC czy GND ??<br /></div>Niewykorzystanych pinów nie podpinasz bezpośrednio ani do VCC ani do GND (jak bardzo chcesz to stosuje się pull-up).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 21 cze 2018, o 10:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafisoltys]]></name></author>
<updated>2018-06-21T08:43:46+01:00</updated>
<published>2018-06-21T08:43:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209142#p209142</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209142#p209142"/>
<title type="html"><![CDATA[Sterownie prędkością obrotową silnika z ISOBUS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20903&amp;p=209142#p209142"><![CDATA[
Witajcie,<br /><br />W związku z tym, że mój brat prowadzi gospodarstwo rolne, a moja dusza inżyniera sprawia, że staram się &quot;ulepszać dobre&quot; zrodziła się koncepcja na elektryczne sterowanie wydajnością siewnika.<br />Jako, że z wykształcenia jestem mechanikiem, nie elektronikiem pewne kwestie spędzają mi sen z powiek. Schemat mojego projektu wygląda następująco: <br /><br /><a href="https://obrazkiforum.atnel.pl/19178/4b2a13156e168bd39770d0f422029fff.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/19178/4b2a13156e168bd39770d0f422029fff.png" alt="Obrazek" /></a><br /><br />Stabilizator U2 zastosowano w celu dostosowania napięcia zasilania dla mikrokontrolera.<br />Stabilizator U3 zastosowano w celu dopasowania sygnału wejściowego do logiki mikrokontrolera (Sygnał wejściowy:    Stan wysoki powyżej 6,3 V, Sygnał niski poniżej 1,3 V. Częstotliwość max: 1 kHz, sygnał &quot;prostokątny&quot;)<br />Silnik elektryczny M1 12V DC  3000 obr/min o mocy maksymalnej 220W z przekładnią ślimakową i=60.<br />MOSFET - BUZ11<br />Masa wspólna.<br /><br />Pytania do sprzętu:<br />Niewykorzystane piny powinny być podpięte do VCC czy GND ??<br />Czy rezystor R1 powinien być podciągnięty do VCC5V czy GND ? Czy wartość 1k ohm wystarczy ?<br /><br />2. Pisząc program chciałem bazować na zmodyfikowanej wersji przykładu prędkościomierza z <!-- w --><a class="postlink" href="http://www.mikrokontolery.blogspot.pl" >www.mikrokontolery.blogspot.pl</a><!-- w -->.<br />Moje umiejętności programistyczne okazały się jednak niewystarczające, żeby odczytać prędkość obrotową nawet na porcie szeregowym <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />[syntax=c]/* <br />OBROTOMIERZ v.1 <br /> <br />Obrotomierz przeznaczony do prostych pomiarów prędkości obrotowej. <br />Pokazuje: <br />- czas jednego obrotu, <br />- liczbę obrotów na sekundę (rps), <br />- liczbę obrotów na minutę (rpm). <br /> <br />Szczegóły: http://mikrokontrolery.blogspot.com/2011/04/obrotomierz-diy.html  <br /> <br />Autor: Dondu  <br />Data:  2012.11.25  <br />*/  <br />  <br />  <br />#include &lt;avr/io.h&gt;  <br />#include &lt;stdio.h&gt;  <br />#include &lt;avr/interrupt.h&gt;   <br />#include &lt;util/delay.h&gt;  <br /><br />  <br />//tutaj ustaw własne zasady pomiaru  <br />#define POMIAR_ILOSC_IMPULSOW_NA_OBROT 4  //ilość inpulsów na jeden obrót               - wg isobus 130 m/s<br />#define POMIAR_ILOSC_OBROTOW           10 //ile obrotów ma trwać pomiar                 - 13  jak 0,1 m/s ?<br />  <br />  <br />volatile unsigned long int  pomiar_ilosc_cykli;  <br />volatile unsigned int       ilosc_przepelnien;  <br />volatile unsigned char      pomiar_zbocze_nr;  <br />volatile unsigned char      pomiar_gotowy;  <br />  <br />volatile unsigned int       ICR1_moment_A;  <br />volatile unsigned int       ICR1_moment_B;  <br />  <br />void setup(){<br />  //otwarcie portu i ustawienie prędkości na 9600 bodów<br />  Serial.begin(9600);<br />  //wypisanie linijki tekstu<br />  Serial.println(&quot;Pomiar predkosci&quot;);<br /><br />}<br />//------------------------------------------------------  <br />  <br />ISR(TIMER1_CAPT_vect){  <br />  <br /> //Obsługa zdarzenia na ICP1   <br />  <br /> static unsigned int ICR1_aktualny; //wartość ICR1 złapana w aktualnie   <br />                                    //złapanym zboczu  <br />  <br /> //odczytaj złapany stan licznika  <br /> ICR1_aktualny = ICR1;  <br />  <br /> //czy to pierwsze złapane zbocze?  <br /> if(pomiar_zbocze_nr == 1){  <br />    <br />  //tak, pierwsze zbocze pomiarowe,   <br />    <br />  //uruchamiamy zliczanie przepełnień Timer1  <br />  <br />  //zgaś flagę przerwania od przepełnienia  <br />  TIFR1 |= (1&lt;&lt;TOV1);  <br />    <br />  //włącz przerwania od przepełnienia Timer1  <br />  TIMSK1 |= (1&lt;&lt;TOIE1);  <br />  <br />  //zeruj licznik przepełnień Timera1  <br />  ilosc_przepelnien = 0;  <br />  <br />  //zapamiętujemy stan licznika początku obrotu (moment A)  <br />  ICR1_moment_A = ICR1_aktualny;  <br />  <br /> }else{  <br />     <br />  //każde następne zbocza pomiarowe  <br />  <br />  //czy to ostatnie zbocze (koniec pełnego obrotu silnika)?  <br />  if(pomiar_zbocze_nr ==  POMIAR_ILOSC_IMPULSOW_NA_OBROT   <br />                          * POMIAR_ILOSC_OBROTOW){  <br />  <br />   //tak, wykryto ostatnie zbocze pomiarowe,   <br />   //czyli wykonał się pełny ostatni obrót tarczy  <br />  <br />   //wyłączamy przerwania z Input Capture Unit   <br />   //oraz przepełnienia Timer1  <br />   TIMSK1 &amp;= ~( (1&lt;&lt;ICIE1) | (1&lt;&lt;TOIE1) );  <br />     <br />   //zapamiętujemy zmienne dla main()  <br />   ICR1_moment_B  = ICR1_aktualny;  <br />   pomiar_gotowy  = 1;  <br />  <br />  }  <br />    <br />  //w pozostałych przypadkach nic nie robimy i czekamy na zliczanie   <br />  //dalszych zboczy  <br />   <br /> }  <br />  <br /> //zwiększ licznik wykrytych zboczy  <br /> pomiar_zbocze_nr++;  <br />  <br />}  <br />  <br />//------------------------------------------------------  <br />  <br />ISR(TIMER1_OVF_vect){  <br />  <br /> //powiększ licznik przepełnień Timera1  <br /> ilosc_przepelnien++;  <br />  <br />}  <br />  <br />//------------------------------------------------------  <br />  <br />  <br />void wykonaj_pomiar(void){  <br />  <br /> //Funkcja włącza pomiar   <br />  <br /> //zerujemy licznik przepełnień Timer0  <br /> ilosc_przepelnien = 0;  <br />  <br /> //ustawiamy nr pierwszego zbocza  <br /> pomiar_zbocze_nr = 1;  <br />  <br /> //zerujemy flagę gotowości pomiaru  <br /> pomiar_gotowy = 0;  <br />  <br /> //włącz przerwania z ICP1 Timer1  <br /> TIMSK1 |= (1&lt;&lt;ICIE1);  <br />  <br />}  <br />  <br />  <br />//------------------------------------------------------  <br />  <br />int main(void){  <br />  <br /> //zmienne do obliczeń  <br /> double czas_jednego_obrotu;  <br /> double obrotow_na_sekunde;  <br />  <br /> PORTB |= (1&lt;&lt;PB0);   //włącz pullup transoptora  <br /><br />  Serial.print('Witaj rozpoczynamy pomiar');<br />  <br /> //Ustawienie Timer1  <br /> TCCR1A = 0;  <br /> TCCR1B = (1&lt;&lt;CS10);   //preskaler 1, bez noise   <br />                             //canceler dla ICP1  <br />   <br /> //lub z modułem Noise Canceler:  <br /> //TCCR1B = (1&lt;&lt;CS10) | (1&lt;&lt;ICNC1); //preskaler 1, włącz   <br />                                         //noise canceler dla ICP1  <br />   <br /> sei();       //włącz przerwania globalne  <br />  <br /> wykonaj_pomiar();     //włącz pierwszy pomiar  <br />  <br /> //pętla główna  <br /> while(1){  <br />    <br />  if(pomiar_gotowy){  <br />     <br />   // gdy pomiar został wykonany  <br />  <br />   //obliczenia  <br />     <br />   pomiar_ilosc_cykli  =  65536 * ilosc_przepelnien - ICR1_moment_A   <br />                          + ICR1_moment_B;  <br />     <br />   czas_jednego_obrotu = (double) pomiar_ilosc_cykli   <br />                         / POMIAR_ILOSC_OBROTOW / F_CPU ;  <br />  <br />   obrotow_na_sekunde = 1.0 / czas_jednego_obrotu;  <br />  <br />   //wyświetlenie wyników  <br /> <br />  <br />   //czas jednego obrotu  <br />   Serial.print(1000.0 * czas_jednego_obrotu);  <br /> <br />   //obroty na sekundę  <br />   Serial.print(obrotow_na_sekunde);  <br />   <br />   //obroty na minutę  <br />   Serial.print(60*obrotow_na_sekunde);  <br />  <br />        <br />   //pomiary co pół sekundy  <br />   _delay_ms(500);     <br />  <br />   //wykonaj następny pomiar  <br />   wykonaj_pomiar();  <br />  <br />  }  <br /> }  <br />}[/syntax]<br /><br />Sygnał wejściowy określa prędkość pojazdu (130 Hz/m/s). Chciałbym, aby dla wartości około 4 m/s (520 Hz) PWM dla silnika był 100%, natomiast dla 0,5 m/s (ok 65Hz) 10%.<br />Chcę, aby odczyt i zmiana PWM realizowana był najlepiej co 13 Hz. Wiem, że program tej części jeszcze nie uwzględnia. Pokonało mnie samo wyświetlanie wartości prędkości na porcie szeregowym <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Z góry dziękuję za pomoc i dyskusję w temacie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19178">rafisoltys</a> — 21 cze 2018, o 08:43</p><hr />
]]></content>
</entry>
</feed>