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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-01-28T22:33:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22603&amp;mode</id>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2020-01-28T22:33:26+01:00</updated>
<published>2020-01-28T22:33:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=224407#p224407</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=224407#p224407"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=224407#p224407"><![CDATA[
Po pierwsze piny wyzwalające przerwanie masz podciągnięte do Vcc sprzętowo? Bo w programie nigdzie nie włączasz programowego podciągania... Wiszące piny bez podciągnięcia będą żyły własnym życiem przypadkowo wyzwalając przerwania. <br />Po drugie przy takiej konstrukcji programu możesz mieć problemy z jednoznacznym zaobserwowaniem efektów. Zauważ że wyzwalając przerwanie (zapewne przyciskiem lub zwierając przewody) nie zwracasz uwagi na fakt &quot;drgania styków&quot;. Jako że w przerwaniu masz togle to w momencie gdy chcesz przełączyć diodę wyzwalając przerwanie, to tak na prawdę wyzwolisz je wielokrotnie, bo podczas wyzwalania pójdzie kilka impulsów na które procek zareaguje również kilkukrotnie, a stanie się to w bardzo krótkim czasie - w efekcie dla oka możesz zobaczyć albo faktyczną zmianę stanu bądź brak reakcji bo dioda wielokrotnie zmieni stan i zostanie akurat w stanie przed wyzwolenia.<br />Dla testu w przerwaniach zaraz po togle wstaw delaya 100 - 200ms. Oczywiście, w przerwaniu delayów unikamy ale dla testów nie zaszkodzi, a zobaczysz że zadziała.<br />W końcu po trzecie, na przyszłość nie bój się zakładać nowego własnego posta, zamiast dopisywać się z pytaniem pod czyimś i w dodatku nieco już zakurzonym  <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=6265">xentis</a> — 28 sty 2020, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris1975]]></name></author>
<updated>2020-01-28T20:40:11+01:00</updated>
<published>2020-01-28T20:40:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=224406#p224406</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=224406#p224406"/>
<title type="html"><![CDATA[problem z przerwaniem INT0 I INT1 Atmega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=224406#p224406"><![CDATA[
witam<br />tak jak w opisie jestem początkującym a właściwie raczkującym w programowaniu i chciał bym zrozumieć przerwania i w tym celu próbowałem wykorzystać przerwanie INT0 i INT1 w Atmedze32 . W sumie próbowałem zrobić wszystko jak pan Mirek w poradniku ale nie mając Atmegi 328 wykorzystałem w zestawie uruchomieniowym Atmege 32 tylko nie wiem czemu program bez problemu obsługuje chyba przerwanie INT0  a INT1 już nie załączam kod programu jak by któryś z kolegów mógł mi powiedzieć cóż zrobiłem nie tak bo już nie wiem<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED1 (1&lt;&lt;PC6)<br />#define LED2 (1&lt;&lt;PC7)<br />#define SIGNAL1 (1&lt;&lt;PA2)<br />#define SIGNAL2 (1&lt;&lt;PA1)<br /><br />#define LED1_ON PORTC |= (1&lt;&lt;PC6)<br />#define LED2_ON PORTC |= (1&lt;&lt;PC7)<br />#define LED1_TOG PORTC ^= (1&lt;&lt;PC7)<br />#define LED2_TOG PORTC ^= (1&lt;&lt;PC6)<br /><br /><br />int main(void){<br />DDRA |= SIGNAL1 |SIGNAL2;<br />DDRC |= LED1 |LED2;<br />PORTA |= SIGNAL1 |SIGNAL2;<br />PORTC |= LED1 |LED2;<br />GICR |= (1&lt;&lt;INT0);<br />GICR |= (1&lt;&lt;INT1);<br />    MCUCR |= ISC00 |ISC10 |ISC11 |ISC01;<br /><br />sei();<br />while(1){<br />PORTA ^= SIGNAL2 |SIGNAL1;<br />_delay_ms(1000);<br />}<br />}<br />ISR(INT0_vect){<br />LED1_TOG;<br />}<br /><br />ISR(INT1_vect){<br />LED2_TOG;<br />}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20356">kris1975</a> — 28 sty 2020, o 20:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-08T07:47:13+01:00</updated>
<published>2019-10-08T07:47:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222401#p222401</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222401#p222401"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222401#p222401"><![CDATA[
QURCZE racja ale jestem zakręcony zrobiłem zwykłą literówe, muszę walnąć sobie RESETA  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 8 paź 2019, o 07:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2019-10-08T01:58:01+01:00</updated>
<published>2019-10-08T01:58:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222399#p222399</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222399#p222399"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222399#p222399"><![CDATA[
Przecież pisze jak byk, że znowu nie masz zainkludowanego pliku z &quot;_delay_loop1&quot;, bo funkcja nazywa się &quot;_delay_loop_1&quot; a nie jak wpisałeś &quot;_delay_loop1&quot; - brakuje ci podkreślenia.<br />Czasami warto zajrzeć do pliku i samodzielnie rozwiązać problem, to tylko 3 sekundy szukania <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=14685">Harry</a> — 8 paź 2019, o 01:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-07T21:33:13+01:00</updated>
<published>2019-10-07T21:33:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222398#p222398</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222398#p222398"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222398#p222398"><![CDATA[
Zrobiłem Jarek jak kazałeś i:<br />Qurcze nie wiem dlaczego wywala mi taki komunikat?   <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />[syntax=c]22:31:44 **** Incremental Build of configuration Release for project AAA!!!!!!!!!!Laskom_18MCLK ****<br />make all <br />'Building target: AAA!!!!!!!!!!Laskom_18MCLK.elf'<br />'Invoking: AVR C Linker'<br />avr-gcc -Wl,-Map,AAA!!!!!!!!!!Laskom_18MCLK.map -mmcu=atmega32 -o &quot;AAA!!!!!!!!!!Laskom_18MCLK.elf&quot;  ./PetitFS/mmc.o ./PetitFS/pff.o  ./MK_PETIT_UTIL/mk_petit_util.o  ./MK_PCF8583/mk_pcf8583.o  ./LCD/lcd44780.o  ./LASKO/lasko.o  ./I2C_TWI/i2c_twi.o  ./main.o   <br />./LASKO/lasko.o: In function `__vector_6':<br />lasko.c:(.text.__vector_6+0x28): undefined reference to `_delay_loop1'<br />collect2.exe: error: ld returned 1 exit status<br />make: *** &#91;AAA!!!!!!!!!!Laskom_18MCLK.elf&#93; Błąd 1<br /><br />22:31:45 Build Finished (took 330ms)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 7 paź 2019, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-07T20:49:54+01:00</updated>
<published>2019-10-07T20:49:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222397#p222397</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222397#p222397"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222397#p222397"><![CDATA[
Qurcze. Nie rozumiem tej pętli<br />A czemu nie tak na próbę?[syntax=c]ISR(TIMER1_CAPT_vect){<br />        PORTA |=(1&lt;&lt;PA1);<br />         _delay_loop1(100);                            //opóźnienie za pomocą _delay_loop1() lub wstawki asemblerowej<br />        PORTA &amp;= ~(1&lt;&lt;PA1);                                                                                             <br />     }[/syntax]<br />W przerwaniu ustawiasz 1 czekasz pętle ustawiasz 0 masz impuls.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 7 paź 2019, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-07T20:15:08+01:00</updated>
<published>2019-10-07T20:15:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222396#p222396</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222396#p222396"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222396#p222396"><![CDATA[
Wprowadziłem do przerwania funkcję     _delay_loop1()  ustawiłem na początek wartoś 100<br /><br />[syntax=c]ISR(TIMER1_CAPT_vect)    {<br /><br />      _delay_loop1(100);                            //opóźnienie za pomocą _delay_loop1() lub wstawki asemblerowej<br />    <br /> petla();                                                                                           <br />       <br />     }[/syntax]<br /><br />funkcja petla() ma tylko pokazać czy zadziałała zmiana na pinie i wygląda tak:<br /><br />[syntax=c]void petla()<br />                   {<br />                      <br />               PORTA ^=(1&lt;&lt;PA1);<br />                         PORTA ^=(1&lt;&lt;PA1);<br />                   }[/syntax]<br /><br />obserwuję opóżnienie na oscyloskopie i nie opóżnia nic <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />tzn. impuls widzę że się pojawia ale zmieniając wartość w funkcji   _delay_loop1(100) nie ma reakcji?<br />Przed pętlą mam takie ustawienia:<br />                [syntax=c]DDRD &amp;= ~(1&lt;&lt;PD6);// pin jako wejście<br />PORTD |= (1&lt;&lt;PD6) ;// podciągnięcie pinu do VCC   <br />        TCCR1B |= (1&lt;&lt;CS11);         // Timer1 / 8                                                                                              <br />       TCCR1B &amp;= ~(1&lt;&lt;ICES1);      // Zbocze opadające na ICP&#91;<br />                TIMSK |= (1&lt;&lt;TICIE1);        // Przerwanie od ICP[/syntax]<br /><br />Czy coś jeszcze mam ustawić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 7 paź 2019, o 20:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-07T06:27:32+01:00</updated>
<published>2019-10-07T06:27:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222387#p222387</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222387#p222387"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222387#p222387"><![CDATA[
Może spróbuj tak:<br />[syntax=c]#include &lt;util/delay_basic.h&gt;[/syntax]<br /><br />Przy takich komunikatach jak opisałeś, czasem warto się rozejrzeć po komputerze.<br />Poszukałem katalogu util no bo skoro delay.h jest w katalogu to i pewnie delay_basic.h też tam siedzi.<br />No i siedział. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />C:\Program Files\Atmel\AVR Tools\AVR Toolchain\avr\include\util<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 7 paź 2019, o 06:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2019-10-07T03:41:50+01:00</updated>
<published>2019-10-07T03:41:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222386#p222386</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222386#p222386"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222386#p222386"><![CDATA[
A w katalogu util?<br /><br />Wysłane ze srajfona<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 7 paź 2019, o 03:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-07T00:27:13+01:00</updated>
<published>2019-10-07T00:27:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222385#p222385</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222385#p222385"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222385#p222385"><![CDATA[
Wpisałem       [syntax=c]#include &lt;delay_basic.h&gt;[/syntax]   i nie przyjmuje  <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=18152">AKSELINEK</a> — 7 paź 2019, o 00:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-06T22:02:13+01:00</updated>
<published>2019-10-06T22:02:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222384#p222384</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222384#p222384"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222384#p222384"><![CDATA[
aby funkcje _delay_loop działały jest potrzebny inklud biblioteki delay_basic.h tak jak pisałem wcześniej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 6 paź 2019, o 22:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-06T20:44:30+01:00</updated>
<published>2019-10-06T20:44:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222383#p222383</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222383#p222383"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222383#p222383"><![CDATA[
Bardzo dziękuję za zainteresowanie tematem. Chciałbym wspomnieć że nie upieram się na ustawianie zmiennej  flaga_clk taka była jedynie moja myśl ale mogę również zmienić stan pinu mikrokontrolera.<br />Wprowadziłem w tym celu funkcję petla();<br />[syntax=c]void petla()<br />                   {<br />                     <br /><br />                                                            PORTC ^=(1&lt;&lt;PC0);<br />                                            PORTC ^=(1&lt;&lt;PC0);<br />                                           <br /><br />                  }[/syntax]<br />Tworze pomału obsługę przerwania i mam taki zapis:<br /><br />[syntax=c]ISR(TIMER1_CAPT_vect)    {<br /><br /><br />      uint8_t flaga_clk;<br />  flaga_clk=0;<br />  _delay_loop1(100);                            //opóźnienie za pomocą _delay_loop1() lub wstawki asemblerowej<br />   petla();<br /><br />   <br />   flaga_clk=1;<br />    }[/syntax]<br />Kurcze wywala mi taki komunikat <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />[syntax=c]21:40:03 **** Incremental Build of configuration Release for project AAA!!!!!!!!!!Laskom_18MCLK ****<br />make all <br />'Building target: AAA!!!!!!!!!!Laskom_18MCLK.elf'<br />'Invoking: AVR C Linker'<br />avr-gcc -Wl,-Map,AAA!!!!!!!!!!Laskom_18MCLK.map -mmcu=atmega32 -o &quot;AAA!!!!!!!!!!Laskom_18MCLK.elf&quot;  ./PetitFS/mmc.o ./PetitFS/pff.o  ./MK_PETIT_UTIL/mk_petit_util.o  ./MK_PCF8583/mk_pcf8583.o  ./LCD/lcd44780.o  ./LASKO/lasko.o  ./I2C_TWI/i2c_twi.o  ./main.o   <br />./LASKO/lasko.o: In function `__vector_6':<br />lasko.c:(.text.__vector_6+0x26): undefined reference to `_delay_loop1'<br />collect2.exe: error: ld returned 1 exit status<br />make: *** &#91;AAA!!!!!!!!!!Laskom_18MCLK.elf&#93; Błąd 1<br /><br />21:40:03 Build Finished (took 333ms)[/syntax]<br /><br />a zwykły _delay wchodzi?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 6 paź 2019, o 20:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-06T19:39:44+01:00</updated>
<published>2019-10-06T19:39:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222382#p222382</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222382#p222382"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222382#p222382"><![CDATA[
<div class="quotetitle">JarekB napisał(a):</div><div class="quotecontent"><br />Tak sobie popatrzyłem na dokumentacje ATMEGA32 i tam na nodze PB2 jest sygnał INT2 .<br /></div> Kolega to ma sokoli wzrok, też patrzyłem w notę i tego nie zauważyłem  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 6 paź 2019, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-06T19:29:24+01:00</updated>
<published>2019-10-06T19:29:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222381#p222381</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222381#p222381"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222381#p222381"><![CDATA[
<div class="quotetitle">AKSELINEK napisał(a):</div><div class="quotecontent"><br />Problem tylko jest taki że przerwanie INT0 i INT1 mam już zajęte a działam na procesorze ATMEGA 32.<br />Proszę o jakieś podpowiedzi.<br /></div><br />Tak sobie popatrzyłem na dokumentacje ATMEGA32 i tam na nodze PB2 jest sygnał INT2 .<br />Może to uprości sprawę?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 6 paź 2019, o 19:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-06T16:28:26+01:00</updated>
<published>2019-10-06T16:28:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222379#p222379</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222379#p222379"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222379#p222379"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />mikrokontroler nie będzie miał możliwości w jakikolwiek sposób zareagować na zmianę stanu zmiennej<br /></div>Słuszna uwaga. trochę nie przemyślałem tego drugiego pomysłu - miałby sens gdyby było sterowanie pinem a nie ustawianie flagi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 6 paź 2019, o 16:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-10-06T14:53:28+01:00</updated>
<published>2019-10-06T14:53:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222378#p222378</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222378#p222378"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222378#p222378"><![CDATA[
Pozwolę sobie zwrócić uwagę na pewne kwestie.<br /><br />Pomysł kolegi <strong>xentis</strong> na wykorzystanie pinu ICP jako substytutu pinu INT jest jak najbardziej słuszny. Niezależnie jednak od tego, który pin będzie wykorzystany, należy pamiętać o zwłoce pomiędzy zboczem narastającym na pinie, a momentem zmiany wartości zmiennej. Gdybyś korzystał tylko z tego jednego przerwania, ten czas byłby po pierwsze bardziej powtarzalny, po drugie zapewne pomijalny. Jako że jednak planujesz korzystać z innych przerwań, a zbocze na pinie może pojawić się np. w trakcie obsługi innego przerwania, czas reakcji może się zmieniać i być dość długi, w zależności od tego, ile będzie trwała obsługa innych przerwań. Jeśli to nie jest problemem, to OK.<br /><br />Jeśli reakcją na zbocze ma być zmiana wartości zmiennej, a nie np. stanu na jakimś innym pinie, to niestety rozwiązanie z opóźnieniem typu &quot;time-wasting&quot; (delay) w przerwaniu raczej nie zda egzaminu, i to nie ze względu na czas. Taka zmiana wartości zmiennej przecież nie miałaby sensu, gdyby program w jakiś sposób na ten fakt nie zareagował. W takim przypadku:<br /><div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />[syntax=c]ISR(TIMER1_CAPT_vect){<br />   flaga_clk=0;<br />//opóźnienie za pomocą _delay_loop1() lub wstawki asemblerowej<br />   flaga_clk=1;<br />}[/syntax]<br /></div>mikrokontroler nie będzie miał możliwości w jakikolwiek sposób zareagować na zmianę stanu zmiennej, chyba że zastosujemy zagnieżdżanie przerwań (czego raczej bym nie polecał początkującemu, tym bardziej w przypadku korzystania z <em>delay</em>). Ewentualnie reakcję na zmianę wartości zmiennej trzeba by też umieścić w procedurze obsługi przerwania, ale wtedy zastosowanie zmiennej <em>flaga_clk</em> raczej nie miałaby większego sensu.<br /><br />Poniższy sposób jest może nieco bardziej skomplikowany, ale (imho) to zdecydowanie lepsze rozwiązanie, jeśli mikrokontroler ma mieć szansę &quot;zauważyć&quot; zmianę wartości zmiennej <em>flaga_clk</em>:<br /><div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />Możesz w obsłudze przerwania od ICP zmienić stan zmiennej oraz aktywować inny (bądź ten sam timer) na przerwanie od porównania, i jego porównanie ustawić na czas dokładnie taki jak potrzebujesz długość impulsu czyli te 11,92us, w przerwaniu od porównania z kolei zmienną wyzerować, wyzerować też i zatrzymać timer w przygotowaniu na wygenerowanie następnego impulsu<br /></div><br /><br />Ogólnie nie bardzo rozumiem całą koncepcję. 11,92us to dość krótki czas. Nawet przy zegarze 16MHz to tylko 190 taktów zegara. Aby zmiana wartości zmiennej nie pozostała niezauważona, musiałbyś zmienną <em>flaga_clk</em> testować co najmniej raz na 190 taktów, co może być trudne do osiągnięcia, szczególnie biorąc pod uwagę, że oprócz pętli głównej programu będziesz tam miał też obsługę innych przerwań. Flag używa się raczej w ten sposób, że w reakcji na zdarzenie (czyli np. na zbocze na jakimś pinie) taką flagę się ustawia, a zeruje dopiero po obsłużeniu takiej flagi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 6 paź 2019, o 14:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-05T20:56:08+01:00</updated>
<published>2019-10-05T20:56:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222377#p222377</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222377#p222377"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222377#p222377"><![CDATA[
Bardzo Ci dziękuję trochę mi rozjaśniłeś dzięki. W tygodniu wgram do procka i opowiem o wynikach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 5 paź 2019, o 20:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-05T20:23:29+01:00</updated>
<published>2019-10-05T20:23:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222376#p222376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222376#p222376"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222376#p222376"><![CDATA[
Przed pętlą główną musisz jeszcze wstępnie skonfigurować timer1 czyli ustawić go do pracy w porównanie, policzyć i ustawić wartość dla porównania, włączyć przerwanie od porównanie i wreszcie włączyć globalne przerwania.<br /><br />_delay_loop1() jak również _delay_loop2() to dwie funkcje opóźniające z wbudowanej biblioteki delay_basic.h i są to ubrane w funkcje wstawki asemblerowe. Do pierwszej funkcji podaje się wartości od 0 - 255, do drugiej 0 - 65535. Opóźnienie jest zależne od F_CPU, i wynosi dla pierwszej funkcji (value+1)*3 takty zegara, gdzie value to wartość jaką przekazujemy do funkcji zgodnie z powyższymi zakresami. Wartość 0 to opóźnienie 3 taktów zegara. Dla drugiej krok opóźnienia wynosi 4 takty zegara zapewne ze względu na dwubajtowy argument funkcji.<br />W bluebooku Mirek użył tych funkcji np w soft_I2C.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 5 paź 2019, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-05T19:51:46+01:00</updated>
<published>2019-10-05T19:51:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222375#p222375</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222375#p222375"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222375#p222375"><![CDATA[
Bardzo Ci dziękuję za podpowiedz , ale czy przed pętlą główną muszę  oczywiście jeszcze ustawić <br /><br />                [syntax=c]DDRD &amp;= ~(1&lt;&lt;PD6);// pin jako wejście<br />PORTD |= (1&lt;&lt;PD6) ;// podciągnięcie pinu do VCC[/syntax]<br /><br />wyjaśnij mi jeszcze ten drugi sposób   _delay_loop1()  -  co to dokładnie znaczy ? w nawiasie wpisać jakąś cyfrę ? czy tak rozumem że to jest sposób na bardzo krótkie opóżnienie czy tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 5 paź 2019, o 19:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-05T19:05:45+01:00</updated>
<published>2019-10-05T19:05:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222374#p222374</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222374#p222374"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222374#p222374"><![CDATA[
Skoro oba inty masz już zajęte to wspomniany mechanizm jest chyba jedynym dodatkowym źródłem umożliwiającym wywołanie przerwania w reakcji na zmianę stanu pinu dla tego procka. Możesz w obsłudze przerwania od ICP zmienić stan zmiennej oraz aktywować inny (bądź ten sam timer) na przerwanie od porównania, i jego porównanie ustawić na czas dokładnie taki jak potrzebujesz długość impulsu czyli te 11,92us, w przerwaniu od porównania z kolei zmienną wyzerować, wyzerować też i zatrzymać timer w przygotowaniu na wygenerowanie następnego impulsu.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />[syntax=c]ISR(TIMER1_CAPT_vect){<br />   flaga_clk=0;<br />   TCCR0 |= (1&lt;&lt;CS??); // tu ustawienie preskalera wynikające z obliczeń dla 11,92us dla rozpoczęcia odliczania.<br />}<br /><br />ISR(TIMER0_COMP_vect){// przerwanie wywołane po odliczeniu czasu trwania impulsu<br />   flaga_clk=1;<br />   TCCR0 &amp;= (1&lt;&lt;CS00)|(1&lt;&lt;CS01)|(1&lt;&lt;CS02);//tu zatrzymanie timera<br />   TCNT0 = 0;//tu wyzerowanie timera =&gt; timer gotowy na następne generowanie impulsu<br />}[/syntax]<br /><br />Wszystko powyższe pod warunkiem że uC jest pędzone odpowiednio szybkim zegarem by wyrobił w procedurach przerwania bo ~12us to dosyć krótki czas...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 40 minutach ]</span></strong><br /><br />możesz też na żywca zrobić opóźnienie w przerwaniu od ICP, ~12us to krótki czas więc zapewne pozostałym procesom nie zaszkodzi.<br />Do opóźnienia będzie trzeba użyć albo _delay_loop albo wstawki asemblerowej i policzyć właściwe opóźnienie względem F_CPU.<br /><br />[syntax=c]ISR(TIMER1_CAPT_vect){<br />   flaga_clk=0;<br />//opóźnienie za pomocą _delay_loop1() lub wstawki asemblerowej<br />   flaga_clk=1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 5 paź 2019, o 19:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-05T19:09:39+01:00</updated>
<published>2019-10-05T18:59:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222373#p222373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222373#p222373"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222373#p222373"><![CDATA[
Stosowałem takie przerwanie ale do określania czasu impulsów  ISR(TIMER1_CAPT_vect), a podałbyś jaki przykład którym mógłbym się za wzorować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 5 paź 2019, o 18:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-05T18:55:55+01:00</updated>
<published>2019-10-05T18:55:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222372#p222372</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222372#p222372"/>
<title type="html"><![CDATA[Re: Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222372#p222372"><![CDATA[
Jest jeszcze taki jeden mechanizm w procku który można wykorzystać do wygenerowania zewnętrznego przerwania. Zainteresuj się timerem1, pinem ICP1 i modułem Input Capture Unit tego timera. Co prawda mechanizm ten służy do innego celu ale kto zabroni użyć go do wywołania przerwania od zmiany stanu pinu...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 5 paź 2019, o 18:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AKSELINEK]]></name></author>
<updated>2019-10-05T18:31:32+01:00</updated>
<published>2019-10-05T18:31:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222371#p222371</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222371#p222371"/>
<title type="html"><![CDATA[Jak wygenerować krótki impuls]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22603&amp;p=222371#p222371"><![CDATA[
Witam bardzo proszę o podpowiedz w temacie w jaki sposób mogę wygenerować zmianę (np wartości zmiennej) w odpowiedzi na na opadające zbocze impulsu z 1 na 0 na określony czas,<br />konkretnie 11,92 us .<br />Dla zobrazowania o co mi dokładniej chodzi - działanie podobne do przerzutnika monostabilnego .<br />Czyli tak zmienna np. flaga_clk=1 przychodzi zmiana stanu i  flaga_clk=0 na czas 11,92 us.<br />Problem tylko jest taki że przerwanie INT0 i INT1 mam już zajęte a działam na procesorze ATMEGA 32.<br />Proszę o jakieś podpowiedzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18152">AKSELINEK</a> — 5 paź 2019, o 18:31</p><hr />
]]></content>
</entry>
</feed>