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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9356&amp;mode</id>
<entry>
<author><name><![CDATA[skoomi]]></name></author>
<updated>2014-11-21T19:00:28+01:00</updated>
<published>2014-11-21T18:51:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105343#p105343</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105343#p105343"/>
<title type="html"><![CDATA[Re: Moje małe menu - czy w miarę poprawnie?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105343#p105343"><![CDATA[
Hm, przerzucę to LCD_ON() do if'a linijkę niżej i już będzie się wykonywał tylko raz. Czy jednak coś mi umyka?<br /><br /><br />ahhh jednak nie. Mój błąd <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Pomyślę nad tym.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4220">skoomi</a> — 21 lis 2014, o 18:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TomekTomek55]]></name></author>
<updated>2014-11-21T02:17:15+01:00</updated>
<published>2014-11-21T02:17:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105253#p105253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105253#p105253"/>
<title type="html"><![CDATA[Re: Moje małe menu - czy w miarę poprawnie?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105253#p105253"><![CDATA[
Myślę ze dało by się to zrobić z wykorzystaniem jednej zmiennej (czas) która w przerwaniu jest ciągle inkrementowana w dół np do zera. i teraz tak jak wciskasz ten swój przycisk to przypisujesz jej wartość czas=500 (musisz tak dobrać aby uzyskać te chciane 5sekund). Robisz w pętli głównej warunek ze gdy zmienna czas &gt;0 to odświeżasz LCD i aktualizujesz zegar. Jednak nie rób tego z pełną szybkością wykonywania się petli tylko poczytaj w necie o działaniu MODULO. Jak już poczytasz to będziesz wiedział ze możesz zrobić tak ze gdy dasz tą swoja zmienna czas Modulo to w prosty sposób otrzymasz warunek który jest prawdziwy co 1 sekunde. Reasumując w czasie inkrementacji zmiennej czas z 500 do 0 będziesz miał wyświetlanie zegara przez 5 sekund i dodatkowo będzie się odświeżał co 1 sekundę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4629">TomekTomek55</a> — 21 lis 2014, o 02:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skoomi]]></name></author>
<updated>2014-11-20T23:12:04+01:00</updated>
<published>2014-11-20T23:12:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105231#p105231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105231#p105231"/>
<title type="html"><![CDATA[Moje małe menu - czy w miarę poprawnie?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9356&amp;p=105231#p105231"><![CDATA[
Hej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zastanawiam się czy proste menu które napisałem nadaje się do użytku. Wydaje mi się, że udało mi się napisać to tak, żeby nie pisać niepotrzebnie na LCD i żeby nie zacinać się na jakiś czas.<br /><br />Mam też pytanie co do modyfikacji: chciałbym, aby po wybraniu opcji 1 zegar pojawił się na np 5sekund(i przez te 5 sekund cały czas się odświeżał). <br />Czy aby poprawnie to zrobić powinienem:<br />1) Po wykryciu kliknięcia TYLKO USTAWIĆ flagę &quot;wyswietlaj_zegar&quot;<br />2) Wykorzystać timer do zgaszenia flagi po 5 sekundach<br />3) Kiedy flaga jest ustawiona to w każdym obiegu pętli głównej odświeżać zegar? (ewentualnie wykorzystać timer aby odświeżać tylko co sekundę?)<br /><br />[syntax=c]//PORTC |= (1&lt;&lt;PD3) - ustawienie 1 na PD3<br />//PORTC &amp;= ~(1&lt;&lt;PD3) -  ustawienie 0 na PD3<br />//PORTC ^= (1&lt;&lt;PD3) - zmiana stanu PD3 na przeciwny<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdbool.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdio.h&gt;<br /><br />#include &quot;LCD.h&quot;<br />#include &quot;RTC.h&quot;<br /><br /><br /><br />#define KEY1 (1&lt;&lt;PF3)<br />#define KEY2 (1&lt;&lt;PF1)<br /><br />uint8_t key_lock1 = 0;//flaga blokujaca obsluge przycisku<br />uint8_t key_lock2 = 0;<br /><br /><br />uint8_t godzina;<br />uint8_t minuta;<br /><br />uint8_t menu = 0;<br />uint8_t podmenu;<br /><br />volatile uint8_t timer1 = 0;<br />void TimerInit(void);<br />void UstawCzas(void);<br />void WyswietlCzas(void);<br /><br />//************MAIN***********////************MAIN***********////************MAIN***********//<br />//************MAIN***********////************MAIN***********////************MAIN***********//<br />//************MAIN***********////************MAIN***********////************MAIN***********//<br />int main(){<br /><br />TimerInit();<br />sei();<br />lcd_init();//inicjalizacja wyświetlacza LCD<br />i2cSetBitrate(100);<br />DDR(LCD_LEDPORT) |= (1&lt;&lt;LCD_LED);//PA0 jako wyjscie (podswietlanie LCD)<br />PORT(LCD_LEDPORT) |= (1&lt;&lt;LCD_LED);//zapalenie LCD<br />UstawCzas();//Podrpogram do ustawiania czasu<br /><br /><br /><br /><br /><br />_delay_ms(2000); // po 2 sekundach wylacza LCD<br />lcd_OFF();<br />//*******PETLA GLOWNA*******////*******PETLA GLOWNA*******////*******PETLA GLOWNA*******//<br />//*******PETLA GLOWNA*******////*******PETLA GLOWNA*******////*******PETLA GLOWNA*******//<br />//*******PETLA GLOWNA*******////*******PETLA GLOWNA*******////*******PETLA GLOWNA*******//<br />while(1){<br /><br />if( !key_lock1 &amp;&amp; !(PINF &amp; KEY1 ) ) {<br />key_lock1 =200;<br />lcd_ON();<br />if( menu == 0 ) {<br />menu = 1;<br />podmenu = 1;<br />lcd_locate(0,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(0,0);<br />lcd_str(&quot;MENU&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;1.Data i godzina&quot;);<br />}<br />else if( menu == 1 ){<br />switch(podmenu) {<br />case 1:<br />WyswietlCzas();<br />menu=0;<br />break;<br />case 2:<br />//wyswietlenie aktualnych pomiarow<br />menu=0;<br />break;<br />case 3:<br />//wyswietlenie wartosci zadanych<br />menu=0;<br />break;<br />}<br />}<br />} else if( key_lock1 &amp;&amp; (PINF &amp; KEY1 ) ) key_lock1++;<br /><br />if ( menu == 1) {<br />if( !key_lock2 &amp;&amp; !(PINF &amp; KEY2 ) ) {<br />key_lock2 =200;<br />podmenu++;<br />if( podmenu &gt; 3 ) podmenu=1;<br />switch(podmenu) {<br />case 1:<br />lcd_locate(1,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;Data i godzina&quot;);<br />break;<br />case 2:<br />lcd_locate(1,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;Aktualne pomiary&quot;);<br />break;<br />case 3:<br />lcd_locate(1,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;Wartosci zadane&quot;);<br />break;<br />}<br /><br />} else if( key_lock2 &amp;&amp; (PINF &amp; KEY2 ) ) key_lock2++;<br />}<br /><br /><br /><br />}<br />//*****KONIEC PETLI GLOWNEJ*****////*****KONIEC PETLI GLOWNEJ*****////*****KONIEC PETLI GLOWNEJ*****//<br />//*****KONIEC PETLI GLOWNEJ*****////*****KONIEC PETLI GLOWNEJ*****////*****KONIEC PETLI GLOWNEJ*****//<br />//*****KONIEC PETLI GLOWNEJ*****////*****KONIEC PETLI GLOWNEJ*****////*****KONIEC PETLI GLOWNEJ*****//<br />}<br />//*******KONIEC MAIN********////*******KONIEC MAIN********////*******KONIEC MAIN********//<br />//*******KONIEC MAIN********////*******KONIEC MAIN********////*******KONIEC MAIN********//<br />//*******KONIEC MAIN********////*******KONIEC MAIN********////*******KONIEC MAIN********//<br /><br /><br /><br /><br /><br />void TimerInit(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;CS01)|(1&lt;&lt;CS00);// preskaler 1024<br />                OCR0 = 78;// podział aby uzyskać przerwanie co 10ms<br />                TIMSK |= (1&lt;&lt;OCIE0);// zezwolenie na przerwanie Compare<br /><br />}<br /><br />ISR(TIMER0_COMP_vect) {<br />timer1++;<br />}<br /><br /><br />void UstawCzas(void) {<br />uint8_t g=0;<br />uint8_t m=0;<br />uint8_t next=0;//kiedy next=0 to ustawiamy godziny<br />//kiedy next=1 to ustawiamy minuty<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;Godzina:&quot;);<br />lcd_locate(0,9);<br />lcd_int(g);<br /><br />while (next == 0){<br />if( !key_lock1 &amp;&amp; !(PINF &amp; KEY1 ) ) {<br />key_lock1 =200;<br />g++;<br />if( g &gt; 23) {<br />g=0;<br />lcd_locate(0,9);<br />lcd_str(&quot;   &quot;);<br />}<br />lcd_locate(0,9);<br />lcd_int(g);<br />} else if( key_lock1 &amp;&amp; (PINF &amp; KEY1 ) ) key_lock1++;<br /><br />if( !key_lock2 &amp;&amp; !(PINF &amp; KEY2 ) ) {<br />key_lock2 =200;<br />next = 1;<br />} else if( key_lock2 &amp;&amp; (PINF &amp; KEY2 ) ) key_lock2++;<br />}<br /><br /><br /><br />lcd_locate(1,0);<br />lcd_str(&quot;Minuty:&quot;);<br />lcd_locate(1,8);<br />lcd_int(m);<br /><br />while (next == 1){<br />if( !key_lock1 &amp;&amp; !(PINF &amp; KEY1 ) ) {<br />key_lock1 =200;<br />m++;<br />if( m &gt; 59) {<br />m=0;<br />lcd_locate(1,8);<br />lcd_str(&quot;   &quot;);<br />}<br />lcd_locate(1,8);<br />lcd_int(m);<br />} else if( key_lock1 &amp;&amp; (PINF &amp; KEY1 ) ) key_lock1++;<br /><br />if( !key_lock2 &amp;&amp; !(PINF &amp; KEY2 ) ) {<br />key_lock2 =200;<br />next = 0;<br />} else if( key_lock2 &amp;&amp; (PINF &amp; KEY2 ) ) key_lock2++;<br />}<br />lcd_locate(0,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;                &quot;);<br />WczytajCzas(g,m);<br />}<br /><br />void WyswietlCzas(void){<br />godzina = OdczytajGodzine();//odczytanie godziny z RTC<br />minuta = OdczytajMinuty();<br /><br />lcd_locate(0,0);//czyszczenie ekranu<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;                &quot;);<br />lcd_locate(1,0);<br /><br />if( godzina &lt; 10 ) lcd_str(&quot;0&quot;);//wypisanie godziny na LCD<br />lcd_int(godzina);<br />lcd_str(&quot;:&quot;);<br />if( minuta &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(minuta);<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4220">skoomi</a> — 20 lis 2014, o 23:12</p><hr />
]]></content>
</entry>
</feed>