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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12741&amp;mode</id>
<entry>
<author><name><![CDATA[tomek]]></name></author>
<updated>2015-08-26T11:31:39+01:00</updated>
<published>2015-08-26T11:31:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138349#p138349</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138349#p138349"/>
<title type="html"><![CDATA[Re: Przerwania zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138349#p138349"><![CDATA[
Dokładnie o to mi chodziło ... dla zrozumienia zjawiska i jakichś prostych przykładów zastosowań gdzie nie jest istotne kilkadziesiąt ms w lewo czy prawo wystarczy. <br />Dla bardziej wyśrubowanych w czasie projektów i programistów którzy powoli kumają co w trawie piszczy cykl artykułów które stworzyłeś o omijaniu problemów ze stykami, to taki swego rodzaju rodzynek, bo mało że w języku ojczystym to jeszcze w przystępnej formie .... tylko czytać i wbijać do głowy ..   <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=178">tomek</a> — 26 sie 2015, o 11:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-08-25T09:48:02+01:00</updated>
<published>2015-08-25T09:48:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138266#p138266</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138266#p138266"/>
<title type="html"><![CDATA[Re: Przerwania zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138266#p138266"><![CDATA[
<div class="quotetitle">tomek napisał(a):</div><div class="quotecontent"><br />Z grubsza polega to na tym :<br /></div><br />Z tymi pętlami opóźniającymi to był TYLKO I WYŁĄCZNIE poglądowy sposób, żeby ktoś w prostym ćwiczeniu zrozumiał w ogóle co to są drgania styków. ABSOLUTNIE nie jest to polecane rozwiązanie podczas pisania programów już docelowych bo wprowadza tylko zamieszanie, chaos i tragedię <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... troszkę przejaskrawiam ... ale jeśli by ktoś jeszcze wpadł na iście szatański pomysł aby takie pętle opóźniające dawać w przerwaniach to nie ma w tym co napisałem wyżej ŻADNEGO przejaskrawienia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... Dlatego w dalszej części książki pokazałem inne i jedno z wielu ale prawidłowe podejście do obsługi eliminacji drgań styków a na blogu jeszcze inne i przy okazji prostsze dla początkujących:<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 --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 sie 2015, o 09:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tomek]]></name></author>
<updated>2015-08-25T07:44:34+01:00</updated>
<published>2015-08-25T07:44:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138261#p138261</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138261#p138261"/>
<title type="html"><![CDATA[Re: Przerwania zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138261#p138261"><![CDATA[
Robiłem doświadczenia z &quot;czytaniem&quot; stanu przekaźników i rzeczywiście łączące się szybko styki potrafią dawać całą serię impulsów zamiast jednego, stąd bierze Ci się pewnie podwójna inkrementacja.<br />Testowałem też sposób na pozbycie się tego problemu, Mirek opisał to w swojej pierwszej książce ....<br />Pomysł polega na tym że kiedy program stwierdza że wcisnąłeś przycisk czeka w krótkiej pętli i testuje drugi raz .... <br />Z grubsza polega to na tym :<br /><br /><br />[syntax=c]if (klawisz)<br />  {<br />   pętla ;<br /><br />        if (klawisz)<br />        {<br />        działanie;<br />        }<br />  }[/syntax]<br /><br /><br /><br /><br />I fajnie to działa fajnie  ... sprawdzałem ....  opóżnienia rzędu 50...100ms  są ok<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=178">tomek</a> — 25 sie 2015, o 07:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-08-25T01:36:44+01:00</updated>
<published>2015-08-25T01:36:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138257#p138257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138257#p138257"/>
<title type="html"><![CDATA[Re: Przerwania zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138257#p138257"><![CDATA[
Zamiast leciec po ksiedza poczytaj o drganiach stykow ... co to takiego jest ... to zrozumiesz dlaczego masz taki efekt .... to nie jest czarymary ... to podstawy podstaw<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 sie 2015, o 01:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mnich16]]></name></author>
<updated>2015-08-24T23:50:40+01:00</updated>
<published>2015-08-24T23:50:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138255#p138255</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138255#p138255"/>
<title type="html"><![CDATA[Przerwania zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12741&amp;p=138255#p138255"><![CDATA[
Witajcie otóż mam taki problem potrzebuję zrobić inkrementację oraz dekrementację zmiennej w przerwaniach zewnętrznych INT0 oraz INT1  na Atmedze644, wyzwalanie przerwania zrobiłem za pomocą przycisków zwieranych do masy (przerwania na zbocze opadające) i rzeczywiście po wciśnięciu jednego przycisku zmienna się inkrementuję a po przyciśnięciu drugiego przycisku zmienna się dekrementuję ale nie o 1 tak jak bym chciał.  Założenie jest takie że jak wcisne przycisk jeden raz to do zmiennej doda się liczba 1, jak wcisnę drugi przycisk to od zmiennej odejmię się 1 jednak zmienna ta nieraz inkrementuje się o jeden ale nieraz o dwa, trzy itp.  a ja chce żeby za każdy było to o wartość jeden. <br /><br />Poniżej kod<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />volatile uint8_t temp_zad=0;<br /><br />int main(void){<br /><br /><br />lcd_init();<br /><br />EICRA |=(1&lt;&lt;ISC01);     //INTO zbocze opadające<br />EICRA |=(1&lt;&lt;ISC11);     //INT1 zbocze opadające<br />EIMSK |=(1&lt;&lt;INT0)|(1&lt;&lt;INT1);   //przerwania ON<br />//EIFR |=(1&lt;&lt;INTF0)|(1&lt;&lt;INTF1);<br /><br /><br /><br />DDRD &amp;=~(1&lt;&lt;PD2);            // przycisk temp--<br />PORTD |=(1&lt;&lt;PD2);<br /><br />DDRD &amp;=~(1&lt;&lt;PD3);            // przycisk temp++<br />PORTD |=(1&lt;&lt;PD3);<br /><br />sei();<br /><br />lcd_cls();<br />while(1){<br /><br /><br />lcd_locate(0,8);<br />lcd_int(temp_zad);<br />_delay_ms(500);<br />}<br /><br />}<br /><br /><br /><br />ISR(INT0_vect)<br />{<br /><br />temp_zad--;<br /><br /><br />}<br /><br /><br /><br /><br /><br />ISR(INT1_vect)<br />{<br /><br />temp_zad++;<br /><br /><br />}[/syntax]<br /><br /><br /><br />czy przerwania dobrze ustawiłem w rejestrach czy może o czymś zapomniałem?<br />nie bardzo rozumiem do czego służy rejestr EIFR ale czy go ustawie czy nie to reakcja jest taka sama<br /><br />Proszę o pomoc<br /><br />jeszcze jedno w nocie katalogowej Atmegi644 na stronie 67 jest rejestr EIMSK w którym załącza się przerwanie i w rejestrze tym bit numer 0 jest to IINT0 nie wiem czy jest to błąd w nocie czy co ale jak widać występują tutaj na początku dwie litery &quot;I&quot;  czyli IINT0   ale w kodzie to nie działa bo jest błąd, działa jak wpiszę się jedną literkę &quot;I&quot; czyli INT0<br /><br /><br />i na koniec ciekawostka  na początku w kodzie źle skonfigurowałem kierunki pinów bo zapomniałem o nawiasach i przesunięciu bitowym czyli wyglądało to tak<br /><br /><br />        [syntax=c]DDRD &amp;=~PD2;            // przycisk temp--<br />PORTD |=PD2;<br /><br />DDRD &amp;=~PD3;            // przycisk temp++<br />PORTD |=PD3;[/syntax]<br /><br />a reszta kodu była tak jak wyżej, i była dziwna reakcja program się skompilował bez błędu i wgrał do procka jednak zmienna nie inkrementowała sie ani dekrementowała po przycisnięciu przycisków ale gdy zbliżałem palec do przycisków bez ich przyciskania to zmienna się zwiększała o losowe wartości hm troche to dla mnie dziwne już chciałem lecieć po księdza żeby odprawił egzorcyzmy nad moim zestawem uruchomieniowym gotronik<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5032">Mnich16</a> — 24 sie 2015, o 23:50</p><hr />
]]></content>
</entry>
</feed>