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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-18T09:52:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11079&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2015-03-18T09:52:16+01:00</updated>
<published>2015-03-18T09:52:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123791#p123791</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123791#p123791"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123791#p123791"><![CDATA[
A odnośnie pytania w pierwszym poście... Kiedy już uruchomisz przerwania i zrobisz timer programowy  (aby nie używać w pętli głównej 'delay') to tworzysz sobie nową zmienną, którą zwiększasz z interwałem czasowym ustalonym przez ten timer (czyli np. co 100ms lub nawet sekundę) gdy przycisk będzie wciśnięty i kiedy zmienna osiągnie odpowiednią wartość - czyli dla wspomnianych 100ms jedna minuta zostanie naliczona po 600 odliczeniach, a przy interwale 1s po 60 odliczeniach - załączasz jedynkę na wybranym porcie aby włączyć przekaźnik, natomiast gdy przycisk nie jest wciśnięty (co jest równoznadzne z jego puszczeniem) permanentnie zerujesz tą dodatkową zmienną i podajesz zero na port. Dla każdego przyciku robisz analogicznie czyli jedna dodatkowa zmienna. Timer liczący interwał wystarczy tylko jeden wspólny. Myślę, że to chyba najprostszy sposób, ale podstaw programowych (czyli składnia instrukcji, itp) szukaj w książkach lub poradnikach. Z czytym sumieniem polecam na początek Mirkowego BB.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 18 mar 2015, o 09:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2015-03-18T08:51:43+01:00</updated>
<published>2015-03-18T08:51:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123784#p123784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123784#p123784"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123784#p123784"><![CDATA[
Procedury obsługi przycisków i przekaźników są bardzo krótkie więc ewentualnie można je przenieść do przerwań (co do połączeń i wykrywania wciśnięcia proponuję zobaczyć rozdział z bb &quot;Pilot na podczerwień&quot;).<br />Jeśli czasy zadziałania są krytyczne to takie rozwiązanie jest bardzo dobre i nie zaszkodzą mu żadne delaye i pętle while w głównej pętli programu, choćbyś podłączył 5 wyświetlaczy i 10 czujników <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Wysłane z mojego GT-S7710<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2954">HCOOH</a> — 18 mar 2015, o 08:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-03-17T15:27:19+01:00</updated>
<published>2015-03-17T15:27:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123737#p123737</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123737#p123737"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123737#p123737"><![CDATA[
<div class="quotetitle">xairo napisał(a):</div><div class="quotecontent"><br />Ale naszło mnie teraz takie &quot;zastanowienie&quot;.<br />Co jeżeli będę chciał wprowadzić do kodu obsługę wyświetlacza. <br />Dojdzie wtedy kilka linijek kodu w funkcji MAIN. Jak to wpłynie na czas reakcji urządzenia na przycisk?<br />Domyślam się, że jeszcze przy samym wyświetlaczu wpływ będzie nieznaczny, jednak co jak bym miał tych linijek kodu kilkadziesiąt... wykonujących np różne przekształcenia typu odczyt temperatury...<br />Z każdym takim elementem (wyświetlacz, temperatura, kolejny przycisk) czas obsługi pojedynczego zdarzenia się wydłuża... czy może wcale  nie zawracać sobie tym głowy, gdyż to i tak będę czasy rzędu [ms]?<br /></div><br /><br />Tym się nie przejmuj procesor się wyrobi nawet jak dojdzie obsługa temperatury, wyświetlacza cy innych obliczeń <br />użyj wtedy kwarc zewnętrzny minimum 8MHz w górę i procesor będzie się wyrabiał &quot;a i tak przez większość czasu będzie się zastanawiał co by tu jeszcze zrobić&quot;<br />warunek to nie używanie   _delay_ms(time); bo to akurat go zawiesza na określony czas ... poczytaj o timerach i na nich działaj wtedy nie będzie problemu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 17 mar 2015, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xairo]]></name></author>
<updated>2015-03-17T14:59:07+01:00</updated>
<published>2015-03-17T14:59:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123735#p123735</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123735#p123735"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123735#p123735"><![CDATA[
Nie zwracając uwagi na błędy w kodzie odnoście źle przypisanych portów C,B bo i tak porty będę ustawiał po podłączeniu wszystkiego do procka, to mój zamysł całości chyba jest już dobry.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//Przekaźnik 1<br />#define TM15// minuty //*60*1000<br />#define IN1 (1&lt;&lt;PC1)<br />#define OUT1 (1&lt;&lt;PB1)<br /><br />//Przekaźnik 2<br />#define TM23// minuty //*60*1000<br />#define IN2 (1&lt;&lt;PC2)<br />#define OUT2 (1&lt;&lt;PB2)<br /><br />//Przekaźnik 3<br />#define TM35// minuty //*60*1000<br />#define IN3 (1&lt;&lt;PC3)<br />#define OUT3 (1&lt;&lt;PB3)<br /> <br />//Przekaźnik 4<br />#define TM43// minuty //*60*1000<br />#define IN4 (1&lt;&lt;PC4)<br />#define OUT4 (1&lt;&lt;PB4)<br /><br />uint8_t IN1_lock, IN2_lock, IN3_lock, IN4_lock;<br /><br />// Funkcje zmieniające stan przekaźników<br />void P1_change(void) <br />{<br />PORTC ^= OUT1;<br />} <br />void P2_change(void) <br />{<br />PORTC ^= OUT2;<br />}<br />void P1_change(void) <br />{<br />PORTC ^= OUT3;<br />}<br />void P2_change(void) <br />{<br />PORTC ^= OUT4;<br />}<br /><br />void IN_active( uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) ;<br />  <br />// Program główny<br />int main(void) <br />{ <br />// Konfiguracja mikrokontrolera<br />PORTC |= IN1 | IN2 | IN3 | IN4;// podciągamy linie wejściowe do VCC<br />DDRB |= OUT1| OUT2| OUT3|OUT4;// piny sterowania przekaźnikami<br /><br />// <br />_delay_ms(10);<br /> <br />// Pętla główna programu<br />while(1) <br />{<br />IN_active ( &amp;IN1_lock, &amp;PINC, IN1, P1_change );<br />IN_active ( &amp;IN2_lock, &amp;PINC, IN2, P2_change );<br />IN_active ( &amp;IN3_lock, &amp;PINC, IN3, P3_change );<br />IN_active ( &amp;IN4_lock, &amp;PINC, IN4, P4_change );<br />}<br />}<br /> <br />void IN_active(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) <br />{ <br />register uint8_t IN_low = (*KPIN &amp; key_mask);<br /> <br />if( !*klock &amp;&amp; !IN_low ) <br />{<br />*klock = 1;<br />// reakcja na PRESS (wcinięcie przycisku)<br />if(kfun) kfun();<br />} <br />else if( *klock &amp;&amp; IN_low )<br />(*klock)++;<br />}[/syntax]<br /><br />Jeszcze tylko czasowe opóźnienie muszę wprowadzić w życie i gotowe <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />   ... chyba...<br /><br />Ale naszło mnie teraz takie &quot;zastanowienie&quot;.<br />Co jeżeli będę chciał wprowadzić do kodu obsługę wyświetlacza. <br />Dojdzie wtedy kilka linijek kodu w funkcji MAIN. Jak to wpłynie na czas reakcji urządzenia na przycisk?<br />Domyślam się, że jeszcze przy samym wyświetlaczu wpływ będzie nieznaczny, jednak co jak bym miał tych linijek kodu kilkadziesiąt... wykonujących np różne przekształcenia typu odczyt temperatury...<br />Z każdym takim elementem (wyświetlacz, temperatura, kolejny przycisk) czas obsługi pojedynczego zdarzenia się wydłuża... czy może wcale  nie zawracać sobie tym głowy, gdyż to i tak będę czasy rzędu [ms]?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9026">xairo</a> — 17 mar 2015, o 14:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-16T21:55:18+01:00</updated>
<published>2015-03-16T21:55:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123672#p123672</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123672#p123672"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123672#p123672"><![CDATA[
<div class="quotetitle">xairo napisał(a):</div><div class="quotecontent"><br />sory za bezpośredniość<br /></div><br /><img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> żaden problem .... ale w tym poradniku pokazałem właśnie dość prostą a skuteczną obsługę przycisków i to obsługę nieblokującą - a tobie o to właśnie chodzi ponoć wg pierwszego postu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 mar 2015, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xairo]]></name></author>
<updated>2015-03-16T21:50:35+01:00</updated>
<published>2015-03-16T21:50:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123670#p123670</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123670#p123670"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123670#p123670"><![CDATA[
Moja żona mówi już na Ciebie wujek Mirek tyle poradników już oglądałem ;] - sory za bezpośredniość ;]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9026">xairo</a> — 16 mar 2015, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-16T21:42:47+01:00</updated>
<published>2015-03-16T21:42:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123667#p123667</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123667#p123667"/>
<title type="html"><![CDATA[Re: Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123667#p123667"><![CDATA[
<div class="quotetitle">xairo napisał(a):</div><div class="quotecontent"><br />Do tej pory programowałem raczej tylko w PHP i proste programy w C na studiach więc nie jest mi łatwo przesiąść się od razu na procki.<br /></div><br />Zrozum - dlatego zdecydowanie warto zacząć od książki: <br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />a zanim ją dorwiesz - oglądaj sobie czasem mojego bloga i podpatruj pewne techniki programowania (z takich właśnie poradników do książek) - też ci się mogą przydać:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html" >http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 mar 2015, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xairo]]></name></author>
<updated>2015-03-16T21:32:47+01:00</updated>
<published>2015-03-16T21:32:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123659#p123659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123659#p123659"/>
<title type="html"><![CDATA[Prosty program -na przeraniach z timera?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11079&amp;p=123659#p123659"><![CDATA[
Witam.<br />Mój pierwszy post. Nie do końca jeszcze znam zasady jakie tu panują.<br /><br />Chciał bym napisać program który na podstawie stanu przycisków (4szt) zmieni mi odpowiednio wyjścia sterujące przekaźnikami. <br /><br />Czyli zasada prosta:<br />Wciskamy Przycisk_1 i trzymamy- po 1min załącza się Przekaźnik_1. <br />Puszczamy Przycisk_1- natychmiast wyłącza się Przekaźnik_P1.<br /><br />I tak samo w pozostałych 3 przypadkach. Różne będą tylko czasy.<br /><br />Mam problemy ze zrozumieniem logicznym zasady działania takiego programu dla 4 przycisków tak aby działało to wszystko w jednym momencie -niezależnie. Do tej pory programowałem raczej tylko w PHP i proste programy w C na studiach więc nie jest mi łatwo przesiąść się od razu na procki.<br /><br />Jeżeli jesteście w stanie coś mi podpowiedzieć był bym wdzięczny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9026">xairo</a> — 16 mar 2015, o 21:32</p><hr />
]]></content>
</entry>
</feed>