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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-06-08T10:01:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11934&amp;mode</id>
<entry>
<author><name><![CDATA[RadekN]]></name></author>
<updated>2015-06-08T10:01:36+01:00</updated>
<published>2015-06-08T10:01:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131239#p131239</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131239#p131239"/>
<title type="html"><![CDATA[Re: Pomiar długości impulsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131239#p131239"><![CDATA[
Faktycznie przerwanie było wykonywane po restarcie, opóźnienia nic nie zmieniły. Uzupełniłem warunek wykonywany w przerwaniu do postaci: if ((edge_flag == 0) &amp;&amp; (ICR1 != 0)) - w takiej formie działa poprawnie.<br />ATmega 162, 8 MHz, impulsy od 50 do 100 us.<br />Dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10125">RadekN</a> — 8 cze 2015, o 10:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[P3ndz3l3k]]></name></author>
<updated>2015-06-07T19:28:57+01:00</updated>
<published>2015-06-07T19:28:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131183#p131183</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131183#p131183"/>
<title type="html"><![CDATA[Re: Pomiar długości impulsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131183#p131183"><![CDATA[
Nie chodziło nam o to kiedy pojawia się pierwszy impuls <br />lecz o to, że w momencie kiedy załączasz podciąganie a program leci dalej <br />i zanim narośnie napięcie na pinie wejściowym może zadziałać przerwanie od zbocza opadającego na które oczekujesz.<br />Zrób sobie debuger jedno-diodowy jaki pokazuje Mirek w poradniku <br /><br /><a href="http://mirekk36.blogspot.com/2014/04/puapki-programowe-debuger-na-jednej.html"  class="postlink">http://mirekk36.blogspot.com/2014/04/puapki-programowe-debuger-na-jednej.html</a> <br /><br />i sprawdź czy przypadkiem po resecie od razu nie<br />wykonywane jest przerwanie.<br /><br />A tak w ogóle to na jakim procku pracujesz, jakie ma taktowanie i jakie impulsy mierzysz (jak długie czasowo)?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3709">P3ndz3l3k</a> — 7 cze 2015, o 19:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RadekN]]></name></author>
<updated>2015-06-07T16:35:56+01:00</updated>
<published>2015-06-07T16:35:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131164#p131164</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131164#p131164"/>
<title type="html"><![CDATA[Re: Pomiar długości impulsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131164#p131164"><![CDATA[
Układy są ustabilizowane, niezależnie czy pierwszy impuls pojawi się po kilku czy kilkunastu sekundach, efekt jest taki sam, tzn. zmienna LastCapture ma wartość zero. Kolejne pomiary są już prawidłowe.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10125">RadekN</a> — 7 cze 2015, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomek]]></name></author>
<updated>2015-06-07T12:52:04+01:00</updated>
<published>2015-06-07T12:52:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131141#p131141</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131141#p131141"/>
<title type="html"><![CDATA[Re: Pomiar długości impulsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131141#p131141"><![CDATA[
Też nie jestem jeszcze aż tak do końca w temacie .... i poszerzył bym trochę teorię kolegi P3ndz3lka ....<br />Mikrokontroler posiada w sobie całą masę bloków które po resecie muszą się &quot;obudzić&quot; a nie wszystkie budzą się jednocześnie tylko w określonej kolejności ... Większość z nich potrzebuje do pracy prawidłowego taktowania więc najpierw musi się odpalić cała maszyneria zegara i taktowania a potem dopiero budzą się do roboty poszczególne bloki ...<br />Z tego co kojarzę istnieją specjalne bity konfiguracyjne których ustawieniem można regulować sprawy związane z opóźnieniami przy restarcie mikrokontrolera ...<br />Jak nie chcesz się za bardzo wczytywać i dochodzić szczegółowo co jest grane przed pierwszym pomiarem wstaw jakiś mały delay i pewnie wtedy pierwszy pomiar już będzie prawidłowy .. to potwierdzi naszą teorię.<br />Metody pomiarów parametrów impulsów to temat rzeka:  spotykałem się z takimi algorytmami że pomiar był wykonywany wiele razy a wynik uśredniany za pomocą przybliżenia ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=178">tomek</a> — 7 cze 2015, o 12:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[P3ndz3l3k]]></name></author>
<updated>2015-06-07T09:27:38+01:00</updated>
<published>2015-06-07T09:27:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131122#p131122</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131122#p131122"/>
<title type="html"><![CDATA[Re: Pomiar długości impulsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131122#p131122"><![CDATA[
Witaj <br />   Jeszcze nie jestem tak mocno oblatany w C ale <br />Mirek zawsze wspominał aby dać mały delay po załączeniu podciągania wewnętrznego aby się ustabilizowało napięcie na pinie procka.<br />Nawet pokazywał złe działanie programu w poradniku o mikroswitchach i ledach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3709">P3ndz3l3k</a> — 7 cze 2015, o 09:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RadekN]]></name></author>
<updated>2015-06-07T09:13:52+01:00</updated>
<published>2015-06-07T09:13:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131121#p131121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131121#p131121"/>
<title type="html"><![CDATA[Pomiar długości impulsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11934&amp;p=131121#p131121"><![CDATA[
Witam, program realizuje pomiar długości impulsu. Po wystąpieniu zbocza opadającego w procedurze przerwania zapamiętana jest wartość ICR1 w zmiennej LastCapture, w kolejnym przerwaniu po wystąpieniu zbocza narastającego odejmując wartości ICR1 - LastCapture otrzymamy długość impulsu. Program działa poprawnie za wyjątkiem pierwszego uruchomienia (po resecie). Sprawdziłem, że wtedy nie jest do zmiennej LastCapture przypisywana wartość ICR1, stąd błędna wartość długości impulsu. Proszę o podpowiedz, gdzie tkwi błąd.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;coin.h&quot;<br />volatile uint16_t impuls;// czas trwania impulsu<br />// flaga = 1 - informuje, że została wykryty impuls<br />volatile uint8_t coin_flag;<br />// flaga zboczy odpadające/narastające<br />volatile uint8_t edge_flag;<br /><br />void coin_init() {<br />DDR(COIN_PORT) &amp;= ~COIN_IN;// pin jako wejście<br />PORT(COIN_PORT) |= COIN_IN;// podciągnięcie pinu do VCC<br /><br />TCCR1B |= (1&lt;&lt;CS12);         // Timer1 / Preskaler 256<br /><br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);      // Zbocze opadające na ICP<br />TIMSK |= (1&lt;&lt;TICIE1);        // Przerwanie od ICP<br /><br />edge_flag = 0;// flaga występujących zboczy<br />impuls = 0;// zerowanie wartosci trwania impulsu<br />coin_flag = 0;// zerowanie flagi odbioru impulsu<br />}<br /><br />// procedura obsługi przerwania ICP1<br />ISR(TIMER1_CAPT_vect) {<br /><br />static uint16_t LastCapture;<br />static uint16_t PulseWidth;<br />if (edge_flag == 0) {<br />LastCapture = ICR1;<br />TCCR1B |= (1&lt;&lt;ICES1);// zmiana zbocza wyzwalającego na narastajace<br />edge_flag = 1;<br />}<br />else if (edge_flag == 1) {<br />PulseWidth = ICR1 - LastCapture;<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);      // Zbocze opadające na ICP<br />edge_flag = 0;<br />impuls=PulseWidth;<br />coin_flag = 1;// flaga pomiaru impulsu<br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10125">RadekN</a> — 7 cze 2015, o 09:13</p><hr />
]]></content>
</entry>
</feed>