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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-03-27T21:02:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2680&amp;mode</id>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T21:02:53+01:00</updated>
<published>2013-03-27T21:02:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32141#p32141</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32141#p32141"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32141#p32141"><![CDATA[
biorę się za studiowanie,<br /><br />moje zapotrzebowanie to wykrycie zalania - zbocze malejące<br />i wyschnięcia - zbocze rosnące<br /><br />nie wiedziałem, że mogę wybudzać się z POWERDOWN zboczami<br />i kombinowałem stanem niskim na INT0 i to mnie jak na razie przerosło<br /><br />ale jak opanuje PCINT ze zboczami to już powinno pójść bez problemu<br /><br />Twoje rady są bezcenne, zauważyłem już to nie raz, dzięki, duży szacunek<br />za takie podejście, tak trzymaj<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 21:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-03-27T20:25:16+01:00</updated>
<published>2013-03-27T20:25:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32135#p32135</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32135#p32135"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32135#p32135"><![CDATA[
Jest zaraz za INT0/INT1. W skrócie:<br />- każde wyprowadzenie mikrokntrolera atmega88pa ma przypisaną funkcję PCINx (x=0...23). Dla PB x=0..7, dla PC x=8...14(15-nie ma bo nie ma PC7) i dla PD x=16...23<br />- jest tylko 3 wektory przerwań PCINT0_vect, PCINT1_vect i PCINT2_vect i każdy obsługuje po 8 (7) wejść<br />- które wejścia będą generować przerwanie wybieramy w rejestrach PCMSK0, PCMSK1, PCMSK2 ustawiając bity o nazwach PCINTx<br />- jeśli są wybrane przykładowo 2 wyprowadzenia z jednej grupy/portu to zmiana na którymkolwiek z nich generuje przerwanie, które jest wspólne dla całej grupy. Jeśli projektujemy urządzenie to rozsądnie wybierać wyprowadzenia z różnych portów, bo to uprości funkcję obsługi przerwania, gdyż nie trzeba wtedy dodatkowo np. w pętli głównej sprawdzać stanu pinów<br />- przerwania odblokowuje się w rejestrze PCICR za pomocą bitów PCIE0, PCIE1 i PCIE2<br />- rozsądnie skasować flagi przerwań w rejestrze PCIFR wpisując 1 na pozycje PCIFx<br />- każda zmiana stanu z wysokiego na niski i z niskiego na wysoki generuje przerwanie<br />- PCINTx podobnie jak INTx można wykorzystać do generowania przerwania programowego (wystarczy skonfigurować przerwanie i zmienić stan wyjścia). Można również zresetować w ten sposób mikrokontroler jeśli przerwanie jest ustawione, ale nie ma funkcji do jego obsługi<br /><br />Przykład zastosowania  <img src="https://forum.atnel.pl/images/smilies/icon_idea.gif" alt=":idea:" title="Pomysł" /> <br />Jeśli potrzebujesz budzić mikrokontroler za pomocą USARTu jak to jest w najnowszych mikrokontrolerach to wystarczy pinowi, który pełni funkcję RXD dodać dodatkową funkcję PCINT16 i niemożliwe staje się możliwe. Tracimy jeden znak, ale to nic.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 mar 2013, o 20:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T18:53:55+01:00</updated>
<published>2013-03-27T18:53:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32108#p32108</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32108#p32108"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32108#p32108"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />W powyższym przykładzie brakuje sei(); a swoją drogą to powinieneś pokazać cały kod, bo przykładowo może nie podciągasz wejścia do plusa.<br />W atmega88pa dodane jest Pin Change Interrupt, które można wykorzystać do wybudzania mikrokontrolera z trybu PowerDown zboczem narastającym lub opadającym właściwie na każdym pinie mikrokontrolera.<br /></div><br />sei oczywiście jest w bloku inicjującym rfm70 i przerwania, nie pokazałem ich tutaj, ale przerwanie INT0 działa,<br />podciągnąłem do plusa rezystorem 10k nawet<br />natomiast informacja o Pin Change Interrupt (zbocza) to dla mnie najlepsze rozwiązanie by było,<br />gdzie szukać jak to ustawić?<br />w DS znalazłem INT0 i INT1 jasno opisane, ale nie widzę tego samego do Pin Change Interrupt, ale pewnie słabo szukam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-03-27T18:12:58+01:00</updated>
<published>2013-03-27T18:12:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32098#p32098</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32098#p32098"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32098#p32098"><![CDATA[
W powyższym przykładzie brakuje sei(); a swoją drogą to powinieneś pokazać cały kod, bo przykładowo może nie podciągasz wejścia do plusa.<br />W atmega88pa dodane jest Pin Change Interrupt, które można wykorzystać do wybudzania mikrokontrolera z trybu PowerDown zboczem narastającym lub opadającym właściwie na każdym pinie mikrokontrolera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 mar 2013, o 18:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T17:43:33+01:00</updated>
<published>2013-03-27T17:43:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32096#p32096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32096#p32096"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32096#p32096"><![CDATA[
[syntax=c]<br />//Bank0 register initialization value<br />const uint8_t Bank0_Reg[][2] PROGMEM = {<br />{0,0x0F},//reflect RX_DR\TX_DS\MAX_RT,Enable CRC ,2byte,POWER UP,PRX<br />{1,0x3F},//Enable auto acknowledgement data pipe5\4\3\2\1\0<br />{2,0x3F},//Enable RX Addresses pipe5\4\3\2\1\0<br />{3,0x03},//RX/TX address field width 5byte<br />{4,0xff},//auto retransmission dalay (4000us),auto retransmission count(15)<br />{5,0x17},//23 channel<br />{6,0x07},//air data rate-1M,out power 0dbm,setup LNA gain<br />              //{6,0x17} tak było do RFM70<br />[/syntax]<br />z tym moim programem to muszę pomyśleć, bo wiem, że to dziwnie wygląda  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 17:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-27T16:45:05+01:00</updated>
<published>2013-03-27T16:45:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32085#p32085</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32085#p32085"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32085#p32085"><![CDATA[
No ok - jasne taki fragment kodu jest przejrzysty - ale co to znaczy że funkcja nie startuje ? to co przerwanie nagle się nie wykonuje ? ... a nie wykasowałeś przypadkowo inicjalizacji tego przerwania ?<br /><br />daj znać..<br /><br />a jeśli chodzi o bibliotekę dla RFM73 - to możesz podpowiedzieć nawet tutaj co trzeba zmienić ? sam jestem ciekaw bo jeszcze się tym nie zająłem a pewnie innym też się przyda<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 mar 2013, o 16:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T16:36:43+01:00</updated>
<published>2013-03-27T16:36:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32082#p32082</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32082#p32082"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32082#p32082"><![CDATA[
[syntax=c]<br />int main(void)<br />{<br />        flaga_int0 = 0;<br /> <br />        while(1)<br />        {<br />                if ( flaga_int0 == 1 )<br />                {<br />                        cli();<br />                        nadawaj();<br />                }<br />        }<br />}<br />ISR(INT0_vect)<br />{<br />        flaga_int0 = 1;<br />}<br />[/syntax]<br /><br />no to brnę dalej ...<br />usypianie już dawno wyłączyłem, aby mnie nie myliło<br />wywaliłem nadawaj() do pętli głównej... i teraz ta funkcja w ogóle nie startuje  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br />nic innego nie zmieniłem<br />oczywiście to nie cały kod, ale tego za dużo by było<br /><br />przy okazji - uruchomiłem RFM73 - potrzebna jest tylko jedna zmiana w Twoich Mirek bibliotekach<br />i chodzi z takimi samymi parametrami jak RFM73, trzeba zmienić tylko jedną wartość<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 16:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-27T15:58:37+01:00</updated>
<published>2013-03-27T15:58:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32076#p32076</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32076#p32076"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32076#p32076"><![CDATA[
to nie jest pełny kod a pewnie popełniasz ten błąd - że u ciebie czynnik wywołujący przerwanie trwa dosyć długo, więc co z tego że zrobisz cli(); .... jeśli za chwilę jak domniemuję tylko uśpisz procka a przerwanie znowu nastąpi .... a zatem zaczyna tu występować takie jakby zjawisko drgań styków w klawiszach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />musisz zatem po nadaniu czegoś - a nadawaj to panie z tej pętli głównej - po co z przerwania ? .... w ogóle wtedy można nawet byłoby przerwania nie używać tylko sprzętowej flagi przerwania - ale ok o tym później żeby nie mieszać.<br /><br />więc gdy nadasz coś - to zrób sobie jakiś _delay_ms(1000); zakładając że 1000ms wystarczy ci do usunięcia przyczyny wywołującej to przerwanie i dopiero wtedy połóż procka znowu spać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Gdy zaśnie to już przyczyna ustanie aż do czasu kiedy znowu KIEDYŚ tam się pojawi <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=54">mirekk36</a> — 27 mar 2013, o 15:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T15:36:16+01:00</updated>
<published>2013-03-27T15:36:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32072#p32072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32072#p32072"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32072#p32072"><![CDATA[
[syntax=c]<br />int main(void)<br />{<br />        flaga_int0 = 0;<br /><br />        while(1) <br />{<br />if ( flaga_int0 == 1 )<br />{<br />cli();<br />}<br />}<br />}<br />ISR(INT0_vect)<br />{<br />nadawaj();<br />flaga_int0 = 1;<br />}<br />[/syntax]<br />coś robię nie tak bo funkcja nadawaj() wykonuje się bez przerwy,<br />a przecież cli() powinno ją wyłączyć - procesor atmega88<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 15:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-27T14:21:07+01:00</updated>
<published>2013-03-27T14:21:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32060#p32060</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32060#p32060"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32060#p32060"><![CDATA[
Moim zdaniem troszkę mylisz podejście - bo jeśli używasz INTx do wybudzania procka a rzeczywiście to może się odbywać TYLKO za pomocą stanu niskiego a nie zbocza to:<br /><br />1. nie pisz jakiejś dziwnej obsługi tego przerwania, tylko po wybudzeniu przekaż sterowanie do pętli głównej <br />2. zablokuj na ten czas działanie tego przerwania bo po co<br />3. obsłuż sobie zgłoszone przerwanie (zdarzenie) w tej pętli głównej<br />4. jak już będziesz mógł iść znowu spać (tzn procek) to znowu odblokuj przerwanie przed zaśnięciem<br /><br />i sprawa załatwiona <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=54">mirekk36</a> — 27 mar 2013, o 14:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2013-03-27T14:17:32+01:00</updated>
<published>2013-03-27T14:17:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32058#p32058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32058#p32058"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32058#p32058"><![CDATA[
Timer chyba nie będzie dobrym rozwiązaniem ale idąc tym tropem:<br /><br />w przerwaniu:<br />- migasz diodą<br />- wyłaczasz przerwanie<br /><br />w main:<br />- badasz czy sygnał który wywołuje przerwanie wrócił do stanu wysokiego (lub jest wysoki) i wtedy włączasz obsługę przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 27 mar 2013, o 14:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T14:05:49+01:00</updated>
<published>2013-03-27T14:05:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32056#p32056</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32056#p32056"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32056#p32056"><![CDATA[
xamrex<br />zboczem nie mogę, bo w powerdown chcę ustawiać procek i nie wybudzę go (atmega88)<br /><br />reszta cosik skomplikowana <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />, ale przebadam, jeśli prościej się nie da<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-03-27T14:06:20+01:00</updated>
<published>2013-03-27T14:05:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32055#p32055</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32055#p32055"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32055#p32055"><![CDATA[
Mi sie wydaje, że poprostu w przerwaniu dla licznika sprawdzasz np. co 20s czy wcisnales przycisk i tyle. I wtedy masz jakby przycisk nie reagowal. Zresztą pokaż ten swój kod, będzie łatwiej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 27 mar 2013, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2013-03-27T13:58:40+01:00</updated>
<published>2013-03-27T13:58:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32054#p32054</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32054#p32054"/>
<title type="html"><![CDATA[Re: przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32054#p32054"><![CDATA[
Nie lepiej przerwanie wywołane zboczem?<br /><br />No ale odpowieadając na twoje pytanie.<br />W przerwaniu od INT(co masz tam miganie dioda) robisz tak:<br />0.migasz dioda<br />1.wlaczasz jakis timer i zliczasz czas<br />2.Wylaczasz przerwanie od int (Czyli w rejestrze GICR ustawiasz 0 na odpowiednim przerwaniu)<br /><br />a w main<br />warunek<br />jesli timer&gt;20sek <br />wlacz przerwanie od int (W  GICR ustawiasz 1)<br />wylacz timer<br /><br />KONIEC<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 27 mar 2013, o 13:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2013-03-27T13:39:21+01:00</updated>
<published>2013-03-27T13:39:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32051#p32051</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32051#p32051"/>
<title type="html"><![CDATA[przerwanie zewnętrzne]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2680&amp;p=32051#p32051"><![CDATA[
wywołuję przerwanie stanem niskim, wykonuje się np. jedno mignięcie diody,<br />ale stan niski utrzymuje się nadal i dioda miga sobie na okrągło<br /><br />a ja bym chciał aby procesor po tym jednym mignięciu na jakiś czas nie <br />reagował na przerwanie<br /><br />jakieś cli(), zmiana kierunku na INT0 po wykonaniu mignięcia w przerwaniu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 27 mar 2013, o 13:39</p><hr />
]]></content>
</entry>
</feed>