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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-24T22:16:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=31&amp;t=13129&amp;mode</id>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2015-10-24T22:16:12+01:00</updated>
<published>2015-10-24T22:16:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=143294#p143294</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=143294#p143294"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=143294#p143294"><![CDATA[
tak mnie to zaciekawiło, że postanowiłem sam sprawdzić ... i faktycznie jest problem..:<br />zwykły program. Przerwanie co 2ms. timer_cnt odlicza od 500 i zapala ponownie diodę na 20 zliczeń :<br />[syntax=c]if(!timer_cnt){<br />//coś tam robi - generalnie zapala diodę na 40ms i gasi na 1000ms<br />        }<br />ISR(TIM0_COMPA_vect){<br />uint16_t n;<br />n = timer_cnt;<br />if(n) timer_cnt = --n;<br /><br />}[/syntax]<br />i efekt taki:<br /><a href="https://obrazkiforum.atnel.pl/360/c30d994bf32eff46b158cf15d272ee59.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/360/c30d994bf32eff46b158cf15d272ee59.jpg" alt="Obrazek" /></a><br /><br />co jakiś czas udaje mu się te 500 zliczeń, ale w większości przypadków gubi 255...<br /><br />po dodaniu dodatkowej zmiennej w ATOMIC_BLOCK:<br />[syntax=c]ATOMIC_BLOCK(ATOMIC_FORCEON){<br />timer_cnt_copy=timer_cnt;<br />}<br />                <br />if(!timer_cnt_copy){<br />                       //coś tam robi - generalnie zapala diodę na 40ms i gasi na 1000ms<br />}<br /><br />ISR(TIM0_COMPA_vect){<br />uint16_t n;<br />n = timer_cnt;<br />if(n) timer_cnt = --n;<br /><br />}[/syntax]<br />efekt oczekiwany:<br /><a href="https://obrazkiforum.atnel.pl/360/9fb6bf4e766225df691659ea4f0f3113.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/360/9fb6bf4e766225df691659ea4f0f3113.jpg" alt="Obrazek" /></a><br /><br />pół biedy jak ten licznik ma liczyć do np.45000 - tu stracone 255 to prawie nic, ale w tym przypadku traciłem połowę czasu...<br /><br />Ale doznałem oświecenia tym wątkiem... SZOK<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 24 paź 2015, o 22:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2015-10-06T06:35:25+01:00</updated>
<published>2015-10-06T06:35:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141602#p141602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141602#p141602"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141602#p141602"><![CDATA[
Potwierdzam - to ten przypadek. Całe życie człowiek się uczy... Napisałem ochnaście programów na różne ATMegi i dopiero teraz wdepnąłem na minę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 6 paź 2015, o 06:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2015-10-05T22:47:39+01:00</updated>
<published>2015-10-05T22:47:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141593#p141593</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141593#p141593"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141593#p141593"><![CDATA[
O w mordę zwierza! Właśnie mi uświadomiliście w jakiej ja nieświadomości żyłem. O.o<br />wychodzi na to, że im mniej kodu w pętli głównej tym większa szansa na wystąpienie tego problemu. <br />Szok.<br />dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 5 paź 2015, o 22:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-10-05T22:07:40+01:00</updated>
<published>2015-10-05T22:07:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141588#p141588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141588#p141588"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141588#p141588"><![CDATA[
<div class="quotetitle">aaadamw napisał(a):</div><div class="quotecontent"><br />Panowie, <br />czy wy tu nie przesadzacie ze szkodliwością tej zmiennej 16bitowej?<br />przecież (tak mi się wydaje) przy tym programie to może ona nawet być i 32bit i nie powinna szkodzić.<br /></div><br /><br />Przeczytaj ten watek a dowiesz się o co chodziło kolegom wyżej <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/viewtopic.php?t=8147&amp;p=91811" >viewtopic.php?t=8147&amp;p=91811</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 5 paź 2015, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2015-10-05T21:41:00+01:00</updated>
<published>2015-10-05T21:41:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141585#p141585</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141585#p141585"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141585#p141585"><![CDATA[
Panowie, <br />czy wy tu nie przesadzacie ze szkodliwością tej zmiennej 16bitowej?<br />przecież (tak mi się wydaje) przy tym programie to może ona nawet być i 32bit i nie powinna szkodzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 5 paź 2015, o 21:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-10-05T18:36:32+01:00</updated>
<published>2015-10-05T18:36:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141558#p141558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141558#p141558"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141558#p141558"><![CDATA[
albo spróbuj to nieco zatomizować <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jeśli już upierasz się np na siłę na timer 16-bitowy<br /><br />[syntax=c]if (!Timer_1s) {<br />                        uint8_t sreg = SREG;<br />                        cli();<br />                        Timer_1s = 400;<br />                        SREG = sreg;<br />                        PORTC ^= (1&lt;&lt;PC0);<br />                }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 paź 2015, o 18:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-10-05T17:24:45+01:00</updated>
<published>2015-10-05T17:24:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141546#p141546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141546#p141546"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141546#p141546"><![CDATA[
<div class="quotetitle">tmichal24 napisał(a):</div><div class="quotecontent"><br />Jak się dawno nie bawiłeś to mogło wylecieć z głowy że Timer0 jest 8 bitowy, a ty tam ładujesz zmienna 16 bitową i przez to to przekłamanie.<br />Zmienną Timer_1s zmień sobie na uint8_t i załaduj tam wartość od 0 do 255 i wszystko będzie grało.<br /></div><br />Nie ma to związku, ale użycie zmiennej 8-bitowej powinno zlikwidować problem. Rzecz w tym, że procesor jest 8-bitowy i operacje na zmiennej 16-bitowej nie są wykonywane w jednym cyklu zegara (atomowo).<br />Przeczytaj to:<br /><!-- m --><a class="postlink" href="http://nongnu.org/avr-libc/user-manual/group__util__atomic.html" >http://nongnu.org/avr-libc/user-manual/ ... tomic.html</a><!-- m --><br /><div class="quotetitle">szopler napisał(a):</div><div class="quotecontent"><br />jakby się procek po 2 mignięciu resetował<br /></div><br />To możesz sprawdzić umieszczając na starcie mignięcie innej diody.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 5 paź 2015, o 17:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tmichal24]]></name></author>
<updated>2015-10-05T16:45:36+01:00</updated>
<published>2015-10-05T16:45:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141535#p141535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141535#p141535"/>
<title type="html"><![CDATA[Re: Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141535#p141535"><![CDATA[
Jak się dawno nie bawiłeś to mogło wylecieć z głowy że Timer0 jest 8 bitowy, a ty tam ładujesz zmienna 16 bitową i przez to to przekłamanie.<br />Zmienną Timer_1s zmień sobie na uint8_t i załaduj tam wartość od 0 do 255 i wszystko będzie grało.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1651">tmichal24</a> — 5 paź 2015, o 16:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2015-10-05T16:07:57+01:00</updated>
<published>2015-10-05T16:07:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141532#p141532</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141532#p141532"/>
<title type="html"><![CDATA[Dziwna przypadłość M328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13129&amp;p=141532#p141532"><![CDATA[
Sam się skazuję na banicję i umieszczam wątek w lochu bo dawno już nic nie klepałem pod AVR i jak akurat zaistniała potrzeba to zaczęło się od dziwnego problemu.<br />Otóż mam ATMEGA328P-AU i jak zwykle na początek, żeby sprawdzić czy procek się programuje jak należy napisałem sobie sofcik do migania diodą.<br />Przy &quot;okropnych delayach&quot; wszystko jest OK tzn. dioda miga sobie równo. Niestety przy użyciu Timer0 w trybie CTC jest jakiś babol. Dioda mignie ze 2 razy w tempie poprawnym potem znów szybciej i tak na zmianę (jakby się procek po 2 mignięciu resetował) i tak w koło Macieju. Problem występuje zarówno na RC jak i zewnętrznym kwarcu 3.6864 MHz.<br />Wklejam kod dla sprawdzenia, bo może dopadła mnie ślepota...<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />//#include &lt;avr/delay.h&gt;<br /><br />volatile uint16_tTimer_1s = 400;<br /><br />/* Macro definitions */<br />#define sbi(byte,bit) byte |=  (1&lt;&lt;bit)<br />#define cbi(byte,bit) byte &amp;= ~(1&lt;&lt;bit)<br />#define bit(byte,n) (byte&gt;&gt;n)&amp;1<br /><br /><br />void _InitController(void) {<br />TCCR0A |= (1&lt;&lt;WGM01);// Timer0 CTC Mode<br />TCCR0B |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00);// fclk /64 =<br />TIMSK0 |= (1&lt;&lt;OCIE0A); // Compare Interrupt Enable<br />OCR0A = 143;// CTC every 1ms<br /><br />sbi(DDRC,PC0);// Led jako wyjście<br />}<br /><br /><br />ISR(TIMER0_COMPA_vect) {<br />uint16_t T;<br /><br />T = Timer_1s;<br />    if (T) Timer_1s = --T;<br />}<br /><br />int main(void) {<br /><br />_InitController();<br /><br />sei();<br /><br />while(1) {<br /><br />if (!Timer_1s) {<br />Timer_1s = 400;<br />PORTC ^= (1&lt;&lt;PC0);<br />}<br /><br />//PORTC |= (1&lt;&lt;PC0);<br />//_delay_ms(1000);<br />//PORTC &amp;= !(1&lt;&lt;PC0);<br />//_delay_ms(1000);<br /><br />}<br />return 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 5 paź 2015, o 16:07</p><hr />
]]></content>
</entry>
</feed>