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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-12-26T08:24:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=17134&amp;mode</id>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2016-12-26T08:24:12+01:00</updated>
<published>2016-12-26T08:24:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178235#p178235</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178235#p178235"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178235#p178235"><![CDATA[
Nie działało ci ponieważ w ifie podales co chcesz sprawdzić ale nie podałeś  w czym (jakim rejestrze). Więc zamiast<br />[syntax=c]if ((ISC00)&amp;&amp;(ISC01))[/syntax]<br />Mogłoby być tak<br />[syntax=c]if ( (MCUCR &amp; (1 &lt;&lt; ISC00)) &amp;&amp; (MCUCR &amp; (1 &lt;&lt; ISC01)) )[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 26 gru 2016, o 08:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[leszcz84]]></name></author>
<updated>2016-12-25T12:56:08+01:00</updated>
<published>2016-12-25T12:56:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178204#p178204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178204#p178204"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178204#p178204"><![CDATA[
O qrcze!!!Zadziałało:) Wielkie dzięki, za pomoc i rozwiązanie problemu. A swoją drogą....czemu to nie chciało wcześniej działać?<br />Jeszcze raz wielkie dzięki i Wesołych Świąt życzę!!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8597">leszcz84</a> — 25 gru 2016, o 12:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-25T12:44:20+01:00</updated>
<published>2016-12-25T12:44:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178203#p178203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178203#p178203"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178203#p178203"><![CDATA[
Spróbuj z użyciem flagi, nie mam jak przetestować, ale powinno zadziałać.<br />[syntax=c]//************************procedura obsługi przerwania od INT0<br />ISR(INT0_vect)//przerwanie od zbocza narastającego pinu INT0<br />{   static uint8_t flaga = 0;<br /><br />    PORTB &amp;= ~(1&lt;&lt;PB1);<br />                                                                                              <br />    if ( !flaga )    //jesli przerwanie od zbocza narastajacego<br />    {<br />        PORTB &amp;= ~(1&lt;&lt;PB2);//zapal led na PB2<br />        PORTB |= (1&lt;&lt;PB3);//zgaś led na PB3<br />        MCUCR &amp;= ~(1&lt;&lt;ISC01);//wyzerowanie bitu(po to aby przerwanie INT0 było od zbocza opadającego <br />        TCCR0 |=(1&lt;&lt;CS01);//prescaler na 8 (włącz timer 0)    <br />        <br />        flaga = 1;<br />    }                                                             <br />                                               <br />     <br />    else    //jesli przerwanie wlaczone od zbocza opadającego<br />    {       <br />        PORTB |= (1&lt;&lt;PB2);//zgaś led na PB2<br />        PORTB &amp;= ~(1&lt;&lt;PB3);//zapal led na PB3<br />        MCUCR |=  (1&lt;&lt;ISC01);//ustawienie bitu(po to aby przerwanie INT0 było od zbocza narastającego)<br />        TCCR0 &amp;= ~(1&lt;&lt;CS01);//prescaler na 0 (wyłącz timer 0)          <br />        <br />        flaga = 0;<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 25 gru 2016, o 12:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[leszcz84]]></name></author>
<updated>2016-12-25T12:13:54+01:00</updated>
<published>2016-12-25T12:13:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178202#p178202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178202#p178202"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178202#p178202"><![CDATA[
Super!<br />To zadziałało. Teraz świecą się diody LED na PB1 i PB2, czyli następuje przerwanie od INT0 i wykonuje się pierwszy warunek. Pytanie tylko czemu teraz nie jest wykonywana druga funkcja skoro w pierwszej funkcji bit ISC01 jest zerowany?Czyżby podczas wywołania przerwania w pierwszej funkcji bit ISC01 nie był zerowany? To chyba nie możliwe, gdyż sprawdziłem to  ustawiając tylko bit ISC00 na początku programu-podczas konfiguracji przerwania. Druga funkcja w przerwaniu i tak nie jest realizowana(LED na PB3 nie zaświeca się). Dodam, że połączenia są ok, bo je sprawdzałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8597">leszcz84</a> — 25 gru 2016, o 12:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2016-12-25T11:45:34+01:00</updated>
<published>2016-12-25T11:45:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178201#p178201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178201#p178201"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178201#p178201"><![CDATA[
Hej, w ifach zamiast<br />[syntax=c](ISC00)[/syntax]<br />Powinieneś używać<br />[syntax=c](1&lt;&lt;ISC00)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 25 gru 2016, o 11:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2016-12-25T10:09:35+01:00</updated>
<published>2016-12-25T10:09:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178198#p178198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178198#p178198"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178198#p178198"><![CDATA[
<!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 25 gru 2016, o 10:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[leszcz84]]></name></author>
<updated>2016-12-25T10:40:24+01:00</updated>
<published>2016-12-25T10:03:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178197#p178197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178197#p178197"/>
<title type="html"><![CDATA[Problem z przerwaniem INT0 na Atmega8-co tu jest nie tak?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17134&amp;p=178197#p178197"><![CDATA[
Witam starszych i bardziej doświadczonych kolegów.<br />Piszę, a w zasadzie próbuję napisać swój własny kod obsługi czujnika HC-SR04. Chciałem to zrobić stopniowo i po kolei, aby sprawdzić działanie poszczególnych fragmentów kodu. Niestety napotkałem na problem.<br />Program ma działać w następujący sposób:po wykryciu zbocza narastającego na INT0 czyli PD2 program przeskakuje do procedury obsługi przerwania.Ten fakt jest sygnalizowany zaświeceniem diody LED na PB1. Następnie jeśli wyzwalanie od INT0 jest ustawione na zbocze narastające (tak jak to jest ustawione na początku), to ma to być zasygnalizowane diodą LED na PB2, a wyzwalanie na INT0 zostaje ustawione na zbocze opadające. Dalej, jeśli ustawiony jest tylko bit ISC00-reakcja na zbocze opadające, zaświecić się ma dioda LED na PB3, a wyzwalanie na INT0 zostaje znów ustawione na zbocze narastające. <br />Obecnie program działa tak, że zaświeca się tylko dioda LED na PB1. Co jest nie tak w tym kodzie? Do testów pod PD2 podpięty jest switch z rezystorem podciągającym do VCC. A na PORT B podpięte są diody LED. Wywołanie obsługi przerwania następuje po puszczeniu przycisku.<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 /><br />#define startPomiaru (PORTD |= (1&lt;&lt;PD7))//wyzwolenie pomiaru na czujniku<br />#define koniecPomiaru (PORTD &amp;= ~(1&lt;&lt;PD7))//koniec pomiaru na czujniku<br /><br />int main(void)<br />{<br />DDRD |= (1&lt;&lt;PD7);// wyjście do sterowania czujnikiem odległości (triger)<br />DDRB |= ((1&lt;&lt;PB0)|(1&lt;&lt;PB1)|(1&lt;&lt;PB2)|(1&lt;&lt;PB3)|(1&lt;&lt;PB4)|(1&lt;&lt;PB5)|(1&lt;&lt;PB6)|(1&lt;&lt;PB7));// piny z Ledami<br />PORTB |= ((1&lt;&lt;PB0)|(1&lt;&lt;PB1)|(1&lt;&lt;PB2)|(1&lt;&lt;PB3)|(1&lt;&lt;PB4)|(1&lt;&lt;PB5)|(1&lt;&lt;PB6)|(1&lt;&lt;PB7));//zgaś wszystkie ledy<br />DDRD &amp;= ~(1&lt;&lt;PD2);//wejście sygnału echo z czujnika<br /><br /><br />//*******************konfiguracja timera0 dla wywoływania obsługi przerwania<br />TIMSK |=(1&lt;&lt;TOIE0);//włączenie przerwania od przepełnienia licznika<br /><br /><br /><br /><br />//*********************włączenie przerwań od INT0<br />MCUCR |=((1&lt;&lt;ISC00)|(1&lt;&lt;ISC01));//ISC01 włączenie przerwania od zbocza opadającego lub ISC00 i ISC01 od zbocza narastającego<br />GICR |=(1&lt;&lt;INT0);//włączenie przerwania od pinu INT0<br /><br /><br /><br />sei ();//globalne włączenie przerwań<br /><br /><br />while(1)<br />{<br /><br />startPomiaru;<br />_delay_ms(50);<br />koniecPomiaru;<br />_delay_ms(50);<br /><br />PORTB |= ((1&lt;&lt;PB0)|(1&lt;&lt;PB1)|(1&lt;&lt;PB2)|(1&lt;&lt;PB3)|(1&lt;&lt;PB4)|(1&lt;&lt;PB5)|(1&lt;&lt;PB6)|(1&lt;&lt;PB7));//zgaś wszystkie ledy<br />}<br />}<br /><br /><br /><br /><br />//**********************************obsługa przerwania od przepełnienia licznika TCNT0<br />ISR(TIMER0_OVF_vect)//wywołanie przerwania co 2ms<br />{<br /><br /><br /><br />}<br /><br />//************************procedura obsługi przerwania od INT0<br />ISR(INT0_vect)//przerwanie od zbocza narastającego pinu INT0<br />{<br />PORTB &amp;= ~(1&lt;&lt;PB1);<br /><br />if ((ISC00)&amp;&amp;(ISC01))//jesli przerwanie od zbocza narastajacego<br />{<br />PORTB &amp;= ~(1&lt;&lt;PB2);//zapal led na PB2<br />MCUCR &amp;= ~(1&lt;&lt;ISC01);//wyzerowanie bitu(po to aby przerwanie INT0 było od zbocza opadającego<br />TCCR0 |=(1&lt;&lt;CS01);//prescaler na 8 (włącz timer 0)<br />}<br /><br /><br />if ((ISC00)&amp;&amp;(!(ISC01)))//jesli przerwanie wlaczone od zbocza opadającego<br />{<br />PORTB &amp;= ~(1&lt;&lt;PB3);//zapal led na PB3<br />MCUCR |=  (1&lt;&lt;ISC01);//ustawienie bitu(po to aby przerwanie INT0 było od zbocza narastającego)<br />TCCR0 &amp;= ~(1&lt;&lt;CS01);//prescaler na 0 (wyłącz timer 0)<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8597">leszcz84</a> — 25 gru 2016, o 10:03</p><hr />
]]></content>
</entry>
</feed>