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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-06-28T18:37:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3410&amp;mode</id>
<entry>
<author><name><![CDATA[fullmoonguy]]></name></author>
<updated>2013-06-28T18:37:15+01:00</updated>
<published>2013-06-28T18:37:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40369#p40369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40369#p40369"/>
<title type="html"><![CDATA[Re: Drugi if nie praży]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40369#p40369"><![CDATA[
Witam<br /><br />Pomógł bardzo Pana artykuł nt drgań styków, wcześniej załatwiałem to wszystko delay'ami a teraz chciałem pokombinować, wszystko działa. Pana książkę mam od dawna ale ze względu na brak czasu wracam dopiero do niej dzisiaj (i jestem dopiero na 1 projekcie z części praktycznej), a mam taki zwyczaj że wszystko robię od początku do końca <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i nie chcę przeskakiwać pomiędzy rozdziałami (ponoć w dalszych rozdziałach problem drgań jest bardziej rozwinięty). <br /><br />Reasumując, dziękuje za pomoc  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1039">fullmoonguy</a> — 28 cze 2013, o 18:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-28T13:54:29+01:00</updated>
<published>2013-06-28T13:54:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40349#p40349</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40349#p40349"/>
<title type="html"><![CDATA[Re: Drugi if nie praży]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40349#p40349"><![CDATA[
Generalnie problem masz w tym kodzie nie tylko z obsługą tych klawiszy ale ze wszystkim prawie - że tak powiem. Dlatego same linki nie wystarczą - ale na pewno jak zobaczysz przykładową i prostą obsługę klawiszy na moim blogu to zobaczysz że od razu życie będzie łatwiejsze<br /><br />natomiast zdecydowanie polecam tę książkę o której wspomniałem wyżej - ona pozwoli ci zapanować nad chaosem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 cze 2013, o 13:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fullmoonguy]]></name></author>
<updated>2013-06-28T11:03:24+01:00</updated>
<published>2013-06-28T11:03:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40335#p40335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40335#p40335"/>
<title type="html"><![CDATA[Re: Drugi if nie praży]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40335#p40335"><![CDATA[
Przyznam szczerze,  że ten sposób na eliminację drgań styków pokazał mi kolega i nie bardzo rozumiem jego działania. Nie chcę używać żadnego delay'a. Proponuje Pan, abym napisał wszystko od nowa po zapoznaniu się z linkami ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1039">fullmoonguy</a> — 28 cze 2013, o 11:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-28T05:47:13+01:00</updated>
<published>2013-06-28T05:47:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40316#p40316</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40316#p40316"/>
<title type="html"><![CDATA[Re: Drugi if nie praży]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40316#p40316"><![CDATA[
Ja bym zaczął jednak na miejscu kolegi od książki:<br /><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 />do tego wspomógł się poradnikami z bloga <!-- w --><a class="postlink" href="http://www.mirekk36.blogspot.com" >www.mirekk36.blogspot.com</a><!-- w --> bo na razie to kolega tak straszliwie tu zakręcił że ciężko się połapać w ogóle o co chodzi, a błędów w programie jest po prostu cała masa <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Szczególnie polecam rozwadze - nawet jeśli nie masz jeszcze książki ten poradnik:<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 />tym bardziej, że kolega na razie w ogóle chyba jeszcze nie kojarzy co to są przerwania sądząc po opisach w kodzie funkcji int butt(uint8_t button) <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 cze 2013, o 05:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fullmoonguy]]></name></author>
<updated>2013-06-28T00:03:22+01:00</updated>
<published>2013-06-28T00:03:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40310#p40310</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40310#p40310"/>
<title type="html"><![CDATA[Drugi if nie praży]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3410&amp;p=40310#p40310"><![CDATA[
Witam<br /><br />W końcu mam czas na programowanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Niestety męczę się z banalnym problemem. Korzystam z zestawu EvB 4.3 i piszę sobie kalkulator na wyświetlaczu 7 segmentowym (4 cyfry) z użyciem przerwań (tak dla treningu). Chce użyć 5 przycisków: S1 ma zwiększać 1 liczbę, S2 ma zmniejszać 1 liczbę , S3 i S4 analogicznie dla 2 liczby ...a S5 ma zatwierdzić składniki sumy i wypisać wynik dodawania. Problem mój polega na tym, że program działa mi dla jednego przycisku. Jak chce w tej samej pętli użyć sprawdzenia warunku dla 2 przycisku (albo jakiegokolwiek innego) .. nie dzieje się nic. Poniżej przedstawiam działający kod dla 1 przycisku ... gdy odkomentuje linie if(STATE2) ,.... to przyciski nie działają. Jak sobie poradzę z tym problemem to dodam STATE3, 4, 5 ... ale nie wiem gdzie jest błąd ? Dodam że anody są załączane masą, to samo wyświetlacz i przyciski standardowo wpięte między pin a masę.<br /><br />Oto kod:<br /><br />[syntax=c]//KALKULATOR<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define ustaw1_wys PORTC &amp;= ~(1&lt;&lt;PC0);<br />#define ustaw2_wys PORTC &amp;= ~(1&lt;&lt;PC1);<br />#define ustaw3_wys PORTC &amp;= ~(1&lt;&lt;PC2);<br />#define ustaw4_wys PORTC &amp;= ~(1&lt;&lt;PC3);<br />#define ustaw_wszy_wys PORTC = 0x00;<br /><br />#define STATE1 butt(PD0) &amp;&amp; !(butt(PD1)) &amp;&amp; !(butt(PD2)) &amp;&amp; !(butt(PD3)) &amp;&amp; !(butt(PD4))<br />#define STATE2 butt(PD1) &amp;&amp; !(butt(PD0)) &amp;&amp; !(butt(PD2)) &amp;&amp; !(butt(PD3)) &amp;&amp; !(butt(PD4))<br />#define STATE3 butt(PD2) &amp;&amp; !(butt(PD1)) &amp;&amp; !(butt(PD0)) &amp;&amp; !(butt(PD3)) &amp;&amp; !(butt(PD4))<br />#define STATE4 butt(PD3) &amp;&amp; !(butt(PD1)) &amp;&amp; !(butt(PD2)) &amp;&amp; !(butt(PD0)) &amp;&amp; !(butt(PD4))<br />#define STATE5 butt(PD4) &amp;&amp; !(butt(PD1)) &amp;&amp; !(butt(PD2)) &amp;&amp; !(butt(PD3)) &amp;&amp; !(butt(PD0))<br /><br />//tablce: zakodowane cyfry, zakodowane anody, aktualna liczba na wyswietlaczu,<br />//zapewnienie zliczania w przerwaniu<br />uint8_t hex_7&#91;10&#93; = { 0x40, 0xF9, 0x24, 0x30, 0x19, 0x12, 0x02, 0xF8, 0x00,0x10 };<br />uint8_t anody&#91;4&#93; = {0x0E, 0x0D, 0x0B, 0x07};<br />uint8_t wys&#91;4&#93; = {0, 0, 0, 0};<br />int butt_state&#91;5&#93; = {0, 0, 0, 0, 0};<br /><br /><br />//PODLACZENIA<br /><br />//portd - przyciski<br />//portc - anody<br />//porta - wyswietlacz<br /><br />//porta:<br />//PA0 - A<br />//PA1 - B<br />//PA2 - C<br />//PA3 - D<br />//PA4 - E<br />//PA5 - F<br />//PA6 - G<br />//portc:<br />//PC0 - anoda 1<br />//PC1 - anoda 2<br />//PC2 - anoda 3<br />//PC3 - anoda 4<br />//port d<br />//PD0 - S1 - wybor 1 liczba +<br />//PD1 - S2 - wybor 1 liczba -<br />//PD2 - S3 - wybor 2 liczba +<br />//PD3 - S4 - wybor 2 liczba -<br />//PD4 - S5 - zatwierdz<br /><br />//skladniki dodawania i wynik<br /><br />int a = 0;<br />int b = 0;<br />int wynik = 0;<br /><br /><br /><br />//pozostale zmienne<br />int tmp = 0;<br />uint8_t a0 = 0, a1 = 0;<br />uint8_t i = 0;<br /><br />//tworze tymczasowe zmienne do obliczen<br />uint8_t jednosci = 0;<br />uint8_t dziesiatki = 0;<br /><br />//funkcje<br />void ini();<br />int butt(uint8_t button);<br />ISR(TIMER1_CAPT_vect )<br />{<br />if(i == 4) i = 0;<br /><br /><br /><br />//ustawiamy wybrana anode i wyswietlamy wybrana liczbe z pamieci<br />                    PORTC = anody&#91;i&#93;;<br />                    PORTA = hex_7&#91;wys&#91;i&#93;&#93;;<br />//inkrementujemy zmienna odpowiedzialna za przelaczanie anod<br />i++;<br />}<br />int main(void) {<br /><br /><br />    //jako wyjscia - 7seg<br />    DDRA = 0xFF;<br /><br />    //jako wejscia - switche<br />    DDRD = 0x00;<br />    //pull-up<br />    PORTD = 0xFF;<br /><br />    //jako wyjsca - tranzystory dla anod<br />    DDRC = 0xFF;<br />    //pull-up<br />    PORTC = 0xFF;<br /><br />    //timer - TRYB CTC<br />    //ustawiam gorna    granice zliczania    timera<br />    ICR1 = 313;<br /><br />    //ustawiamy prescaler na 256 i tryb CTC<br />    TCCR1B |= (1 &lt;&lt; WGM13) | (1 &lt;&lt; WGM12) | (1 &lt;&lt; CS12);<br /><br />    //lokalna flaga przerwań<br />    TIMSK |= (1 &lt;&lt; TICIE1);<br /><br />    //globalne zezwolenie na przerwanie<br />    sei();<br /><br /><br /><br /><br /><br />    //zainicjowanie pracy wyswietlacza<br />    ini();<br /><br />    //glowna petla programu<br />    for (;;)<br />    {<br /><br />    ustaw_wszy_wys<br /><br />        for(;;)<br />        {<br /><br /><br /><br />            //jezeli wcisniemy S1 to zwiekszamy 1 liczbe<br />            if(STATE1)<br />            {<br />            if(a0 == 99)a0 = -1;<br />                a0++;<br /><br />                //tymczasowe zmienne do obliczen (wyłuskuje cyfry dziesiątek i jednosci)<br />                jednosci = 0;<br />                dziesiatki = 0;<br /><br />                dziesiatki = a0/10;<br />                jednosci = a0 - (dziesiatki*10);<br /><br /><br />                //modyfikuje<br />                wys&#91;0&#93; = dziesiatki;<br />                wys&#91;1&#93; = jednosci;<br />                //licze<br />                a++;<br /><br />            }<br /><br />            //jezeli wcisniemy S2 to zmniejszamy 1 liczbe<br />//            if (STATE2)<br />//{<br />//if (a0 == 0)<br />//a0 = 100;<br />//a0--;<br />//<br />////tymczasowe zmienne do obliczen (wyłuskuje cyfry dziesiątek i jednosci)<br />//            jednosci = 0;<br />//            dziesiatki = 0;<br />//<br />//dziesiatki = a0 / 10;<br />//jednosci = a0 - (dziesiatki * 10);<br />//<br />////modyfikuje<br />//wys&#91;0&#93; = dziesiatki;<br />//wys&#91;1&#93; = jednosci;<br />////licze<br />//a--;<br />//<br />//}<br /><br /><br /><br />        }<br />        i = 0;<br /><br /><br /><br />    }<br /><br />    return 1;<br />}<br /><br />void ini()<br />{<br />    //ma wyswietlic 0, 0, 0, 0<br />    ustaw_wszy_wys<br />    PORTA = hex_7&#91;0&#93;;<br /><br />}<br /><br />int butt(uint8_t button) {<br />//tmp - tymczasowa stala ktora inkrementujemy i wpisujemy jej wartosc do tablicy<br />//odpowiedzialnej za zapewnienie eliminacji drgan stykow<br /><br />if (!(PIND &amp; (1 &lt;&lt; button))) {<br />tmp++;<br />//co przerwanie zmienna jest inkrementowana<br />butt_state&#91;button&#93; = tmp;<br /><br />//jezeli odczekamy wartosc: interwał przerwania x tmp to zwracamy 1;<br />if (butt_state&#91;button&#93; &gt;= 30562) {<br />butt_state&#91;button&#93; = 0;<br />tmp = 0;<br />return 1;<br />}<br /><br />} else<br />tmp = 0;<br />butt_state&#91;button&#93; = 0;<br />return 0;<br />}[/syntax]<br /><br /><br /><span style="color: #FF0000">Kod umieszczamy przy pomocy syntax=c - Zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1039">fullmoonguy</a> — 28 cze 2013, o 00:03</p><hr />
]]></content>
</entry>
</feed>