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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-02-21T21:14:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14606&amp;mode</id>
<entry>
<author><name><![CDATA[piotrekr]]></name></author>
<updated>2016-02-21T21:14:02+01:00</updated>
<published>2016-02-21T21:14:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154362#p154362</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154362#p154362"/>
<title type="html"><![CDATA[Re: Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154362#p154362"><![CDATA[
Dziękuję za odpowiedź. Niestety nawet przy zmniejszeniu czestotliwości 10x (OCR1A = 430) i zastosowaniu kodu który Pan zaproponował efekt jest nadal bez zmian. (tz wszystko wykonuje sie 10x wolniej ale nadal nie regularnie.)<br /><br />Dopiero zastosowanie kodu zaproponowanego przez kolegę &quot;kicajek&quot; jest OK.<br /><br />Najlepsze jest to że na innym procesorze (atmega 1284) Wszystko dziala bez stosowania technologii atomowej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />. Nie wiem w czym leży przyczyna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3545">piotrekr</a> — 21 lut 2016, o 21:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-21T21:06:18+01:00</updated>
<published>2016-02-21T21:06:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154355#p154355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154355#p154355"/>
<title type="html"><![CDATA[Re: Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154355#p154355"><![CDATA[
kicajek dobrze - no bo warto jeszcze warunki IF() sprawdzać jak już przy 16-bitowych wartościach ....<br /><br />oczywiście jak mówię można do tego podejść jeszcze na wiele innych sposobów ale ....<br /><br />gdy się korzysta z rozdzielczości 10 ms to wtedy nawet tak prozaiczne sposoby odpadają bo zwykle wystarczają wartości 8-bitowe na takie timery <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=54">mirekk36</a> — 21 lut 2016, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-02-21T21:02:14+01:00</updated>
<published>2016-02-21T21:02:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154352#p154352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154352#p154352"/>
<title type="html"><![CDATA[Re: Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154352#p154352"><![CDATA[
Witam<br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />...jak przeładowujesz timer wartością już 16-bitową przy TAK krótkich czasach to zadbaj o atomowość<br /></div><br />Ot taki przerobiony na &quot;atomowo&quot;:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/atomic.h&gt; <br />volatile uint16_t nTimer = 0;<br />volatile uint16_t nHeartbeatTimer = 0;<br /><br />#define  DEBUG_LED (1&lt;&lt;PB1)<br />#define  DEBUG_LED_2 (1&lt;&lt;PB0)<br />#define  DEBUG_LED_DDR DDRB<br />#define  DEBUG_LED_ON PORTB |= DEBUG_LED<br />#define  DEBUG_LED_ON_2 PORTB |= DEBUG_LED_2<br />#define  DEBUG_LED_TOG   PORTB ^= DEBUG_LED<br />#define  DEBUG_LED_2_TOG PORTB ^= DEBUG_LED_2<br /><br />int main(void)<br />{<br />        TCCR1B |= (1&lt;&lt;WGM12) | (1&lt;&lt;CS12);<br />        OCR1AL = 43;<br />        OCR1AH = 0;<br />        TIMSK |= (1&lt;&lt;OCIE1A);<br />        sei();<br />        DEBUG_LED_DDR |= DEBUG_LED | DEBUG_LED_2;<br />        DEBUG_LED_ON;<br />        while(1) {<br />        ATOMIC_BLOCK( ATOMIC_RESTORESTATE ) {<br />                if ( !nTimer)<br />                {<br />                DEBUG_LED_2_TOG;<br />                        nTimer = 150;<br />                }<br /><br />                if (!nHeartbeatTimer)<br />                {<br />                        DEBUG_LED_TOG;<br />                        nHeartbeatTimer = 600;<br />                }<br />        }<br />        }<br />}<br /><br />ISR (TIMER1_COMPA_vect)<br />{<br />        uint32_t x;<br />        x = nTimer;<br />        if (x) nTimer = --x;<br /><br />        x = nHeartbeatTimer;<br />        if (x) nHeartbeatTimer = --x;<br /><br />}[/syntax]<br />...z armatą na komary, ale jak już trafi... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 21 lut 2016, o 21:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-21T20:54:15+01:00</updated>
<published>2016-02-21T20:54:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154348#p154348</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154348#p154348"/>
<title type="html"><![CDATA[Re: Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154348#p154348"><![CDATA[
<div class="quotetitle">piotrekr napisał(a):</div><div class="quotecontent"><br />Timer wywoływany co około 1ms.<br /></div><br />No widzisz i do tego chciałem cię właśnie sprowokować i to podejrzewałem. A teraz przypomnij sobie co pisałem już w BB o podstawowej rozdzielczości czasowej dla timerów programowych ? Jak myślisz pisałem to ot tak sobie bez podstaw ?<br /><br />Przypomnę więc - że w książce pisałem wyraźnie, że nie warto schodzić z rozdzielczością poniżej 100 Hz a zszedłeś do 1 kHz i się dziwisz ? Żeby schodzić niżej niż 100 Hz trzeba mieć na uwadze właśnie różne tego typu zjawiska jak np długość wykonywania się przerwania timera - wtedy wręcz jeśli zależy na czasie to trzeba wręcz nieraz sięgać po wstawki asemblerowe. Trzeba też w zasadzie w każdym wypadku zadbać o atomowość (o czym może akurat nie wspominałem w książce) no ale to bywa równie ważne czyli np jak przeładowujesz timer wartością już 16-bitową przy TAK krótkich czasach to zadbaj o atomowość<br /><br />[syntax=c]uint8_t sreg = SREG;<br />cli();<br />nHeartbeatTimer = 255;<br />SREG = sreg;[/syntax]<br /><br />a najlepiej to jak mówię zastanów się czy w ogóle konieczny jest tak krótki czas 1 ms bo mi się wydaje, że to jest bez sensu w wielu wypadkach. Gdy potrzeba tak krótkich czasów to już się zaczyna korzystać z przerwań sprzętowych..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lut 2016, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotrekr]]></name></author>
<updated>2016-02-21T20:34:28+01:00</updated>
<published>2016-02-21T20:34:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154332#p154332</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154332#p154332"/>
<title type="html"><![CDATA[Re: Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154332#p154332"><![CDATA[
Panie Mirku, dziękuję za uwagi ale męczę się z tym problemem od kilku godzin i faktycznie program który zamieściłem jest już po kliku przeróbkach i testach. Ten typ unit32_t i rejestr OCR1A L i H to efekt tych testów. po zmianie spowrotem na uint16_t i na OCR1A = 43. Efekt pozostaje bez zmian.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />Timer wywoływany co około 1ms. (kwarc 11,0592 MHz podzial 256).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3545">piotrekr</a> — 21 lut 2016, o 20:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-21T20:28:26+01:00</updated>
<published>2016-02-21T20:28:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154330#p154330</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154330#p154330"/>
<title type="html"><![CDATA[Re: Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154330#p154330"><![CDATA[
Panie panie, przede wszystkim to spróbuj mi ale sobie też  wyjaśnić dlaczego zastosowałeś TAKI typ w przerwaniu:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">uint32_t x;</div><br /><br />spróbuj wyjaśnić i się na głos sam zastanowić.<br /><br />Po drugie ANI słowa nie napisałeś - ANI Z KOMENTARZY w kodzie to nie wynika (masakra) ... a sam wiesz, że w książce piszę o komentarzach i zobacz już tutaj jak by się przydały - szczególnie, że tobie nie chce się opisać tekstem tak istotnej dla sprawy rzeczy albo wręcz uważasz ją za mało ważną - więc nie napisałeś z jaką częstotliwością działają u ciebie timery programowe <br /><br />Po trzecie po co piszesz takie rzeczy?<br />[syntax=c]OCR1AL = 43;<br />        OCR1AH = 0;[/syntax]<br /><br />zamiast<br /><br />[syntax=c]OCR1A = 43;[/syntax]<br /><br />? hmmm ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lut 2016, o 20:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotrekr]]></name></author>
<updated>2016-02-21T20:37:21+01:00</updated>
<published>2016-02-21T20:05:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154327#p154327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154327#p154327"/>
<title type="html"><![CDATA[Timery programowe - ręce opadają :-(]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14606&amp;p=154327#p154327"><![CDATA[
Witam, od jakiegoś czasu używam timerów programowych zaproponowanych w BB i jak dotąd nie miałem większych problemów. Ale w tym przypadku brak mi pomysłu. Program uprościłem do minimum aby wyeliminować wszelkie możliwości błędu. Schemat jest ultra prosty: Atmega 2560 do pinu PB4 podłączona katodą dioda led. Poniżej lisitng programu:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define DEBUG_LED (1&lt;&lt;PB4)<br />#define DEBUG_LED_PORT PORTB<br />#define DEBUG_LED_DDR DDRB<br />#define DEBUG_LED_ON DEBUG_LED_PORT |=DEBUG_LED<br />#define DEBUG_LED_OFF DEBUG_LED_PORT &amp;=~(DEBUG_LED)<br />#define DEBUG_LED_TOG DEBUG_LED_PORT ^=DEBUG_LED<br /><br />volatile uint16_t nTimer = 0;<br />volatile uint16_t nHeartbeatTimer = 0;<br /><br />int main(void)<br />{<br />        //timer 1 tryb CTC podzial 256 (przy 11.0592MHz jest wywolywany ok co 1ms)<br />TCCR1B |= (1&lt;&lt;WGM12) | (1&lt;&lt;CS12);<br />OCR1A = 43;<br />TIMSK1 |= (1&lt;&lt;OCIE1A);<br />        sei();<br />DEBUG_LED_DDR |= DEBUG_LED;<br />DEBUG_LED_ON;<br />while(1) {<br />if (nTimer == 0)<br />{<br />nTimer = 300;<br />}<br />if (nHeartbeatTimer == 0) <br />                {<br />DEBUG_LED_TOG;<br />nHeartbeatTimer = 255;<br />}<br />}<br />}<br /><br />ISR (TIMER1_COMPA_vect)<br />{<br />uint16_t x;<br />x = nTimer;<br />if (x) nTimer = --x;<br /><br />x = nHeartbeatTimer;<br />if (x) nHeartbeatTimer = --x;<br /><br />}[/syntax]<br /><br />Dopóki nHeartbeatTimer wewnatrz głównej pętli ustawiam na wartość poniżej 256 to jest wszystko OK, ale gdy wartość tą przekroczę to miganie diodą wykonuje się nie do końca regularnie. tzn. co któreś mignięcie jest krótsze. <br /><br />Nie wiem w czym przyczyna. Proszę o pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3545">piotrekr</a> — 21 lut 2016, o 20:05</p><hr />
]]></content>
</entry>
</feed>