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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-09T17:42:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10931&amp;mode</id>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-09T17:42:14+01:00</updated>
<published>2015-03-09T17:42:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122780#p122780</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122780#p122780"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122780#p122780"><![CDATA[
No dobrze. postaram się zmienić podejście i uruchomić Timer w trybie CTC. Odnośnie drugiej sprawy no to wydaję się logiczne zadeklarowanie jednej liczby, również postaram się wprowadzić to w &quot;życie&quot;. <br /><br />Nie wiem czy dobrze rozumiem do końca te odmierzanie czasu. Wektor przerwania traktowałem jak taki generator dający sygnał 1Hz. Po nastawieniu jakiejś dowolnej wartości chciałbym kliknąć przycisk i żeby czas wystartował. Szukam po forum, projektów żeby coś mnie olśniło ale nic nie mogę znaleźć. <br /><br />Problem polega na tym, że nawet jeśli zastosuję twoją rade, czyli użyję 1 liczby np. 32 bitowej i uruchomię timer w tryb CTC i będzie to bardziej optymalne i szybsze to ja dalej naprawdę po szczerym przeszukaniu wielu ston i projektów nie rozumiem na jakiej zasadzie &quot;wydobyć&quot; tą zmienną z przerwania, a raczej żeby ja uruchomić po kliknięciu przycisku.<br /><br />Zanim napisałem kod podany wyżej, próbowałem zrobić taki zegareczek i to mi działało tylko od zera. A ja chcę doprowadzić do takiego jakby nastawienia zmiennej na określoną wartość i odpalenia jej. <br /><br />Oczywiście dziękuję Ci za radę, naprawdę jestem wdzięczny i naprawdę zastosuję je ale jakbyś jeszcze mógł mi tą jedną rzecz wyjaśnić.<br /><br />Chyba, że należy iść zupełnie inna drogą.<br /> Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 9 mar 2015, o 17:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-09T14:51:23+01:00</updated>
<published>2015-03-09T14:51:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122741#p122741</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122741#p122741"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122741#p122741"><![CDATA[
No i mieliście rację, nie wiem czemu wcześniej obsługi klawiszy jak i obsługi LCD nie wstawiłem do głównej pętli. Faktycznie działa. Wstawiam swój kod:<br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED1 (1&lt;&lt;PD6)<br />#define LED2 (1&lt;&lt;PC2)<br />#define KEY1  (1&lt;&lt;PB1)<br />#define KEY2 (1&lt;&lt;PB0)<br />#define KEY3 (1&lt;&lt;PB2)<br /><br /><br />volatile uint8_t cnt=0;<br />volatile uint8_t s=0;<br />volatile uint8_t m=0;<br />volatile uint8_t i=0;<br />uint8_t key_lock;<br /><br /><br />int main (void){<br /><br /><br /><br /><br /><br />//-------------------------------Powitanie----------------------------------------------<br /><br />lcd_init();<br />lcd_locate(0,0);<br />lcd_str(&quot;Odmierzanie :D&quot;);<br /><br /><br /><br />//--------------------------------Timer0--------------------------------------------------<br />TCCR0 |=  (1&lt;&lt;CS02) | (1&lt;&lt;CS00);<br />TIMSK |= (1&lt;&lt;TOIE0);<br />TCNT0 |= 6;<br /><br /><br />//--------------------------------Deklaracja wyjsc-----------------------------------------<br /><br />DDRD |= LED1;<br />DDRC |= LED2;<br />PORTB |= KEY1 | KEY2 | KEY3;<br /><br />_delay_ms(10);<br />sei();<br />while (1){<br /><br />//------------------------------------------------------------------------------------Dodawanie minut<br />  if( !key_lock &amp;&amp; !(PINB &amp; KEY1 ) ) {<br />  key_lock=1;<br /><br /><br />  m++;<br /><br />  } else if( key_lock &amp;&amp; (PINB &amp; KEY1 ) ) key_lock++;<br />//-----------------------------------------------------------------------------------Odejmowanie minut<br />  if( !key_lock &amp;&amp; !(PINB &amp; KEY2 ) ) {<br />  key_lock=1;<br /><br /><br />  m--;<br /><br />  } else if( key_lock &amp;&amp; (PINB &amp; KEY2 ) ) key_lock++;<br /><br />//-----------------------------------------------------------------------------------Enter<br />  if( !key_lock &amp;&amp; !(PINB &amp; KEY3 ) ) {<br />  key_lock=1;<br /><br /><br />  i=10;<br /><br />  } else if( key_lock &amp;&amp; (PINB &amp; KEY3 ) ) key_lock++;<br /><br /><br />//-----------------------------------------------------------------------------------Wywieltanie wyniku<br /> // lcd_cls();<br /> // _delay_ms(1000);<br />  lcd_locate(1,4);<br />  lcd_int(m);<br />  lcd_locate(1,8);<br />  lcd_int(s);<br />  lcd_locate(1,11);<br />  lcd_int(i);<br /><br /><br /><br /><br />}<br />}[/syntax]<br /><br />Jeżeli chodzi o wektor przerwania to wygląda to tak:<br /><br />[syntax=c]ISR(TIMER0_OVF_vect){<br /><br />TCNT0 = 6;          //Początkowa wartość licznika<br />cnt++;     //zwiększa zmienną licznik<br />if(cnt&gt;3)  //jeśli 4 przerwania (czyli ok 1 s)<br />{<br />if (i==10){<br />s=60;<br />if (s&lt;60) s--;<br /><br />}<br /><br />   cnt=0;<br /><br />   }<br /><br /><br /><br /> }[/syntax]<br /><br />I teraz tak, rozumiem obsługę klawiszy. Rozumiem jak działają przerwania, no może nie jest to wiedza w 100% ale już rozeznanie posiadam. Nie rozumiem jak wyciągnąć wartość zmiennej, która znajduję się w wektorze przerwania. Póki co chciałem samą zmienna s która będzie zawierać sekundy. Wpadłem na taki pomysł, dodałem zmienna <strong>i</strong> po naciśnięciu przycisku KEY3 wartość zmiennej i zmienia się na wartość 10. W wektorze dodałem warunek, jeśli i będzie równe 10 to ustawiamy s na 60 i dekrementujemy. No ale nie działa to zbytnio. No nie mam pojęcia jak to ogarnąć, czy to trzeba zastosować flagi?? jakoś sprawdzać stan klawiszy?? No nie wiem, poproszę o wskazówki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 9 mar 2015, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-06T21:52:13+01:00</updated>
<published>2015-03-06T21:52:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122306#p122306</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122306#p122306"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122306#p122306"><![CDATA[
No dobrze dziękuję za wskazówkę, postaram się poprawić kod i sprawdzę czy będzie to działać. O efektach dam znać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 6 mar 2015, o 21:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2015-03-06T21:52:36+01:00</updated>
<published>2015-03-06T21:46:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122304#p122304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122304#p122304"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122304#p122304"><![CDATA[
Przy tak zbudowanej obsłudze przerwania samo przerwanie będzie się prawdopodobnie dłużej wykonywać niż licznik będzie je wywoływał - z tego co z kodu wynika to licznik wywołuje przerwanie co 1/4s a w przerwaniu masz delaya od przycisku oraz obsługę wyświetlacza LCD który niestety demonem prędkości nie jest więc sumarycznie całe przerwanie może się wykonywać dłużej niż 1/4s...<br />W samym przerwaniu powinno być tylko ładowanie wartości licznika i modyfikacja zmiennych (oczywiście owe zmienne muszą być opatrzone volatile) wysyłanie na wyświetlacz oraz obsługa przycisków w pętli głównej programu i powinno być ok.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 6 mar 2015, o 21:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-06T21:41:32+01:00</updated>
<published>2015-03-06T21:41:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122302#p122302</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122302#p122302"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122302#p122302"><![CDATA[
Tak myślałem. Więc skoro dajmy na to zmienna jest w przerwaniu i się zmienia tak. To jak ja wyświetlić jako bieżącą wartość ?? I jak z tym klawiszem można to rozwiązać ??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 6 mar 2015, o 21:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-06T21:22:03+01:00</updated>
<published>2015-03-06T21:22:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122297#p122297</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122297#p122297"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122297#p122297"><![CDATA[
w przerwaniu delay??? w przerwaniu obsługa LCD ??? o ile to jest w przerwaniu bo patrząc na te nawiasy to można oczopląsu dostać ... Zapamiętaj w żadnym przerwaniu NIGDY delaya i NIGDY obsługi LCD<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 mar 2015, o 21:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-06T21:18:46+01:00</updated>
<published>2015-03-06T21:18:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122295#p122295</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122295#p122295"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122295#p122295"><![CDATA[
Wstawiam kod, przepraszam że odrazu go nie wrzuciłem ??<br /><br />[syntax=c]volatile uint8_t s=0;<br />volatile uint8_t m=0;<br /><br /><br /><br />ISR(TIMER0_OVF_vect)<br />{<br />if(!(PINB &amp; KEY)){<br />_delay_ms(30);<br /><br /><br /><br />  TCNT0 = 6;          //Początkowa wartość licznika<br /><br />  cnt++;     //zwiększa zmienną licznik<br />  if(cnt&gt;3)  //jeśli 4 przerwania (czyli ok 1 s)<br />  {<br /><br />  s++;<br />  if (s==60){<br />  m++;<br />  s=0;<br /><br />  }<br /><br />  if (m==60){<br />  m=0;<br />  }<br /><br /><br />    cnt=0;<br />  }<br /><br /><br />{<br /> lcd_init();<br /> lcd_locate(1,6);<br /> lcd_int( s);<br /> lcd_locate(1,3);<br /> lcd_int(m);<br /><br />}<br />}<br />}[/syntax]<br /><br />Nie jestem pewien czy można tak zadeklarować przycisk, oraz czy tak można wyświetlać wyniki operacji. Proszę o sprawdzenie kodu. Dziękuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 6 mar 2015, o 21:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-06T21:07:26+01:00</updated>
<published>2015-03-06T21:07:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122290#p122290</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122290#p122290"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122290#p122290"><![CDATA[
<div class="quotetitle">Majster_90 napisał(a):</div><div class="quotecontent"><br />czy np w wektor przerwania nie należy dodawać przycisków??<br /></div><br />kolega jest na forum literackim gdzie pisze się opowiadania? beletrystykę? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czy na forum programistycznym gdzie przedstawia się kody albo na elektronicznym gdzie przedstawia się schematy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 mar 2015, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-06T17:14:36+01:00</updated>
<published>2015-03-06T17:14:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122264#p122264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122264#p122264"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122264#p122264"><![CDATA[
Witam Ponownie.  Zamiast robić swój projekt na delayach postanowiłem uruchomić sprzętowy Timer0. Ustawiłem generowanie impulsu co 1 sekundę. Ustawiłem sobie pętle tak, żeby naliczało mi sekundy i minuty. Po paru próbach udało mi się uzyskać efekt i jestem bardzo zadowolony z uzyskanego efektu <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Aby ulepszyć swój projekt, potrzebuję dodania przycisku, bo póki co mam po prostu zegarek.  <br /><br />Próba dodania przycisku okazała się trochę kłopotliwa. Mianowicie, dodałem przycisk zaraz za wektorem ISR, przycisk działa ale tylko jak go trzymam. <br /><br />Czy to spowodowane drganiami styków, czy np w wektor przerwania nie należy dodawać przycisków??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 6 mar 2015, o 17:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-05T19:47:32+01:00</updated>
<published>2015-03-05T19:47:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122134#p122134</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122134#p122134"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122134#p122134"><![CDATA[
Jeżeli chodzi o BlueBooka to niestety nie posiadam, ale nie długo się zaopatrzę w tą książkę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Artykuł o klawiszach przeczytałem, no naprawdę efekt porażający. Dużo się dowiedziałem. Tylko nie znalazłem odpowiedzi na mój problem, może źle go przedstawiłem. Problem mam z samym algorytmem, jak po ustawiać zmienne żeby doliczyły czas do końca. Przypomnę założenie projektu, maksymalnie można ustawić 60min, jeden klawisz dodaje 1 min drugi 1min odejmuje (to mi działa). Wzbogacę to tylko o poradnik podany przez Pana Mirka. Wciskając przycisk Enter, odmierzamy czas od nastawionej wartości i zmierzamy do 0, na końcu ewentualna sygnalizacja dioda LED o zakończeniu odliczania. Na wyświetlaczu wyświetla się zmienna m- minuty i s - sekundy.<br /><br />Kod jaki sam napisałem to :<br /><br />[syntax=c]if(!(PINB &amp; (1&lt;&lt;PB2))){// ENTER<br />            _delay_ms(300);<br /><br />            s=60;<br />            m--;<br /><br /><br /><br />            for(s&gt;0;s--;){<br />            _delay_ms(1000);<br /><br /><br /><br /><br />            lcd_cls();<br />            lcd_locate(1,4);<br />            lcd_int(m);<br />            lcd_locate(1,6);<br />            lcd_int(s);<br />            lcd_locate(1,9);<br />            //lcd_int(ms);<br /><br /><br /><br /><br />            }<br /><br />        }[/syntax]<br /><br />Z tego co napisałem efekt jest następujący:<br /><br />Ustawiam np. 09:00 min klikam Enter i odmierza czas do 08:00 min. Nie potrafię napisać algorytmu samego jak odmierzyć czas do czasu 00:00.<br /><br />Mam nadzieję, że przedstawiłem sprawę jasno <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 5 mar 2015, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Andrzej1980]]></name></author>
<updated>2015-03-05T18:22:14+01:00</updated>
<published>2015-03-05T18:22:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122111#p122111</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122111#p122111"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122111#p122111"><![CDATA[
Witam <br />Skoro jesteśmy przy tym temacie. Wykonując ćwiczenia z Bluebooka na wyświetlaczu LCD , na sekundniku po jakimś czasie pojawia się trzecie zero.<br />Sekundnik dalej wyświetla prawidłowo sekundy na dwóch segmentach a na tym trzecim jest zero. Czym to jest spowodowane?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1647">Andrzej1980</a> — 5 mar 2015, o 18:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2015-03-05T18:10:22+01:00</updated>
<published>2015-03-05T18:10:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122105#p122105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122105#p122105"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122105#p122105"><![CDATA[
<div class="quotetitle">Majster_90 napisał(a):</div><div class="quotecontent"><br />Nie mogę otrzymać takiej struktury: 00:00 podczas wyświetlanie cyfr pojedynczych od 0 do 9 to jeszcze jak Cie mogę ale jak wyświetlam liczby &gt;10 to sprawa się komplikuje bo wszystko na siebie nachodzi.<br /></div><br /><br />[syntax=c]#include &lt;stdio.h&gt;<br /><br />char buf&#91;6&#93;;<br /><br />lcd_cls();<br />lcd_locate(1,4);<br />sprintf(buf, &quot;%02d:%02d&quot;, m, s);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 5 mar 2015, o 18:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-05T17:57:02+01:00</updated>
<published>2015-03-05T17:57:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122101#p122101</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122101#p122101"/>
<title type="html"><![CDATA[Re: Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122101#p122101"><![CDATA[
Ja tylko dopytam bo nic o tym nie wspomniałeś ... posiadasz Bluebooka ? bo jeśli tak to masz tam wszystko o co pytasz opisane i dużo więcej zresztą ....<br /><br />a jeśli nie posiadasz - to wyświetlaj nieznaczące zero przed cyframi, a przed liczbami nie wyświetlaj tego zera ...<br /><br />co zaś się tyczy obsługi klawiszy rzuć sobie okiem tutaj:<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> — 5 mar 2015, o 17:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Majster_90]]></name></author>
<updated>2015-03-05T17:31:36+01:00</updated>
<published>2015-03-05T17:31:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122097#p122097</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122097#p122097"/>
<title type="html"><![CDATA[Kilka wskazówek dla pętli.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10931&amp;p=122097#p122097"><![CDATA[
Witam Was wszystkich serdecznie. To mój pierwszy post na tym forum. Od niedawna zaczołem przygodę z programowaniem mikroprocesorów. <br /><br />Posiadam procesor Atmega8, podłączyłem wyświetlacz lcd 2x16 i kilka przycisków. Chciałem zrobić odmierzanie czasu za pomocą przycisków i podłączonego już wyświetlacza. Oczywiście pojawiło się parę problemów, mianowicie od kilku dni męczę się z pętla która ma odliczać sekundy i minuty. Ogólne założenie jest takie:<br /><br />Przycisk 1, zwiększamy minuty.<br />Przycisk 2, zmniejszamy minuty.<br />Przycisk 3, enter. (zaczynamy odliczać aż do 0).<br /><br /><br />Częściowo się to udało, ale pętla się kończy i jakoś nie mam pomysłu na to żeby skończyła się dopiero przy końcu czasu. Kombinuję ale nie wychodzi mi to, spowodowane to jest raczej brakiem styczności z takimi pętlami. Nie posiadam BB ale już nie długo się zaopatrzę w niego. Drugi problem jaki posiadam, którego nie mam pojęcia jak rozwiązać to jest samo wyświetlanie zmiennych s(sekund) i m(minut). Mianowicie podczas ustawienia:<br /><br />[syntax=c]lcd_cls();<br />lcd_locate(1,4);<br />lcd_int(m);<br />lcd_locate(1,5);<br />lcd_str(&quot;:&quot;);<br />lcd_locate(1,6);<br />lcd_int(s);[/syntax]<br /><br />Nie mogę otrzymać takiej struktury: 00:00  podczas wyświetlanie cyfr pojedynczych od 0 do 9 to jeszcze jak Cie mogę ale jak wyświetlam liczby &gt;10 to sprawa się komplikuje bo wszystko na siebie nachodzi.  <br /><br />Aktualnie efekt wygląda tak, dodawanie i odejmowanie minut jest ok. Natomiast klikam enter, odliczam minutę i stop <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />  <br />A i program póki co robię na zwykłych delayach, właśnie żeby pierw dobrze zapoznać się z samym językiem C.<br /><br />Wrzucam swój cały kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;avr/delay.h&gt;<br />    #include &quot;lcd44780.h&quot;<br />    #include &lt;avr/interrupt.h&gt;<br /><br /><br /><br /><br /><br /><br /><br />int main(void)<br /><br /> {<br />//----------------Deklaracja zmiennych---------------------------------------<br />//uint8_t ms=0; // milisekundy<br />uint8_t s=0;  // sekundy<br />uint8_t m=0;  // minuty<br /><br /><br /><br /><br />                      <br />        PORTB |= (1&lt;&lt;PB0) | (1&lt;&lt;PB1) | (1&lt;&lt;PB2);  // podciągnięcie vcc<br /><br /><br /><br /><br /><br /><br /><br />        while(1){<br /><br /><br /><br />        if(!(PINB &amp; (1&lt;&lt;PB1))){    // dodawanie minut<br />        _delay_ms(300);<br /><br />        if (m&lt;60) m++;<br /><br /><br /><br />        lcd_cls();<br />        lcd_locate(1,4);<br />        lcd_int(m);<br />        lcd_locate(1,6);<br />        lcd_int(s);<br />        lcd_locate(1,9);<br />        //lcd_int(ms);<br /><br />        }<br /><br />        if(!(PINB &amp; (1&lt;&lt;PB0))){// odejmowanie minut<br />            _delay_ms(300);<br /><br />            if (m&gt;0) m--;<br /><br />            lcd_cls();<br />            lcd_locate(1,4);<br />            lcd_int(m);<br />            lcd_locate(1,6);<br />            lcd_int(s);<br />            lcd_locate(1,9);<br />           // lcd_int(ms);<br />        }<br /><br /><br /><br /><br />        if(!(PINB &amp; (1&lt;&lt;PB2))){// enter<br />            _delay_ms(300);<br /><br />            s=60;<br />           // ms=1000;<br />            m--;<br /><br /><br /><br />            for(s&gt;0;s--;){<br />            _delay_ms(1000);<br /><br /><br /><br /><br />            lcd_cls();<br />            lcd_locate(1,4);<br />            lcd_int(m);<br />            lcd_locate(1,6);<br />            lcd_int(s);<br />            lcd_locate(1,9);<br />            //lcd_int(ms);<br /><br /><br /><br /><br />            }<br /><br /><br />        }<br /><br />        }<br /> }[/syntax]<br /><br />Nie piszę do was z pierwszym lepszym problemem, bo zazwyczaj staram się rozwiązać to sam ale tu brak mi wiedzy na ten temat i na ten moment zatrzymałem się w miejscu.  Bardzo dziękuję za wyrozumiałość i wszelkie wskazówki. <br /><br />Pozdrawiam  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8851">Majster_90</a> — 5 mar 2015, o 17:31</p><hr />
]]></content>
</entry>
</feed>