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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-04-17T14:54:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11396&amp;mode</id>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-04-17T14:54:15+01:00</updated>
<published>2015-04-17T14:54:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126762#p126762</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126762#p126762"/>
<title type="html"><![CDATA[Re: Sterowanie czasem włączenia urządzenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126762#p126762"><![CDATA[
A po co tak skomplikowanie ?<br /><br />czas_calkowity = czas_zalaczenia + czas_wylaczenia;<br /><br />Rozwinę to jak będe przy kompie bo ciezko pisac z telefonu.<br /><br />Namazane ze smarta.<br /><br /><br />Ok jestem chwilowo przy komuterze więc napiszę jak ja to widzę:<br /><br />Tworzysz sobie zmienną w timerze programowym zwaną <strong>timer_licz_sekunda</strong><br /><br /><br />[syntax=c]ISR(TIMER2_COMP_vect){<br />uint16_t n;<br />n = timer_licz_sekunda; <br />if (n) timer_licz_sekunda = --n;<br />}[/syntax]<br /><br /><br />Następnie w funkcji lub pętli głównej programu robisz sobie to tak:<br /><br /><br />[syntax=c]czas_powietrze_caly = czas_powietrze_wl + czas_powietrze_wyl; // dodaj czasy wł / wył powietrza<br /><br /><br />if(!timer_licz_sekunda){ // jeżeli timer liczący sekundę = 0<br />timer_licz_sekunda = 1000; // ustaw timer liczący sekundę na 1000 (ms czyli 1 sek)<br />flaga_sekunda_powietrze++; // dodaj 1 do flaga_sekunda_powietrze<br />}<br /><br /><br />if(flaga_sekunda_powietrze &gt;= czas_powietrze_caly){ // jeżeli flaga sekunda powietrze jest większa bądź równa czasowi powietrza<br />flaga_sekunda_powietrze = 0; // ustaw flagę sekundy powietrze na 0<br />}<br /><br /><br />if(flaga_sekunda_powietrze &lt; czas_powietrze_wl){ // jeżeli flaga powietrze sekunda jest mniejsze od czas powietrze włączenia<br />POWIETRZE_ON; // załącz powietrze<br />}else{ // w przeciwnym wypadku<br />POWIETRZE_OFF; // wyłącz powietrze<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 17 kwi 2015, o 14:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2015-04-16T17:33:51+01:00</updated>
<published>2015-04-16T17:33:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126688#p126688</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126688#p126688"/>
<title type="html"><![CDATA[Re: Sterowanie czasem włączenia urządzenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126688#p126688"><![CDATA[
Moim zdaniem można by to zrobić w następujący sposób. Po pierwsze konfigurujesz sobie jakiś timer tak aby wywoływał przerwanie co 1 sekundę (bo rozumiem, ze czasy działania i przerwy będa nastawiane w sekundach).<br />Zarys programu mógłby wyglądać następująco:<br />[syntax=c]// definiujesz makra sterujące wyjściem<br />#define wyjscie_ON......<br />#define wyjscie_OFF......<br /><br />// definiujesz wartości początkowe nastaw<br />#define wartosc_poczatkowa_czasu_dzialania10<br />#define wartosc_poczatkowa_czasu_przerwy15<br /><br />// najpierw deklarujesz dwie zmienne<br />uint8_t czas_działania = wartosc_poczatkowa_czasu_dzialania;<br />uint8_t czas_przerwy = wartosc_poczatkowa_czasu_przerwy;<br /><br />// oraz zmienną timer do odmierzania czasu<br />volatile uint8_t timer;<br />// zmienna pomocnicza wskazująca czy to jest czas działania<br />volatile uint8_t dzialanie;<br /><br />// oczywiście dla zmiennych typu uint8_t uzyskamy wartośc maksymalną 255<br /><br />int main(void)<br />{<br />// w programie głównym napiszesz obsługę klawiszy, które będą ustawiac odpowiednie wartosci<br />// czasu działania i czasu przerwy oraz załadujesz do zmiennej timer czas pierwszego przedziału czasu <br />// przerwy lub działania i ustawisz odpowiednio wyjście na OFF lub ON<br />        //  i ustawiasz odpowiednio zmienną działanie na 0 lub 1<br />}<br /><br /><br />// a tak powinna wyglądac obsługa przerwania<br />ISR(....) // co między nawiasami zależy od tego jaki timer stosujesz<br />{<br />uint8_t x;<br /><br />x = timer;<br />if(x) timer = --x;<br />else<br />{<br />if(dzialanie)  // jeśli był czas działania<br />{<br />timer = czas_przerwy;   // to załaduj do licznika czas przerwy<br />dzialanie = 0;               // ustaw zmienną pomocniczą żeby wskazywała przerwę<br />wyjscie_OFF;               // wyłącz wyjście<br />}<br />else   // a jeśli poprzednio był czas przerwy<br />{<br />timer = czas_dzialania;   // załaduj do licznika czas działania<br />dzialanie = 1;                // ustaw zmienną pomocniczą na wskazywanie czasu działania<br />wyjscie_ON;                 // włącz wyjście<br />}<br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 16 kwi 2015, o 17:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafal9018]]></name></author>
<updated>2015-04-16T16:38:21+01:00</updated>
<published>2015-04-16T16:38:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126684#p126684</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126684#p126684"/>
<title type="html"><![CDATA[Sterowanie czasem włączenia urządzenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11396&amp;p=126684#p126684"><![CDATA[
Witam. Mam straszny problem z napisaniem warunków do sterowania mojego urządzenia. Urządzenie jakim chce sterować to napowietrzacz akwarystyczny. <br /><br />Założenie jest proste, dwie zmienne jedna od czasu pracy druga od interwału czyli spoczynku urządzenia. Nie mam w ogóle pomysłu jak do tego podejść, siedzę już pare godzin i nic <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Wpadłem na pomysł, żeby zrobić coś na zasadzie jak u Pana Mirka w BB przy obsłudze temperatury.<br /><br />Do celów testowych stworzyłem poniższy kod, wartość cmm zwiększam przyciskiem by obserwować co się dzieje. Wartość 5 wstawiłem na sztywno przy założeniu że czas pracy urządzenia to 5 sekund i czas spoczynku też 5 sekund. A przecież nie zawsze będą takie same czasy, raczej będą się różnić np. Czas pracy 20 sekund a czas spoczynku 12 sekund. Poprostu będą to zmienne które będzie można zmieniać.<br />[syntax=c]if( 0 == (cmm % 5) &amp;&amp; cmm &gt; 0 )PORTC |= LED2;<br />if( 1 == (cmm % 5) &amp;&amp; cmm &gt; 0 )PORTC &amp;= ~LED2;[/syntax]<br /><br />Kod, który wyżej podałem działa tak że doliczam do 5 zapala diodę już przy 6 ją gasi kolejno zapala przy 10. No nic dziwnego czysta matematyka wszystko działa tak jak należy. No ale niestety nie tak jakbym chciał. <br /><br />Chodzi o to, że nie umiem albo nie wiem którą drogą pójść. <br />Rozumiem kod, który napisałem tak dla jasności. Chodzi mi o to czy w ogóle w takie rozwiązania mam iść. <br /><br />Bardzo proszę o wskazówki jak można rozwiązać sterowanie takim urządzeniem.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3441">Rafal9018</a> — 16 kwi 2015, o 16:38</p><hr />
]]></content>
</entry>
</feed>