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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-26T11:31:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3982&amp;mode</id>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-08-26T11:31:59+01:00</updated>
<published>2013-08-26T11:31:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47114#p47114</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47114#p47114"/>
<title type="html"><![CDATA[Re: Menu jak podejść do tego bardziej wyrafinowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47114#p47114"><![CDATA[
<div class="quotetitle">MirekP napisał(a):</div><div class="quotecontent"><br />No tak ale mi chodziło zebym sterował procesam za pomocą micro-switchy a nie żeby wykonywały się zawsze z okresloną zwłoką czasową. Chcę mieć możliwość selektywnego wybrania danej opcji.<br /></div><br /><br />To było raczej tutułem wstępu. Chodziło o pokazanie idei usunięcia _delay_ms. Najlepiej jest chyba zacząć od tego, żeby płynnie operować timerami, bo to podstawa działania jeśli chodzi o programowanie nieliniowe.<br /><br /><a href="http://forum.atnel.pl/topic3887.html"  class="postlink">http://forum.atnel.pl/topic3887.html</a><br />Tutaj masz dyskusję związaną z tematem oraz z obsługą klawiszy w oparciu i timery.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 26 sie 2013, o 11:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-26T08:26:47+01:00</updated>
<published>2013-08-26T08:26:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47097#p47097</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47097#p47097"/>
<title type="html"><![CDATA[Re: Menu jak podejść do tego bardziej wyrafinowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47097#p47097"><![CDATA[
<div class="quotetitle">MirekP napisał(a):</div><div class="quotecontent"><br />Chcę mieć możliwość selektywnego wybrania danej opcji.<br /></div><br /><br />To zacznij jednak poznawać programowanie strukturalne oparte m.in o timery programowe i zdarzenia a nie to co teraz robisz czyli programowanie LINIOWE.<br /><br />Wyżej to bardzo dobra sugestia - tylko ty na razie nie wiesz pewnie w ogóle o co w tym chodzi ....<br /><br />dlatego na początek poczytaj sobie to:<br /><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 --><br /><br />a docelowo pomyśl jednak o poczytaniu rozdziału pt:<br /><br />&quot;wstęp do systemów czasu rzeczywistego&quot;<br /><br />w Bluebooku: <!-- 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 />bo być może tam jeszcze nie dotarłeś albo omijasz ten rozdział bojąc się, że to coś strasznie trudnego<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 sie 2013, o 08:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirekP]]></name></author>
<updated>2013-08-26T07:12:45+01:00</updated>
<published>2013-08-26T07:12:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47094#p47094</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47094#p47094"/>
<title type="html"><![CDATA[Re: Menu jak podejść do tego bardziej wyrafinowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47094#p47094"><![CDATA[
No tak ale mi  chodziło zebym sterował procesam za pomocą micro-switchy a nie żeby wykonywały się zawsze z okresloną zwłoką czasową. Chcę mieć możliwość selektywnego wybrania danej opcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1621">MirekP</a> — 26 sie 2013, o 07:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-08-26T02:15:08+01:00</updated>
<published>2013-08-26T02:15:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47087#p47087</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47087#p47087"/>
<title type="html"><![CDATA[Re: Menu jak podejść do tego bardziej wyrafinowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47087#p47087"><![CDATA[
Głównym podejściem prowadzącym do eliminacji _delay_ms jest zastosowanie Timerów programowych napędzanych timerem sprzętowym (najlepiej działającym w trybie CTC).<br /><br />Zasada jest taka, że odpalasz sobie jeden z timerów sprzętowych w procu, żeby sobie tykał i liczył. Jego licznik będzie zwiększał się za każdym cyknięciem z predkością wynikającą z ustawionego preskalera.<br />Dla przykładu  <br />F_CPU 16 MHz i preskaler 1024 spowoduje podzielenie 16MHz przez 1024 czyli licznik będzie zliczał impulsy o częstotliwości 15625 Hz. Włączasz sobie obsługę przerwania na zdarzenie CompareMatch czyli sytuacje gdy wartość licznika osiągnie zadaną wartość którą zapisujesz do rejestru OCRx. W przerwaniu inkremetujesz jakąś zmienną (musi być rodzaju volatile). Następnie w pętli głównej sprawdzasz czy wartość tej zmiennej osiągnęła jakąś wartość.<br /><br />Przykładowo, ustawienie timera:<br />[syntax=c]void timer_init(void) {<br />// Włączenie timera w trybie CTC<br />TCCR0 |= (1&lt;&lt;WGM01); // tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler 1024<br />OCR0 = 155;// podział aby uzyskać przerwanie co 10ms<br />TIMSK |= (1&lt;&lt;OCIE0);// zezwolenie na przerwanie Compare<br /><br />}[/syntax]<br /><br />Procedura przerwania:<br />[syntax=c]ISR(TIMER0_COMP_vect) {<br /><br />// inkrementacja wartosci timerów programowych sterujących procesami<br />++Timer2;<br />++Timer3;<br /><br />}[/syntax]<br /><br />[syntax=c]volatile uin8_t Timer2, Timer3;<br /><br />int main void {<br /><br />sei(); //włączenie przerwań w procu<br /><br />while(1) {<br /><br />         if (Timer2==10) {<br />               funkcja_cos_zrob_1;<br />               Timer2=0;<br /><br />        if (Timer3==100) {<br />               funkcja_coś_zrób_2;<br />               Timer3=0;<br />  }<br />}[/syntax]<br /><br />Zmienne Timer1 i Timer2 zwiększają wartość co 10ms. (wartość OCR0 = 155); pierwsza funkcja będzie wykonywać się co 100ms druga co 1000ms.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 26 sie 2013, o 02:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirekP]]></name></author>
<updated>2013-08-25T22:28:30+01:00</updated>
<published>2013-08-25T22:28:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47080#p47080</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47080#p47080"/>
<title type="html"><![CDATA[Menu jak podejść do tego bardziej wyrafinowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3982&amp;p=47080#p47080"><![CDATA[
Witam<br /><br />Napisałem funkcje menu wyswietlająca opcje w zależności od wciśniętych klawiszy, lecz roi się tam od delay-ów czy ktoś mógłby mi doradzic sposób jak zminimalizować ich ilość ew przedstawić mi jakiś inny pomysł na menu?<br />Oto moja funkcja menu:<br />[syntax=c]uint8_t menu(void)<br />{<br />lcd_cls();<br />lcd_locate(0,5);<br />lcd_str(&quot;Menu&quot;);<br />uint8_t licznik=0;<br />//sprawdzenie czy któryś klawisz nie został wcisnięty<br />do{<br />if(klawisz_wcisniety( DOWN_KEY ))<br />{<br />licznik++;<br />_delay_ms(80);<br />}<br />if(klawisz_wcisniety( UP_KEY ))<br />{<br />licznik--;<br />_delay_ms(80);<br />}<br />if(licznik&gt;3) licznik=0; //jezeli przekroczono wyznaczoną liczbe opcji wróc do początku<br /><br />switch(licznik)         //reakcja na nacisniete klawisze<br />{<br />case 1 :<br />   {<br />lcd_cls();<br />lcd_locate(1,0);<br />lcd_str(&quot;Histereza&quot;);<br />_delay_ms(100);<br />break;<br />   }<br />case 2 :<br />   {<br />lcd_cls();<br />lcd_locate(1,0);<br />lcd_str(&quot;Alarmy&quot;);<br />_delay_ms(100);<br />break;<br />   }<br />case 3 :<br />   {<br />lcd_cls();<br />lcd_locate(1,0);<br />lcd_str(&quot;opcja 3&quot;);<br />_delay_ms(100);<br />break;<br />   }<br />}<br />}while(!klawisz_wcisniety(  ESC_KEY  ));  //jezeli nacisnięty klawisz ESCAPE zakończ<br />lcd_cls();<br /><br />return 0;<br />}[/syntax]<br /><br />Pozdrawiam<br />Mirek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1621">MirekP</a> — 25 sie 2013, o 22:28</p><hr />
]]></content>
</entry>
</feed>