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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-28T22:21:04+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4951&amp;mode</id>
<entry>
<author><name><![CDATA[AndreAs]]></name></author>
<updated>2013-11-28T22:21:04+01:00</updated>
<published>2013-11-28T22:21:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58973#p58973</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58973#p58973"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58973#p58973"><![CDATA[
Wiem widzę , że to są fragmenty  jakiegoś programu  , ważne  że dają wyobrażenie i od czegoś można zacząć naukę .Jeszcze raz dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2092">AndreAs</a> — 28 lis 2013, o 22:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[IUVOit]]></name></author>
<updated>2013-11-28T22:06:36+01:00</updated>
<published>2013-11-28T22:06:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58972#p58972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58972#p58972"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58972#p58972"><![CDATA[
To nie jest skomplikowane, tylko ja za bardzo naplątałem!!! To jest wycinek z większego programu i dlatego jest nie czytelny, niektóre rzeczy są do niczego nie potrzebne:)<br /><br />Najważniejsze w tym wszystkim jest to:<br />Próbkujesz wejście co określony czas np Tp. Robisz to albo na timerze lub w pętli while(). No i badasz jaki był stan wcześnijszy a jaki jest obecnie i na tej podstawie stwierdzasz, czy jest to zbocze opadające czy narastające. <br /><br />Musisz jeszcze wyeliminować drgania styków. Przykładowa eliminacja. Jeżeli próbkowanie jest &quot;częste&quot; to badasz np 3 próbki. Jeżeli każda z tych próbek jest taka sama to masz np stan wysoki lub niski. Jeżeli chodz jedna z próbek ma inny stan to znaczy, że próbkowanie odbyło się podczas zmiany stanu. Taki mały buforek <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=94">IUVOit</a> — 28 lis 2013, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreAs]]></name></author>
<updated>2013-11-28T21:55:24+01:00</updated>
<published>2013-11-28T21:55:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58966#p58966</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58966#p58966"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58966#p58966"><![CDATA[
Kurcze stary to bardziej skomplikowane niż myslałem , ale spokojnie troche czasu i to rozgryze . A na razie wielkie dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2092">AndreAs</a> — 28 lis 2013, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[IUVOit]]></name></author>
<updated>2013-11-28T21:25:45+01:00</updated>
<published>2013-11-28T21:25:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58961#p58961</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58961#p58961"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58961#p58961"><![CDATA[
Na podstawie Mirkowych poradników i swoich przemyśleń napisałem taki programik. Jest on wycięty z owiele wiekszego wiec może być coś nie tak <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wszystko miałem w różnych plikach ale w skrócie powinno to tak chodzić.<br /><br />Jest struktura która opisuje właściwości wejścia:<br />Typ wejścia: NO/NC<br />Czas krótkiego naciśnięcia:xxx[ms]<br />Czas długiego naciśnięcia: xxx[ms]<br /><br />Podczas wywołania krótkiego naciśnięcia jest wywoływana jedna akcja, Jak naciśniesz długo to inna akcja i krótkie naciśnięcie jest pomijane.<br /><br />Jezeli wejscie jest typu NO to stan aktywny jest zwarciem wejscia, jezeli wejscie jest typu NC to stanem aktywnym jest rozwarcie wejscia.<br /><br />Funkcja rozpoznaje zbocza narastające i opadające <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Prześledź listing a na pewno znadzjdziesz odpowiedz na swoje pytanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Funkcje nie są za bardzo elastyczne tak jak to robi zawsze Mirek albo bardzij doswiadczeni koledzy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Ale wszystko działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />[syntax=c]typedef struct {<br /> volatile uint8_t *KPIN; //Stan pinów na PORTx<br /> uint8_t key_mask;<br /> uint8_t typ_we;         //typ wejścia NO-0; NC-1<br /> uint8_t czas_krotki;    //0..250 *0,1&#91;s&#93; / czas krotkiego nacisniecia<br /> uint8_t czas_dlugi;     //0..250 *0,1&#91;s&#93; / czas dlugiego nacisniecia<br /> uint8_t clik;           //<br />/*Zmienna clik przyjmuje stany<br />NotAction-&gt; brak akcji<br />Short-&gt; krotkie nacisniecie <br />Long-&gt; długie nacisniecie<br />OnActiv-&gt; przycisk aktywny. Dla wejścia NO- zwarty, dla wejscia NC- rozwarty<br />RisingEdge-&gt; wystąpienie zbocza*/<br /> uint8_t stan;           // 1:wejscie Naruszone / 2: wejscie Nienaruszone<br />} TBUTTON;[/syntax]<br /><br />Funkcja opisująca akcje związane z przyciskiem:<br />[syntax=c]void key_press1( TBUTTON * btn ) {<br /><br />static uint8_t tim1,tim2; //zm. lokalna eliminujaca dgrania stykow<br />static uint8_t we_T_1,we_T; //zm. lokalne (z pamięcią) przechowujące stany przycisków<br />                            //we_T_1 - stan wejścia w chwili (T-1)<br />//we_T - stan wejścia w chwili (T)<br />static uint8_t krok;          //zm. lokalne (z pamięcią) przechowujaca czas nacisniecia<br />        <br />        btn-&gt;clik=NotAction; //brak akcji<br />        if(*btn-&gt;KPIN &amp; btn-&gt;key_mask)//nacisniecie przycisku<br />{<br />          tim1++;                       //drgania stykow<br />  if(!tim1)                     //drgania stykow <br />    if(*btn-&gt;KPIN &amp; btn-&gt;key_mask) we_T=1;  //wejscie rozwarte <br />}<br />else<br />{<br />  tim2++;                       //drgania stykow<br />  if(!tim2)                     //drgania stykow <br />     we_T=0;                         //wejscie zwarte (dla NO)<br />        }<br />//we_T - aktualny stan wejścia  /  we_T_1 - poprzedni stan wejścia<br />//1: przycisk rozwarty / 0: zwarty<br /><br />         //ZBOCZE OPADAJACE - koniec &quot;stanu aktywnego&quot; wejścia NC<br /> if(we_T_1==1 &amp;&amp; we_T==0){   <br />if(btn-&gt;typ_we==1)   //typ wejscia NC<br />{<br /> if(krok &lt; btn-&gt;czas_krotki)btn-&gt;clik=Short; //krotkie nacisniecie NC<br /> if(krok &gt; btn-&gt;czas_dlugi) btn-&gt;clik=Long; //dlugie nacisniecie NC<br /> krok=0;<br />} <br /><br /> }<br /> //STAN NISKI - przycisk naciśnięty<br /> if(we_T_1==0 &amp;&amp; we_T==0){  <br />           if( !Tim1we &amp;&amp; btn-&gt;typ_we==0) { //TimWe==1 oraz wejście jest <br /> Tim1we=10;                     // zm. globalna impulsow co 0,1 sekundy, Timer programowy         <br /> krok++;                   //krok - zlicza impulsy, na tej podstawie jest <br /> if(krok&gt;254)krok=254;     //wyznaczone czy przycisk został krótko czy <br />}                          //długo naciśnięty - typ NO<br /> }<br /><br /> //STAN WYSOKI - przycisk nie naciśnięty<br /> if(we_T_1==1 &amp;&amp; we_T==1) {  <br />           if( !Tim1we &amp;&amp; btn-&gt;typ_we==1) { //Timer liczy jak jest to wejscie typu NC<br /> Tim1we=10;                 // zm. globalna impulsow co 0,1 sekundy, , Timer programowy   <br /> krok++;                   //krok - zlicza impulsy, na tej podstawie jest <br /> if(krok&gt;254)krok=254;     //wyznaczone czy przycisk został krótko czy <br />}                          //długo naciśnięty - typ NC<br />           <br /> }<br /> //ZBOCZE NARASTAJĄCE - koniec &quot;stanu aktywnego&quot; wejścia NO<br /> if(we_T_1==0 &amp;&amp; we_T==1) {  <br />if(btn-&gt;typ_we==0)    //typ wejscia NO <br />{<br /> if(krok&lt;btn-&gt;czas_krotki)btn-&gt;clik=Short; //krotkie nacisniecie NO<br /> if(krok&gt;btn-&gt;czas_dlugi)btn-&gt;clik=Long;  //dlugie nacisniecie NO<br /> krok=0;              //wyzerowanie licznika impulsów dla wejścia NO - &quot;puszczenie przycisku&quot;<br />} <br /> }<br /><br /> btn-&gt;stan=we_T;    //stan wejścia w chwili T, dla wejścia typu NO<br /> if(btn-&gt;typ_we)btn-&gt;stan=~we_T; //stan wejścia w chwili T, dla wejścia NC<br /><br /> we_T_1=we_T;    //podstawienie stanu wejścia we(T-1)=we(T)<br />}[/syntax]<br /><br />[syntax=c]//uzupełnij odpowiednio strukturę opisującą przycisk: Typ wejścia: NO/NC, czas krótkiego, długiego naciśnięcia itd<br />while(1) {<br />        key_press1( &amp;key1 );//(ustawienia.h)<br />       //Wartości zwracane przez funkcję-&gt; btn.clik=Short; btn.clik=Long;<br /><br />       }[/syntax]<br /><br />Możesz zmodygikować funkcję i użyć callback, wówczas byś wpisywał wskaźnik do funkcji...  <br /><br />Na listingu akcję ze zboczem opadającym masz w mijscu, gdzie jest opis:<br /> //ZBOCZE OPADAJACE - koniec &quot;stanu aktywnego&quot; wejścia NC<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />Rysunki pomagające zrozumieć kod <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/94/50a397b4cb2760bd336afe80e4a5d595.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/94/50a397b4cb2760bd336afe80e4a5d595.jpg" alt="Obrazek" /></a><br /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/94/3b2e8f3cad0c42bcee3a9a2b9de2c2b6.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/94/3b2e8f3cad0c42bcee3a9a2b9de2c2b6.jpg" alt="Obrazek" /></a><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/94/9882b768e75e68018d88ddf000fd194a.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/94/9882b768e75e68018d88ddf000fd194a.jpg" alt="Obrazek" /></a><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br /><div class="quotetitle">AndreAs napisał(a):</div><div class="quotecontent"><br />Zaraz , zaraz czy ja dobrze zrozumiałem , tworze funkcję zmiany stanu wejścia z dwoma argumentami jeden to stan aktualny , drugi stan jaki był  przed naciśnięciem klawisza a w ciele funkcji załatwić sprawe instrukcjami warunkowymi if i else , a Tp zrealizować na Timer0 .Jeżeli się mylę to mnie popraw bardzo proszę . Dzieki z góry.<br /></div><br /><br />Dobrze mówisz <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Poniżej przedstawiem pseudokod dla wejścia Typu NO (Normal Open).<br /><br />Jeżeli przycisk jest naciśnięty i zostanie puszczony to funkcja zwróci 1, w przeciwnym wypadku będzie zwracała 0;<br /><br /><br />FunkcjaZmianyStanu()<br />{<br /> Stan_aktualny= stan_chwila(T);<br /> Stan_wczesnijszy=Stan_aktualny;<br /> <br /> if (Stan_aktualny==0 AND Stan_wczesnijszy==1) return 1; else return 0;<br />}<br /><br /><br /><br />while()<br />{<br />  If( FunkcjaZmianyStanu() ) DIODA_TOG; // Jeżeli zbocze opadające zmień stan diody na przeciwny<br />}<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 19 minutach ]</span></strong><br /><br />W tym pseudokodzie nie uwzględniłem drgań styków. Masz to bardzo dobrze opisane w Mirkowych poradnikach. Muszisz powprowadzać małe Timerki. <br /><br />Próbkowanie wejść możesz zrobić w przerwaniach od Timera jest to lepsze rozwiązania ponieważ czasy próbkowania będą stałe niezależne od pętli głównej while i jej obiegów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=94">IUVOit</a> — 28 lis 2013, o 21:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreAs]]></name></author>
<updated>2013-11-28T20:32:24+01:00</updated>
<published>2013-11-28T20:32:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58957#p58957</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58957#p58957"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58957#p58957"><![CDATA[
Zaraz , zaraz czy ja dobrze zrozumiałem , tworze funkcję zmiany stanu wejścia z dwoma argumentami jeden to stan aktualny , drugi stan jaki był  przed naciśnięciem klawisza a w ciele funkcji załatwić sprawe instrukcjami warunkowymi if i else , a Tp zrealizować na Timer0 .Jeżeli się mylę to mnie popraw bardzo proszę . Dzieki z góry.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2092">AndreAs</a> — 28 lis 2013, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[IUVOit]]></name></author>
<updated>2013-11-28T18:34:47+01:00</updated>
<published>2013-11-28T18:34:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58947#p58947</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58947#p58947"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58947#p58947"><![CDATA[
Tak bardzo ogólnie:<br /><br />Sprawdzasz stan wejścia w chwili T, zapamiętujesz go [Stan aktualny na wejściu]<br /><br />Sprawdzasz stan wejścia w chwili T-Tp (Tp - czas próbkowania) [Stan jaki był na wejściu]<br /><br />Załóżmy:<br />1- wejście naruszone<br />0- brak naruszenia<br /><br />Jeżeli(Stan_w_chwili(T)==0  AND  Stan_w_chwili(T-Tp)==0) Stan niski<br />Jeżeli(Stan_w_chwili(T)==1  AND  Stan_w_chwili(T-Tp)==0)  Zbocze narastające<br />Jeżeli(Stan_w_chwili(T)==1  AND  Stan_w_chwili(T-Tp)==1) Stan wysoki<br />Jeżeli(Stan_w_chwili(T)==0  AND  Stan_w_chwili(T-Tp)==1) Zbocze opadające<br /><br />Każde wejście może mieć 4 stany (Stan niski, zbocze narastające, stan wysoki, zbocze opadające) Każdy z tych stanów można oprogramować.<br /><br />Podczas badania aktualnego stanu wejścia wprowadź &quot;mały&quot; Timer programowy aby wyeliminować drgania styków.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=94">IUVOit</a> — 28 lis 2013, o 18:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Juffre]]></name></author>
<updated>2013-11-28T18:27:22+01:00</updated>
<published>2013-11-28T18:27:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58946#p58946</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58946#p58946"/>
<title type="html"><![CDATA[Re: Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58946#p58946"><![CDATA[
Mozesz przez przerwanie zewnetrzne reagujace na zbocze opadajace i w przerwaniu bawic sie ledem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=473">Juffre</a> — 28 lis 2013, o 18:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AndreAs]]></name></author>
<updated>2013-11-28T18:13:50+01:00</updated>
<published>2013-11-28T18:13:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58944#p58944</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58944#p58944"/>
<title type="html"><![CDATA[Jak załączać diode zboczem opadającym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4951&amp;p=58944#p58944"><![CDATA[
W książce BB  Mirka są przykłady jak sterować diodą na różne sposoby , ale zboczem narastającym , a jak sterować zboczem opadającym?. Jakieś wskazówki. Z góry dzięki i Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2092">AndreAs</a> — 28 lis 2013, o 18:13</p><hr />
]]></content>
</entry>
</feed>