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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-06T20:22:09+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9553&amp;mode</id>
<entry>
<author><name><![CDATA[MikieMan]]></name></author>
<updated>2014-12-06T20:22:09+01:00</updated>
<published>2014-12-06T20:22:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107624#p107624</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107624#p107624"/>
<title type="html"><![CDATA[Re: Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107624#p107624"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Prawidłowo:<br />PORTB &amp;= ~(1 &lt;&lt; PB1);<br /></div><br />Bardzo ważna uwaga. Dziękuję koledze za czujność. Poprawiłem kod w swoim poście powyżej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3503">MikieMan</a> — 6 gru 2014, o 20:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-12-05T20:13:34+01:00</updated>
<published>2014-12-05T20:13:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107534#p107534</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107534#p107534"/>
<title type="html"><![CDATA[Re: Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107534#p107534"><![CDATA[
<div class="quotetitle">fourfeeter napisał(a):</div><div class="quotecontent"><br />[syntax=c]PORTB&amp;=(0&lt;&lt;PB1); //wstawiam na pin PB1  0   -włączam diodę[/syntax]<br /></div><br />Jeszcze jedna uwaga do tej linii, bo ona wyzeruje cały port. 0 czyli 0b00000000 przesunięte w lewo o PB1 (które ma wartość 1) daje 0b00000000 i po iloczynie logicznym (czyli po kolei każdy bit) da w efekcie 0b0000000. Musisz na to uważać, bo można przypadkiem odpalić rakietę przy okazji zapalenia kontrolki.<br />Prawidłowo:<br />[syntax=c]PORTB &amp;= ~(1 &lt;&lt; PB1);[/syntax]<br />Jak PORTB = 0b10101010 to otrzymasz:<br />0b10101010 &amp; ~(0b0000000<span style="color: #0000FF"><strong>1</strong></span> &lt;&lt; 1) = 0b10101010 &amp; ~(0b000000<span style="color: #0000FF"><strong>1</strong></span>0) = 0b10101010 &amp; 0b111111<span style="color: #0000FF"><strong>0</strong></span>1 = 0b101010<span style="color: #0000FF"><strong>0</strong></span>0<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 5 gru 2014, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fourfeeter]]></name></author>
<updated>2014-12-05T19:44:30+01:00</updated>
<published>2014-12-05T19:44:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107531#p107531</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107531#p107531"/>
<title type="html"><![CDATA[Re: Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107531#p107531"><![CDATA[
Dzięki. Już potrafię też tak ładnie wklejać kod jak wy.  <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=7078">fourfeeter</a> — 5 gru 2014, o 19:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MikieMan]]></name></author>
<updated>2014-12-06T20:19:05+01:00</updated>
<published>2014-12-05T19:40:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107530#p107530</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107530#p107530"/>
<title type="html"><![CDATA[Re: Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107530#p107530"><![CDATA[
Witamy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Widzę, że kolega nowy, więc ja się pokuszę o wklejenie prawidłowego kodu dla Kolegi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Poprawki zgodnie oczywiście z uwagami kolegi Krauser, który był szybszy  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />int main(void)<br />{<br />DDRB  |=  (1&lt;&lt;PB1); // ustawiam PIN jako wyjciowy<br />PORTB &amp;= ~(0&lt;&lt;PB1); // wstawiam na pin PB1 0 -włączam diodę<br /><br />sei(); // włączenie globalnego zezwolania na przerwania<br />TCNT0  = 0xff;<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); // ustawiam preskaler na 1024<br />TIMSK |= (1&lt;&lt;TOIE0); // włączenie przerwania od przepełnienia licznika<br /><br />while(1)<br />{<br /><br />}<br />}<br /><br /><br />//*************************************************************<br />// Obsługa przerwań<br />ISR(TIMER0_OVF_vect)<br />{<br />static uint16_t licznik = 0; // tworzę zmienna licznik<br />licznik ++; // w każdym przerwaniu dodoaje do licznika 1<br /><br />if(licznik &gt;= 32) // jeżeli licznik osiagnie 30 to następuje zmianana stanu na pinie PB1<br />{// wzór -&gt; 8 MHz/1024/256 = 30 Hz<br />PORTB ^= (1&lt;&lt;PB1); // zmienia pinu PB1 na przeciwny<br />licznik = 0; // zerowanie licznika<br />}<br />}[/syntax]<br />To jak Kolega początkujący, zresztą tak jak ja, to zachęcę do ładnego formatowania listingów, zdecydowanie lepiej się je czyta.<br />Przy okazji zobacz jak wygląda wstawiony kod poprzez opcję Syntax -&gt; C.<br />Przyznasz, że wygodniej się czyta?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3503">MikieMan</a> — 5 gru 2014, o 19:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fourfeeter]]></name></author>
<updated>2014-12-05T19:38:59+01:00</updated>
<published>2014-12-05T19:38:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107529#p107529</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107529#p107529"/>
<title type="html"><![CDATA[Re: Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107529#p107529"><![CDATA[
Dzięki, za odpowiedź. Jasne, że problem tkwił w braku pętli while(1) {}. Ale tak początkujący mają, że nie pamiętają o rzeczach oczywistych.<br /><br />PS<br />Gdy wklejam za pomocą znaczników syntax ucina mi fragmenty kodu<br />np.<br />&quot;DDRB|=(1&lt; &quot;         a powinno być           &quot;DDRB|=(1&lt;&lt;PB1);&quot;<br />Da się to jakoś naprawić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7078">fourfeeter</a> — 5 gru 2014, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-12-05T19:19:13+01:00</updated>
<published>2014-12-05T19:19:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107525#p107525</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107525#p107525"/>
<title type="html"><![CDATA[Re: Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107525#p107525"><![CDATA[
Weź jeszcze pod uwagę, że przerwanie wystąpi dopiero, gdy licznik timera0 się przekręci, czyli po zliczeniu 256 impulsów taktujących timer. Wzór na częstotliwość przerwań jest zatem następujący 8 MHz/1024/256 = 30 Hz.<br />W kodzie programu dodaj na końcu funkcji main pętlę while(1){}<br /><br />PS.<br />Kody wkleja się przy pomocy SYNTAX wybierz -&gt; C<br />Post możesz edytować klikając edytuj<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 5 gru 2014, o 19:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fourfeeter]]></name></author>
<updated>2014-12-05T19:42:06+01:00</updated>
<published>2014-12-05T18:58:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107524#p107524</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107524#p107524"/>
<title type="html"><![CDATA[Przerwania Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9553&amp;p=107524#p107524"><![CDATA[
Cześć. Próbuję ogarnąć w jaki sposób działają przerwania.  Podłączyłem sobie pod PIN PB1 diodę. I teraz chcę zrobić żeby ona migała. Sposób podłączenia jest oczywiście OK, bo dioda świeci gdy zaprogramuje mikrokontroler, żeby świeciła cały czas. Problem jest natury programistycznej. <br /><br />Opisze krótko co zrobiłem. <br />1.Działam na Atmedze8. Częstotliwość taktowania to 8MHz     <br />2. Wybrałem sobie preskaler 1024. Czyli 8Mhz/1024=7812<br />Obsługa przerwań;<br />3. tworze zmienna licznik <br />4. w każdym przerwaniu ta zmienna ma zwiększać się o 1<br />5.  jeżeli licznik osiągnie 7812 ( czyli po upływie 1 sekundy) ma nastąpić zmiana na pinie PB1 oraz wyzerowanie licznika.<br /><br />Poniżej wklejam mój kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br /><br /><br /><br />int main(void)<br />{<br /><br />DDRB|=(1&lt;&lt;PB1);  // ustawiam PIN jako wyjciowy<br /><br />PORTB&amp;=(0&lt;&lt;PB1); //wstawiam na pin PB1  0   -włączam diodę<br /><br />sei(); // włączenie globalnego zezwolania na przerwania<br /><br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); // ustawiam preskaler na 1024<br />TIMSK |=(1&lt;&lt;TOIE0); // włączenie przerwania od przepełnienia licznika<br /><br /><br />}<br /><br />//*************************************************************<br />// Obsługa przerwań<br />ISR(TIMER0_OVF_vect)<br />{<br />static uint16_t licznik=0; // tworzę zmienna licznik<br />licznik ++;  // w każdym przerwaniu dodoaje do licznika 1<br /><br />if(licznik&gt;=7812) // jeżeli licznik osiagnie  7812 to następuje zmianana stanu na pinie PB1<br />{<br />PORTB^=(1&lt;&lt;PB1); // zmienia pinu PB1 na przeciwny<br />licznik=0; //zerowanie licznika<br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7078">fourfeeter</a> — 5 gru 2014, o 18:58</p><hr />
]]></content>
</entry>
</feed>