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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-30T22:52:11+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13672&amp;mode</id>
<entry>
<author><name><![CDATA[MikroProsiaczek]]></name></author>
<updated>2015-11-30T22:52:11+01:00</updated>
<published>2015-11-30T22:52:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146770#p146770</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146770#p146770"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146770#p146770"><![CDATA[
niestety nie znam, a nie chciałbym się pociąć tą piłą.<br />próbuje zrobic generator sin. mam 256 próbek w pamięci i wypuszczam je przez PWM. narazie na kwarcu 18.432 (troche zwiekszyłem) udało mi się uzuskać 1.2 khz ale chciałbym więcej tak ok 20khz. może zmniejszyć ilosć próbek? a może jakiś inny pomysł?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7411">MikroProsiaczek</a> — 30 lis 2015, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-30T22:46:53+01:00</updated>
<published>2015-11-30T22:46:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146769#p146769</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146769#p146769"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146769#p146769"><![CDATA[
<div class="quotetitle">MikroProsiaczek napisał(a):</div><div class="quotecontent"><br />co to jest prolog i epilog i jak je wyłączyć?<br /></div><br />Znasz asembler ? potrafisz napisać wstawkę w asm do C ? .... jeśli nie - to nie bierz się za wyłączanie prologu i epilogu bo będzie masakra amerykańską piłą tarczową <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />a wyłączyć można za pomocą ISR_NAKED<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 lis 2015, o 22:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MikroProsiaczek]]></name></author>
<updated>2015-11-30T22:43:12+01:00</updated>
<published>2015-11-30T22:43:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146768#p146768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146768#p146768"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146768#p146768"><![CDATA[
dziekuję za odpowiedz.<br />w przerwaniu mam tylko 3 linie, i właśnie zauważyłem ze jak dwie usunęłem to i częstotliwość wzrosła.<br />co to jest prolog i epilog i jak je wyłączyć?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7411">MikroProsiaczek</a> — 30 lis 2015, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-11-30T22:39:20+01:00</updated>
<published>2015-11-30T22:39:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146767#p146767</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146767#p146767"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146767#p146767"><![CDATA[
Wejście do przerwania poprzedzone jest tzw. prologiem a wyjście - epilogiem. W skrócie prolog to odłożenie na stos ważniejszych rejestrów procesora, a epilog - odtworzenie wartości tych rejestrów po zakończeniu przerwania.<br />U mnie w przykładowym projekcie wygląda to tak<br />[syntax=asm]bc:1f 92       pushr1<br />be:0f 92       pushr0<br />c0:0f b6       inr0, 0x3f; 63<br />c2:0f 92       pushr0<br />c4:11 24       eorr1, r1<br />c6:2f 93       pushr18<br />c8:8f 93       pushr24<br />ca:9f 93       pushr25<br /><br />10e:9f 91       popr25<br />110:8f 91       popr24<br />112:2f 91       popr18<br />114:0f 90       popr0<br />116:0f be       out0x3f, r0; 63<br />118:0f 90       popr0<br />11a:1f 90       popr1<br />11c:18 95       reti[/syntax]<br />Jak widzisz jest to kilka, kilkanaście instrukcji. Pewnie to jest przyczyną maksymalnej częstotliwości z jaką obsługiwane jest przerwanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 30 lis 2015, o 22:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-30T22:37:23+01:00</updated>
<published>2015-11-30T22:37:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146765#p146765</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146765#p146765"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146765#p146765"><![CDATA[
<div class="quotetitle">MikroProsiaczek napisał(a):</div><div class="quotecontent"><br />pytanie jaka jest maksymalna szbkosc pojawiania się przerwania?<br /></div><br />to zależy od ciebie a dokładniej ile kodu wpiszesz w przerwaniu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czy użyjesz prologu i epilogu (domyślnie są włączone) czy się ich pozbędziesz i sam napiszesz w asm wstawkę do przerwania - np miganie diodą LED nie będzie dużo zajmować <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> — 30 lis 2015, o 22:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MikroProsiaczek]]></name></author>
<updated>2015-11-30T22:10:44+01:00</updated>
<published>2015-11-30T22:10:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146762#p146762</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146762#p146762"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146762#p146762"><![CDATA[
witam, mam pytanie dotyczące Timera1. mój procesor atmega32 pracuje na kwarcu 16 mhz<br />ustawiłem timer1 jako CTC <br />TCCR1B |= (1&lt;&lt;WGM12);<br />oraz przerwanie TIMER1_COMPA_vect w którym zapalam i gasze diode<br />TIMSK |= (1&lt;&lt;OCIE1A);<br />rejestr porównania ustawilem na 0<br />OCR1A = 0 <br />chce sprawdzic jak szybko (często) moga byc obslugiwane przerwania.<br />jesli ustawie preskaler na 1024 lub 256 to wszystko działa wg obliczeń. częstotliwość sprawdzam oscyloskopem podłaczonym do wyjscia portu w którym jest dioda. <br />jesli preskaler zmniejszam do 64, 8, 1 to częstotliwość już się nie zmienia i wynosi ok 240khz<br />Jesli moje rozumowanie jest prawidłowe to w sumie rozumiem ze gdyby preskaler był np =1 to przerwanie musiałoby sie wykonywać z f=16Mhz  a wtedy procesor nie miałby juz na nic czasu.<br />pytanie jaka jest maksymalna szbkosc pojawiania się przerwania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7411">MikroProsiaczek</a> — 30 lis 2015, o 22:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-28T11:39:31+01:00</updated>
<published>2015-11-28T11:39:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146585#p146585</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146585#p146585"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146585#p146585"><![CDATA[
Teraz widzę.<br />To była przyczyna <br />Dzięki kolego  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 28 lis 2015, o 11:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marmur]]></name></author>
<updated>2015-11-28T10:53:51+01:00</updated>
<published>2015-11-28T10:53:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146580#p146580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146580#p146580"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146580#p146580"><![CDATA[
Przypatrz się uważnie temu:<br />[syntax=c]void timer2(void) {<br /> <br />                TCCR2   |= (1&lt;&lt;WGM21);<br />                TCCR2   |= (1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22);<br />                OCR2    = F_CPU/1024UL/200UL;<br />                TIMSK   = (1&lt;&lt;OCIE2); //widzę czy nie widzę? :P<br />}<br />void timer1(void) {<br /> <br />            TCCR1B |= (1&lt;&lt;WGM12);<br />            TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10);<br /> <br />            OCR1A = 3;<br />           TIMSK |= (1&lt;&lt;OCIE1A);//widzę czy nie widzę? :P[/syntax]<br /><br />Wniosek chyba jest prosty? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10570">marmur</a> — 28 lis 2015, o 10:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-28T10:22:48+01:00</updated>
<published>2015-11-28T10:22:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146577#p146577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146577#p146577"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146577#p146577"><![CDATA[
Przesyłam raz jeszcze, ze wszystkimi poprawkami <br />Timer2 pracuje<br />Timer1 nie pracuje <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /> <br /><br />Program działa, tylko pod warunkiem że pierwszy zainicjalizuję timer2<br />Czy ta kolejność ma jakieś znaczenie?<br />Proszę raz jeszcze spojrzeć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />[syntax=c]//main.c<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;com.h&quot;<br /><br />int main(void) {<br />DDRA  |= DIR_PIN | ENA_PIN | CLK_PIN;<br />PORTA |= DIR_PIN | ENA_PIN | CLK_PIN;<br /><br />DDRC  |= YELOW_PIN;<br />PORTC |= YELOW_PIN;<br /><br />DDRD  &amp;=~(1&lt;&lt;PD6);<br />PORTD |= KEY1;<br /><br />timer1();//tak nie działa<br />timer2();<br /><br /> sei();<br />while(1){<br /><br />if( !Timer1 ) {<br /> Timer1 = 10;<br /> YELOW_TOG;<br />}<br />    if( !key_lock &amp;&amp; !(PIND &amp; KEY1 ) ) {<br /> key_lock = 65000;<br /><br />TOG_MOTOR;<br />} else if( key_lock &amp;&amp; (PIND &amp; KEY1 ) ) key_lock++;<br />}<br /><br />}<br />//com.h<br />#ifndef COM_H_<br />#define COM_H_<br /><br />extern uint16_t key_lock;<br />extern volatile uint16_t Timer1;<br />#define KEY1        (1&lt;&lt;PD6)<br /><br />#define DIR_PIN     (1&lt;&lt;PA0)<br />#define DIR_DDR     DDRA<br />#define DIR_PORT    PORTA<br />#define RIGHT       DIR_PORT |= DIR_PIN<br />#define LEFT        DIR_PORT &amp;=~DIR_PIN<br />#define TOG_DIR     DIR_PORT ^= DIR_PIN<br /><br />#define ENA_PIN     (1&lt;&lt;PA1)<br />#define ENA_DDR     DDRA<br />#define ENA_PORT    PORTA<br />#define START_MOTOR ENA_PORT |= ENA_PIN<br />#define STOP_MOTOR  ENA_PORT &amp;=~ENA_PIN<br />#define TOG_MOTOR   ENA_PORT ^= ENA_PIN<br /><br />#define CLK_PIN     (1&lt;&lt;PA2)<br />#define CLK_DDR     DDRA<br />#define CLK_PORT    PORTA<br />#define TOG_CLK     CLK_PORT ^= CLK_PIN<br /><br />#define YELOW_PIN   (1&lt;&lt;PC0)<br />#define YELOW_TOG   PORTC ^= YELOW_PIN<br /><br />void timer1(void);<br />void timer2(void);<br /><br />//com.c<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;com.h&quot;<br /><br />uint16_t key_lock;<br />volatile uint16_t Timer1 ;<br /><br />void timer2(void) {<br /><br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22);<br />OCR2 = F_CPU/1024UL/200UL;<br />TIMSK = (1&lt;&lt;OCIE2);<br />}<br />void timer1(void) {<br /><br />    TCCR1B |= (1&lt;&lt;WGM12);<br />    TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10);<br /><br />    OCR1A = 3;<br />    TIMSK |= (1&lt;&lt;OCIE1A);<br />}<br /><br />ISR( TIMER1_COMPA_vect ) {<br /><br />PORTA ^=(1&lt;&lt;PA2);<br />}<br /><br />ISR( TIMER2_COMP_vect ) {<br /><br />uint16_t n;<br /><br />n = Timer1;<br />if (n) Timer1 = --n;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 28 lis 2015, o 10:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-27T23:42:40+01:00</updated>
<published>2015-11-27T23:42:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146556#p146556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146556#p146556"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146556#p146556"><![CDATA[
<div class="quotetitle">rohan napisał(a):</div><div class="quotecontent"><br />funkcje przycisku przeniosłem do programowego timera.<br /></div><br />To popraw to <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to jest funkcja która ma działać BEZPOŚREDNIO w pętli głównej programu, jest nieblokująca i będzie ładnie działać - po to właśnie została stworzona. To że działa ci w timerze programowym to hmmm no będzie ale to jest bez sensu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zrozum .... ona się dobrze czuje w pętli głównej i nie potrzebuje żadnego timera<br /><br />jak już coś używasz z bloga<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html" >http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html</a><!-- m --><br /><br />to czytaj dokładniej jak to działa i jak się tego używa ok ? <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> — 27 lis 2015, o 23:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-27T23:39:46+01:00</updated>
<published>2015-11-27T23:39:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146555#p146555</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146555#p146555"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146555#p146555"><![CDATA[
Poprawiłem, funkcje przycisku przeniosłem do programowego timera.<br />Usunąłem zdublowaną deklarację.<br />Teraz działa jak należy  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Teraz można zapisać <br />[syntax=c]timer1();<br />timer2();<br />//działa[/syntax]<br />Dziękuję za pomoc <br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 27 lis 2015, o 23:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-27T23:23:46+01:00</updated>
<published>2015-11-27T23:23:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146551#p146551</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146551#p146551"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146551#p146551"><![CDATA[
zapamiętaj sobie jedno, ten kod:<br /><br />[syntax=c]if( !key_lock &amp;&amp; !(PIND &amp; KEY1 ) ) {<br />                                         key_lock = 65000;<br />                                         TOG_DIR;<br />                                         TOG_MOTOR;<br />                                } else if( key_lock &amp;&amp; (PIND &amp; KEY1 ) ) key_lock++;[/syntax]<br /><br />ABSOLUTNIE nie nadaje się do używania go w procedurach obsługi przerwań<br /><br /><div class="quotetitle">rohan napisał(a):</div><div class="quotecontent"><br />//-----------------------------------------------------------------------------------------------<br />         timer1();//Tak działa<br />         <span style="color: #FF0000">void timer2(void); // &lt;---- <strong>koszmarek</strong></span><br /></div><br />to jest jakiś koszmarek - poczytaj w Bluebooku o funkcjach w C i jak się je wywołuje<br /><br />kolejny koszmarek babolek - w swoim pliku com.c definiujesz<br /><br /><br />[syntax=c]volatile uint16_t Timer1 ;[/syntax]<br /><br />a nie widzisz, że w pliku main.c też masz zdefiniowaną tą samą zmienną ?<br /><br />co jeszcze lepsze, w pliku *.h deklarujesz już całą kawalkadę zmiennych<br /><br />[syntax=c]extern volatile uint16_t Timer1, Timer2, Timer3, Timer4;[/syntax]<br /><br />których nigdzie nie ma zdefiniowanych poza tym Timer1 podwójnie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lis 2015, o 23:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-27T23:12:17+01:00</updated>
<published>2015-11-27T23:12:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146549#p146549</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146549#p146549"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146549#p146549"><![CDATA[
Zaznaczyłem w komentarzach o które miejsce mi chodzi.<br /><br />[syntax=c]//main.c<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;com.h&quot;<br /><br />volatile uint16_t Timer1;<br /><br />int main(void) {<br />DDRA  |= DIR_PIN | ENA_PIN | CLK_PIN;<br />PORTA |= DIR_PIN | ENA_PIN | CLK_PIN;<br /><br />DDRC  |= YELOW_PIN;<br />PORTC |= YELOW_PIN;<br /><br />DDRD  &amp;=~(1&lt;&lt;PD6);<br />PORTD |= KEY1;  <br /><br />//----------------------------------------------------------------------------------------------<br /> timer2();//Tak działa<br /> timer1();<br />//--------------------------------------------------------<br />         timer1();//Tak nie działa<br /> timer2();<br />//-----------------------------------------------------------------------------------------------<br />         timer1();//Tak działa<br /> void timer2(void);<br />//------------------------------------------<br />    sei();<br />while(1){<br /><br />if( !Timer1 ) {<br /> Timer1 = 10;<br /> YELOW_TOG;<br /><br />}<br />}<br /><br />}<br />//com.c<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;com.h&quot;<br /><br />uint16_t key_lock;<br />volatile uint16_t Timer1 ;<br /><br />void timer2(void) {<br />/* Timer2  inicjalizacja przerwania co 10ms */<br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22);<br />OCR2 = F_CPU/1024UL/200UL;<br />TIMSK = (1&lt;&lt;OCIE2);<br />}<br />void timer1(void) {<br />/* Timer1 16 bit  inicjalizacja przerwania co 10ms */<br />    TCCR1B |= (1&lt;&lt;WGM12); <br />    TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10); <br />    OCR1A = 3;<br />    TIMSK |= (1&lt;&lt;OCIE1A);<br />}<br /><br />ISR(TIMER1_COMPA_vect) {<br /><br />PORTA ^=(1&lt;&lt;PA2);<br />if( !key_lock &amp;&amp; !(PIND &amp; KEY1 ) ) {<br /> key_lock = 65000;<br /> TOG_DIR;<br /> TOG_MOTOR;<br />} else if( key_lock &amp;&amp; (PIND &amp; KEY1 ) ) key_lock++;<br />}<br /><br />ISR( TIMER2_COMP_vect ) {<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br /><br />}<br />//com.h<br />#ifndef COMMON_H_<br />#define COMMON_H_<br /><br /><br />extern volatile uint16_t Timer1, Timer2, Timer3, Timer4;<br />#define KEY1 (1&lt;&lt;PD6)<br /><br />#define DIR_PIN     (1&lt;&lt;PA0)<br />#define DIR_DDR     DDRA<br />#define DIR_PORT    PORTA<br />#define RIGHT       DIR_PORT |= DIR_PIN<br />#define LEFT        DIR_PORT &amp;=~DIR_PIN<br />#define TOG_DIR     DIR_PORT ^= DIR_PIN<br /><br />#define ENA_PIN     (1&lt;&lt;PA1)<br />#define ENA_DDR     DDRA<br />#define ENA_PORT    PORTA<br />#define START_MOTOR ENA_PORT |= ENA_PIN<br />#define STOP_MOTOR  ENA_PORT &amp;=~ENA_PIN<br />#define TOG_MOTOR   ENA_PORT ^= ENA_PIN<br /><br />#define CLK_PIN     (1&lt;&lt;PA2)<br />#define CLK_DDR     DDRA<br />#define CLK_PORT    PORTA<br />#define TOG_CLK     CLK_PORT ^= CLK_PIN<br /><br />#define YELOW_PIN   (1&lt;&lt;PC0)<br />#define YELOW_TOG   PORTC ^= YELOW_PIN<br /><br /><br />void timer1(void);<br />void timer2(void);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 27 lis 2015, o 23:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-27T22:45:23+01:00</updated>
<published>2015-11-27T22:45:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146545#p146545</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146545#p146545"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146545#p146545"><![CDATA[
<div class="quotetitle">rohan napisał(a):</div><div class="quotecontent"><br />Moje pytanie dotyczy samej inicjalizacji.<br /></div><br />No drugi raz wklejasz kod w którym w ogóle nie widać jak inicjalizujesz timery a znowu zadajesz pytanie czy ty je dobrze inicjalizujesz ...<br /><br />to co pokazałeś to jakieś wywoływania twoich funkcji, a nikt nie wie co ty w nich wyprawiasz - nie wiadomo jaki kod ci nie działa - więc zastanów się<br /><br />no chyba że takie zagadki zadajesz żeby zgadywać co ty tam wpisałeś ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lis 2015, o 22:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-27T17:06:34+01:00</updated>
<published>2015-11-27T17:06:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146505#p146505</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146505#p146505"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146505#p146505"><![CDATA[
Dokładnie zrozumiałem i poprawiłem.<br />Tak jak wyżej napisałem, precyzyjny przebieg generuje  Timer1  16bit i nic po zatym.<br />Wszystkie programowe obsługuje Timer2  8bit.<br /><br />Moje pytanie dotyczy samej inicjalizacji.<br />[syntax=c]//przy takiej inicjalizacjii nie działa <br />timer1_init();<br />soft_timer2_init();<br /><br /><br />//tak działa<br />timer1_init();<br />void soft_timer2_init(void);<br /><br />//dlaczego drugi Timer trzeba inaczej inicjalizować (zapisać)?[/syntax]<br /><br /> *oczywiście chodzi o inicjalizację<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 27 lis 2015, o 17:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-27T16:44:53+01:00</updated>
<published>2015-11-27T16:44:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146504#p146504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146504#p146504"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146504#p146504"><![CDATA[
Ale czy kolega nie rozumie o czym piszę ?<br /><br />to jeszcze raz prościej i krócej:<br /><br />Timery programowe nie służą do generowania precyzyjnych i dokładnych przebiegów<br /><br />jaśniej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lis 2015, o 16:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-27T16:36:15+01:00</updated>
<published>2015-11-27T16:36:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146503#p146503</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146503#p146503"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146503#p146503"><![CDATA[
Timer1 zlicza w przerwaniu wg wskazówek.<br />Dodałem Timer2 pod który podłączone są Timery programowe.<br />Oba Timery 1 i 2 z przerwaniami, wyprowadziłem do osobnego pliku.<br /><br />Chcę zapytać o samą inicjalizację w main.c<br />[syntax=c]//tak <br />timer1_init();<br />void soft_timer2_init(void);<br /><br />//czy tak<br /><br />timer1_init();<br />soft_timer2_init();[/syntax]<br /><br />W tym drugim przypadku Timer1 nie pracuje <br />Jak to poprawnie deklarować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 27 lis 2015, o 16:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-25T12:16:48+01:00</updated>
<published>2015-11-25T12:16:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146312#p146312</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146312#p146312"/>
<title type="html"><![CDATA[Re: Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146312#p146312"><![CDATA[
W ogóle się temu nie dziw - bo robisz tzw &quot;masakrę amerykańską piłą tarczową&quot; .... <br /><br />To co robisz to tzw technika &quot;timerów programowych&quot; Ona dla tak krótkich czasów (już poniżej 100 Hz) prawie nie ma sensu .... dla 100 Hz jeszcze tak no ale ABSOLUTNIE nie do generowania stabilnego i pewnego przebiegu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a TYM BARDZIEJ gdy go jeszcze generujesz w pętli głównej. Panie kochany timery programowe nie są w stanie być tak dokładne i co więcej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> NIE MAJĄ ... hmmm nie muszą być TAK DOKŁADNE bo służą do CAŁKIEM INNYCH CELÓW ... do takich gdzie ich kiepska precyzja w porównaniu do timerów sprzętowych, jest w 100% wystarczająca a często nawet aż na wyrost <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Po prostu nie idź tą drogą ... Jak chcesz generować stabilniejszy przebieg to zdecyduj się na generowanie go bezpośrednio w sprzerwaniu timera sprzętowego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 lis 2015, o 12:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rohan]]></name></author>
<updated>2015-11-25T12:04:17+01:00</updated>
<published>2015-11-25T12:04:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146311#p146311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146311#p146311"/>
<title type="html"><![CDATA[Timer1 CTC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13672&amp;p=146311#p146311"><![CDATA[
Proszę o pomoc przy CTC<br />Używam atMEGA32<br />kwarc 18432000<br /><br />18432000/64/200=1440=100Hz  Ok<br />18432000/64/400=720 =200Hz  Ok<br />18432000/64/600=480 =234Hz ?!<br />miernik w ostatnim przypadku pokazuje 234 zamiast 300 <br /><br />Tak samo na innych stopniach podziału prescalera max wartość to 234?<br /><br />Ustawienia Timera1<br />[syntax=c]TCCR1B |= (1&lt;&lt;WGM12);         <br />TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10);         <br />OCR1A = 1440;<br />TIMSK |= (1&lt;&lt;OCIE1A);// Odblokowanie przerwania CompareMatch<br /><br />// przerwanie<br />ISR(TIMER1_COMPA_vect) {<br />uint16_t n;<br /><br />n = Timer1;<br />if (n) Timer1 = --n;<br />}<br /> // i w pętli <br />if( !Timer1 ) {<br />Timer1 = 1;<br />PORTA ^=(1&lt;&lt;PA2);<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4138">rohan</a> — 25 lis 2015, o 12:04</p><hr />
]]></content>
</entry>
</feed>