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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-12T14:30:44+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5960&amp;mode</id>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-12T14:30:44+01:00</updated>
<published>2014-02-12T14:30:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70115#p70115</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70115#p70115"/>
<title type="html"><![CDATA[Re: Problem z wejściem w przerwanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70115#p70115"><![CDATA[
<div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />Chyba jednak powinno być:<br /><br />    TCCR0 &amp;=~ (1&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />    TCCR2 &amp;=~ (1&lt;&lt;CS00);    //ZATRZYMANIE licznika<br /></div><br />Oczywiście, że tak. Moje niedopatrzenie. Już poprawiłem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 12 lut 2014, o 14:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2014-02-12T14:09:08+01:00</updated>
<published>2014-02-12T14:09:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70109#p70109</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70109#p70109"/>
<title type="html"><![CDATA[Re: Problem z wejściem w przerwanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70109#p70109"><![CDATA[
<div class="quotetitle">jacekk232 napisał(a):</div><div class="quotecontent"><br />W ten sposób nie zerujemy ustawionych bitów <br />[syntax=c]TCCR0 |= (0&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />TCCR2 |= (0&lt;&lt;CS00);    //ZATRZYMANIE licznika[/syntax]<br />Poprawny zapis powinien wyglądać tak<br />[syntax=c]TCCR0 &amp;=~ (0&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />TCCR2 &amp;=~ (0&lt;&lt;CS00);    //ZATRZYMANIE licznika[/syntax]<br /></div><br /><br /><br />Chyba jednak powinno być:<br />[syntax=c]TCCR0 &amp;=~ (1&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />TCCR2 &amp;=~ (1&lt;&lt;CS00);    //ZATRZYMANIE licznika[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 12 lut 2014, o 14:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-12T14:28:41+01:00</updated>
<published>2014-02-12T13:58:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70107#p70107</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70107#p70107"/>
<title type="html"><![CDATA[Re: Problem z wejściem w przerwanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70107#p70107"><![CDATA[
W ten sposób nie zerujemy ustawionych bitów <br />[syntax=c]TCCR0 |= (0&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />TCCR2 |= (0&lt;&lt;CS00);    //ZATRZYMANIE licznika[/syntax]<br />Poprawny zapis powinien wyglądać tak<br />[syntax=c]TCCR0 &amp;=~ (1&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />TCCR2 &amp;=~ (1&lt;&lt;CS00);    //ZATRZYMANIE licznika[/syntax]<br /><br />Zapis [syntax=c]TCCR0 |= (0&lt;&lt;CS00);[/syntax] można rozwinąć do takiej postaci[syntax=c]TCCR0 = TCCR0 | (0&lt;&lt;CS00);[/syntax]<br /> <br />Natomiast zapis[syntax=c](0&lt;&lt;CS00)[/syntax] zostanie rozwinięty do postaci[syntax=c]0b00000000[/syntax]<br />Jeśli w rejestrze TCCR0 ustawiony będzie bit nr 0 to co będzie wynikiem takiej operacji[syntax=c]TCCR0 = 0b00000001 | 0b00000000;[/syntax]<br />Po takiej operacji w TCCR0 nadal będzie ustawiony bit nr 0, a co za tym idzie timer nadal będzie sobie radośnie liczył <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /><br />Poza tym ten warunek też nie zadziała albo zadziała w niewłaściwy sposób[syntax=c]if(MCUCR &amp; (0&lt;&lt;ISC10)){    //naliczanie przy zboczu opadającym[/syntax]<br /><br />Tak się nie sprawdza czy dany bit jest wyzerowany. Tylko tak[syntax=c]if( !(MCUCR &amp; (1&lt;&lt;ISC10)) ){    //naliczanie przy zboczu opadającym[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 12 lut 2014, o 13:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2014-02-12T13:12:03+01:00</updated>
<published>2014-02-12T13:12:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70103#p70103</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70103#p70103"/>
<title type="html"><![CDATA[Re: Problem z wejściem w przerwanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70103#p70103"><![CDATA[
Pierwsze co mi się rzuca w oczy to użycie delay w przerwaniu<br /><br />[syntax=c]ISR(INT0_vect){<br /> <br />lcd_str(&quot;Jestem w przerwaniu&quot;);<br />_delay_ms(2000);[/syntax]<br /><br />Nigdy tego nie robimy!!!<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />Ustaw sobie w przerwaniu jakąś flagę że nastąpiło wywołanie przerwania, a następnie sprawdź to w pętli głównej i ewentualnie wyświetl wynik na LCD.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 12 lut 2014, o 13:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-02-12T13:11:24+01:00</updated>
<published>2014-02-12T13:11:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70102#p70102</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70102#p70102"/>
<title type="html"><![CDATA[Re: Problem z wejściem w przerwanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70102#p70102"><![CDATA[
a jak ma w nią wejść jak masz zahartowane <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> linie od 70 do 94 ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 12 lut 2014, o 13:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jacentyg1990]]></name></author>
<updated>2014-02-12T13:01:22+01:00</updated>
<published>2014-02-12T13:01:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70100#p70100</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70100#p70100"/>
<title type="html"><![CDATA[Problem z wejściem w przerwanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5960&amp;p=70100#p70100"><![CDATA[
Witam, mam problem z poniższym kodem, nie mam pojęcia dlaczego program w ogóle nie wchodzi w przerwanie. Przydałaby się jakaś fachowa pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><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;lcd44780.h&quot;<br />#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br /> <br />#define KEY_1 (1&lt;&lt;PC7)            //klawisz 1<br />#define KEY_2 (1&lt;&lt;PC6)            //klawisz 2<br />#define TRIGER_1 (1&lt;&lt;PD0)         //pin wyzwalający 1<br />#define TRIGER_2 (1&lt;&lt;PD1)         //pin wyzwalający 2<br />#define ECHO_1 (1&lt;&lt;PD2)         //przerwanie zewnętrzne INT0<br />#define ECHO_2 (1&lt;&lt;PD3)         //przerwanie zewnętrzne INT1        <br /><br />volatile uint16_t licznik_1;    //czas z pierwszego czujnika<br />volatile uint16_t licznik_2;    //czas z drugiego czujnika<br />volatile uint8_t FLAGA_1;        //flaga odebranego pomiaru z pierwszego czujnika<br />volatile uint8_t FLAGA_2;        //flaga odebranego pomiaru z drugiego czujnika<br /><br />void triger();        //funkcja wyzowlenia pomiaru<br />uint8_t klawisz_wcisniety(uint8_t klawisz);    //sprawdzenie który klawisz wciśnięty<br /> <br />int main()<br />{<br /> <br />DDRC &amp;= ~(KEY_1);<br />PORTC |= (KEY_1);<br />DDRC &amp;= ~(KEY_2);<br />PORTC |= (KEY_2);<br /><br />DDRD |= (TRIGER_1);    <br />PORTD &amp;= ~(TRIGER_1); <br />DDRD |= (TRIGER_2);    <br />PORTD &amp;= ~(TRIGER_2); <br /><br />DDRD &amp;= ~(ECHO_1);<br />PORTD |= (ECHO_1); <br />DDRD &amp;= ~(ECHO_2);<br />PORTD |= (ECHO_2); <br /><br />//Ustawienia rejestru przerwania INT0<br />MCUCR = (1&lt;&lt;ISC00) | (0&lt;&lt;ISC01);     //Zbocze narastające wywołuje przerwanie<br />GICR = (1&lt;&lt;INT0);                     //Bit odblokowujący zewnętrzne przerwanie INT0<br />//Ustawienia rejestru przerwania INT1<br />MCUCR = (1&lt;&lt;ISC10) | (0&lt;&lt;ISC11);     //Zbocze narastające wywołuje przerwanie<br />GICR = (1&lt;&lt;INT1);                     //Bit odblokowujący zewnętrzne przerwanie INT1<br /><br />//Ustawienia Timera TC0 - zliczanie co 1us<br />TCCR0 |= (1&lt;&lt;WGM01);                <br />TCCR0 |= (0&lt;&lt;CS00); //bez preskalera<br />OCR0 = 8;<br />TIMSK |= (1&lt;&lt;OCIE0);<br /><br />//Ustawienia Timera TC2 - zliczanie co 1us<br />TCCR2 |= (1&lt;&lt;WGM21);                <br />TCCR2 |= (0&lt;&lt;CS00);<br />OCR2 = 8;<br />TIMSK |= (1&lt;&lt;OCIE2);<br /> <br />sei();                 //globalne zezwolenie na przerwania<br />lcd_init();<br /> uint8_t zm=0;<br /><br />    while(1)<br />    {<br />if(zm==0){<br />triger();<br />zm++;<br />}<br />    /*    if(klawisz_wcisniety(KEY_1)) {<br />        triger();<br />        }<br /><br />        if(FLAGA_1){<br />        <br />        lcd_int(licznik_1);    <br /><br />        FLAGA_1=0;<br />        licznik_1=0;<br />        }<br />        <br />        if(klawisz_wcisniety(KEY_2)){<br />         triger();<br />         }<br />        <br />        if(FLAGA_2){<br /><br />        lcd_locate(1,0);<br />        lcd_int(licznik_2);    <br /><br />        FLAGA_2=0;<br />        licznik_2=0;<br />        }<br />*/<br />        <br />    }//koniec while<br /> <br />}//koniec main<br /><br />//----------------------PRZERWANIA<br />ISR(INT0_vect){<br /><br />lcd_str(&quot;Jestem w przerwaniu&quot;);<br />_delay_ms(2000);<br /><br />    if(MCUCR &amp; (1&lt;&lt;ISC00)){    //naliczanie przy zboczu narastającym<br /><br />    TCCR0 |= (1&lt;&lt;CS00); //URUCHOMIENIE licznika<br /><br />    }<br /><br />    if(MCUCR &amp; (0&lt;&lt;ISC00)){    //naliczanie przy zboczu opadającym<br /><br />    TCCR0 |= (0&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />    FLAGA_1=1;<br /><br />    }<br /><br />    MCUCR ^= (1&lt;&lt;ISC00);            //Zmiana zbocza wywołującego przerwanie<br /><br />}<br /><br />ISR(INT1_vect){<br /><br />lcd_str(&quot;Jestem w przerwaniu&quot;);<br />_delay_ms(2000);<br />    if(MCUCR &amp; (1&lt;&lt;ISC10)){    //naliczanie przy zboczu narastającym<br /><br />    TCCR2 |= (1&lt;&lt;CS00); //URUCHOMIENIE licznika<br /><br />    }<br /><br />    if(MCUCR &amp; (0&lt;&lt;ISC10)){    //naliczanie przy zboczu opadającym<br /><br />    TCCR2 |= (0&lt;&lt;CS00);    //ZATRZYMANIE licznika<br />    FLAGA_2=1;<br /><br />    }<br /><br />    MCUCR ^= (1&lt;&lt;ISC10);            //Zmiana zbocza wywołującego przerwanie<br /><br />}<br /><br />ISR(TIMER0_COMP_vect){    <br /><br />licznik_1++;<br /><br />}<br /><br />ISR(TIMER2_COMP_vect){    <br /><br />licznik_2++;<br /><br />}<br /><br /><br />//----------------------FUNKCJE <br />void triger()<br />    {<br />        PORTD &amp;= ~(1&lt;&lt;PD0);    //wystawienie zera na TRIG<br />        _delay_us(2);<br />        PORTD |= (1&lt;&lt;PD0);     //wystawienie jedynki na TRIG<br />        _delay_us(10);                    //wymagane 10 us stanu wysokiego<br />        PORTD &amp;= ~(1&lt;&lt;PD0);    //wystawienie zera na TRIG<br />    <br />    }<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz){<br />    if (!(PINC &amp; klawisz)) {<br />                _delay_ms(120);<br />                if (!(PINC &amp; klawisz)){<br />                return 1;<br />                }<br />                }<br />                 return 0;<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c- Różowo-zielony (czyli sraczkowy) J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2567">Jacentyg1990</a> — 12 lut 2014, o 13:01</p><hr />
]]></content>
</entry>
</feed>