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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-10-01T17:13:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16353&amp;mode</id>
<entry>
<author><name><![CDATA[Mellanogaster]]></name></author>
<updated>2016-10-01T17:13:33+01:00</updated>
<published>2016-10-01T17:13:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170128#p170128</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170128#p170128"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170128#p170128"><![CDATA[
Dokładnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />I ja na tym zęby zjadłem! Ale jak Mirek powtarza teraz i ja piszę: Przerwanie - klik - volatile!!!!!!!!!!!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2911">Mellanogaster</a> — 1 paź 2016, o 17:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-10-01T14:41:05+01:00</updated>
<published>2016-10-01T14:41:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170112#p170112</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170112#p170112"/>
<title type="html"><![CDATA[Re: Problem z przerwaniem?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170112#p170112"><![CDATA[
Przede wszystkim to zmienną [syntax=c]uint8_t cnt_var;[/syntax] musisz zadeklarować z użyciem specyfikatora volatile:<br />[syntax=c]volatile uint8_t cnt_var;[/syntax]<br />Poczytaj:<br /><a href="http://mirekk36.blogspot.co.uk/2011/08/test.html"  class="postlink">http://mirekk36.blogspot.co.uk/2011/08/test.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 1 paź 2016, o 14:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KBCH]]></name></author>
<updated>2016-10-01T14:22:52+01:00</updated>
<published>2016-10-01T14:22:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170111#p170111</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170111#p170111"/>
<title type="html"><![CDATA[Problem z przerwaniem?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16353&amp;p=170111#p170111"><![CDATA[
Napisałem sobie krótki kod na atmegę328 żeby przetestować działanie przerwania.<br />[syntax=c]#ifndef ADC_H_<br />#define ADC_H_<br /><br />#define LED_pin (1&lt;&lt;PC1)<br />#define LED_TOG PORTC ^= LED_pin;<br /><br /><br />void timer_init( void );<br /><br />#endif /* ADC_H_ */[/syntax]<br />[syntax=c]#include &lt;avr/interrupt.h&gt;<br />#include &quot;adc.h&quot;<br /><br />void timer_init ( void )<br />{<br />TCCR0A = (1&lt;&lt;WGM01);// CTC mode<br />TCCR0B |= (1&lt;&lt;CS01)|(1&lt;&lt;CS00);// prescaler 64<br />OCR0A = (uint8_t)(F_CPU / 64 / 1000 );// 1ms interrupt<br />TIMSK0 |= (1&lt;&lt;OCIE0A);<br />}[/syntax]<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 />#include &quot;adc.h&quot;<br /><br />uint8_t cnt_var;<br /><br /><br />int main( void )<br />{<br />DDRC |= LED_pin;// LED_pin ad output<br /><br />timer_init();// timer initialization<br /><br />sei();<br /><br /><br />while(1)<br />{<br /><br />}<br /><br />}<br /><br />ISR(TIMER0_COMPA_vect)<br />{<br /><br />cnt_var++;<br />    if(cnt_var == 100)<br />    {<br />    LED_TOG;<br />    cnt_var = 0;<br />    }<br />}[/syntax]<br /><br />Program działa poprawnie, natomiast gdy przerzucam warunek do pętli głównej programu muszę dodać jakieś oczekiwanie lub jakąś instrukcję aby dioda zaczęła migać.<br />[syntax=c]int main( void )<br />{<br />DDRC |= LED_pin;// LED_pin ad output<br /><br />timer_init();// timer initialization<br /><br />sei();<br /><br /><br />while(1)<br />{<br />_delay_us(1);<br />    if(cnt_var == 100)<br />    {<br />    LED_TOG;<br />    cnt_var = 0;<br />    }<br />}<br /><br />}<br /><br />ISR(TIMER0_COMPA_vect)<br />{<br />cnt_var++;<br />}[/syntax]<br /><br />Dlaczego występuje taka konieczność? To samo dotyczy się flag wystawianych w przerwaniu. Dodam, że pracuję atmega pracuje na zewnętrznym generatorze 16MHz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=781">KBCH</a> — 1 paź 2016, o 14:22</p><hr />
]]></content>
</entry>
</feed>