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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-08-24T12:31:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16020&amp;mode</id>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-24T12:31:27+01:00</updated>
<published>2016-08-24T12:31:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166951#p166951</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166951#p166951"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166951#p166951"><![CDATA[
Dzięki panowie, jak wrócę do domu to sprawdzę to ;p myślałem o tym właśnie ze kropka a przecinek może być różnica, ale uznałem że nie i nie sprawdzałem. Za dużo drobnych błędów popelniam. Trzeba wrócić do początku blue booka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />Zdublowal się post<br /><br />Wszystko pięknie gra <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dziękuję za pomoc <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=7742">budapreniak</a> — 24 sie 2016, o 12:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-24T08:35:16+01:00</updated>
<published>2016-08-24T08:35:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166923#p166923</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166923#p166923"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166923#p166923"><![CDATA[
Ha..<img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Kurczę ale jestem gapa.<br />Próbowałem z tym floatem przed okres i dodałem jeszcze stdio.h ,<br />i wychodziła kiszka.<br />A tu proszę:)<br />Kolego Marhef DZIĘKUJĘ!<br />Przecinek zamiast kropki ,<br /> I KRZAK.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 24 sie 2016, o 08:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2016-08-24T07:59:16+01:00</updated>
<published>2016-08-24T07:59:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166920#p166920</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166920#p166920"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166920#p166920"><![CDATA[
Panowie, o ile dobrze pamiętam, liczby niecałkowite zapisuje się z &quot;.&quot;, a nie z &quot;,&quot;. Chyba że to tylko na forum tak. Poza tym nie wiem, czy nie lepiej byłoby zapisać:[syntax=c](unsigned int) ( (float) okres *0.5 );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 24 sie 2016, o 07:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-23T22:25:29+01:00</updated>
<published>2016-08-23T22:25:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166908#p166908</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166908#p166908"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166908#p166908"><![CDATA[
coś pomogło - taki wpis. np. 200, 100, <br />[syntax=c]OCR1A = okres;<br /><br />wypelnienie = okres / 200;<br />OCR1B = wypelnienie;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 23 sie 2016, o 22:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-23T20:50:37+01:00</updated>
<published>2016-08-23T20:50:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166902#p166902</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166902#p166902"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166902#p166902"><![CDATA[
szukam błędu.<br />wyświetlam wartości tim, okres, OCR1A, OCR1B, coś złe proporcje przy zmianie preskalera.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 30 minutach ]</span></strong><br /><br />są problemy w rzutowaniach .<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 58 minutach ]</span></strong><br /><br />po takiej operacji sprawdź na wyświetlaczu -  wypełnienie = 0.  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br />[syntax=c]wypelnienie = (unsigned int) okres * 0,5;[/syntax]<br />po tej też  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> [syntax=c]wypelnienie = (unsigned int) okres * 0,05;[/syntax]<br />trzeba uzupełnić wiedzę na temat rzutowania, albo obejść<br />[syntax=c]wypelnienie =  (okres / 20);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 23 sie 2016, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-23T20:18:39+01:00</updated>
<published>2016-08-23T20:18:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166898#p166898</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166898#p166898"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166898#p166898"><![CDATA[
Dzięki wielkie za pomoc i cierpliwość <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Kurka to ustawianie bitów muszę potrenować.<br />Led sobie mryga, tylko strasznie słabo i nie różnicy czy jest tak<br />[syntax=c]wypelnienie = (unsigned int) okres * 0,5;[/syntax]<br />czy tak<br />[syntax=c]wypelnienie = (unsigned int) okres * 0,05;[/syntax]<br />w obu przypadkach mryga tak samo słabo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 23 sie 2016, o 20:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-23T18:25:12+01:00</updated>
<published>2016-08-23T18:25:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166890#p166890</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166890#p166890"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166890#p166890"><![CDATA[
hehe. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />fajne.  <img src="https://forum.atnel.pl/images/smilies/icon_exclaim.gif" alt=":!:" title="Wykrzyknik" /> <br />Mryga sobie z różną częstotliwością. i podaje obr/min , f[HZ], enkoder  ...  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 12 minutach ]</span></strong><br /><br />już,...już... piszę  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />[syntax=c]if(enkoder &lt;= 2000){        // ustawinia preskalerów od obrotów<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B |= (1&lt;&lt;CS12); //256                                           /*&lt;-----bylo----------TCCR1B = (1&lt;&lt;CS12);------------*/<br />                preskaler = 256;<br />                }<br />        if(enkoder &gt; 2000 &amp;&amp; enkoder &lt;= 7500){<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B |= (1&lt;&lt;CS11) | (1&lt;&lt;CS10); //64                            /*&lt;-----bylo------TCCR1B = (1&lt;&lt;CS11)---- | (1&lt;&lt;CS10);----------*/<br />                preskaler = 64;<br />                }<br />        if(enkoder &gt; 7500 &amp;&amp; enkoder &lt;= 15000){<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B |= (1&lt;&lt;CS11); //8                                     /*&lt;-----bylo------TCCR1B = (1&lt;&lt;CS11);----------*/<br />                preskaler = 8;<br />                }<br />        if(enkoder &gt; 15000){<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B |= (1&lt;&lt;CS10); //1                                      /*&lt;-----bylo------ TCCR1B = (1&lt;&lt;CS10);----------*/<br />                preskaler = 1;<br />                }[/syntax]<br /><br />a przepisanie OCR1A i OCR1B w trybie 15 działa i w przerwaniu i w pętli. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 32 minutach ]</span></strong><br /><br />w trybie 14 z ICR1 i OCR1A też hula  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  na nodze OC1a.<br /><br />tylko trochę mi się nie podoba regulacja wypełnienia. <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 40 minutach ]</span></strong><br /><br />a.. komentarz .<br />zamiast po skasowaniu bitów w rejestrze ustawiać tylko wybrane a pozostałe pomijać,<br />ustawiane były potrzebne bity razem z wyzerowaniem innych.<br />zamiast REJESTR |=....... BIT;<br />było REJESTR = .......BIT;<br />Tłumaczone wcześniej, dlatego sobie daruję. <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=11549">Daro69</a> — 23 sie 2016, o 18:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-23T13:02:59+01:00</updated>
<published>2016-08-23T13:02:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166871#p166871</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166871#p166871"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166871#p166871"><![CDATA[
Źle to zrozumiałem :p bo wartość licznika jest w TCNT a icr i OCR tylko ogranicza licznik. Dziś znowu coś pokombinuje, żeby to ruszyć. Ale narazie brak pomysłów ;(<br /><br />edit:<br />A problemem nie jest że OCR i ICR są rejestrami 2 bitowymi? Bo coś kiedyś w internecie o tym czytałem, ale chyba programując w C to nie stwarza problemu, ale nie jestem pewien do końca ;p<br /><br />edit 2:<br />dioda się zaświeciła, gdy kręcę potencjometrem to po prostu rozjaśnia się lub ciemnieje i jak zgaśnie to przy kolejnym kroku enkodera od nowa zaczyna się rozjaśniać, hmm<br /><br />edit 3: <br />miałem pomylone OCR i ICR. Teraz jak jest niby ok, to LED świeci przy uruchamianiu, a po przejściu do pętli głównej nie daje oznak życia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 23 sie 2016, o 13:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-23T11:43:59+01:00</updated>
<published>2016-08-23T11:43:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166855#p166855</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166855#p166855"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166855#p166855"><![CDATA[
Punkt 3. <br />Będą nadpisywane w każdym obiegu pętli. <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=11549">Daro69</a> — 23 sie 2016, o 11:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-23T09:43:36+01:00</updated>
<published>2016-08-23T09:43:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166846#p166846</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166846#p166846"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166846#p166846"><![CDATA[
2) chyba nie ma tu błędu<br />[syntax=c]if(enkoder &lt; 120) enkoder=120;      <br />if(enkoder &gt; 60000) enkoder = 120;<br />if(enkoder &gt; 42000) enkoder = 42000;[/syntax]<br /><br />zakres 120-42000.<br />Pierwszy if ustawia zakres 120 jeżeli chcemy zjechać poniżej 120.<br />Drug if podobnie, mam mnożnik ustawiony na 1000 i enkoder 120, to jak cofnę potencjometr to będę miał wartość 64656 czyli muszę dać na 120 jeżeli powyżej 60000, żeby mi wartość nie skakała.<br />Trzeci if nie pozwala przekroczyć 42000 ;p<br />3) Jak ICR i OCR będą zapisywane w pętli głównej to nie będą ciągle nadpisywane i nigdy nie wykona się pełen okres?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 23 sie 2016, o 09:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-23T00:05:55+01:00</updated>
<published>2016-08-23T00:05:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166824#p166824</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166824#p166824"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166824#p166824"><![CDATA[
1) zapomniałem załączyć COM1B1, od OC1B.<br />2) program do przejrzenia na spokojnie. znalazłem błędny wpis<br /> w linijce : // ustawianie zakresu obrotów - 3 ify.<br />3) przypisanie do OCR ów i liczenie wypełnienia wkitrałem do pętli gł. , pozbywając się przerwania _OVF_ . coś niezdarnie, ale mryga, szybciej i wolniej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />wreszcie zajarzyłem o co chodzi w tym kodzie .  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  to generator stroboskopowy. <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> A ja dopatrywałem się że to ma mierzyć, i zawzięcie szukałem sposobu na wpisanie OCRów i ICR w przerwaniu. <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br />Trochę czasu, to ogarniemy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 23 sie 2016, o 00:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-22T21:20:58+01:00</updated>
<published>2016-08-22T21:20:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166815#p166815</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166815#p166815"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166815#p166815"><![CDATA[
Bardziej to ja meczę o pomoc chyba ;p Na trybie 15 całkowita cisza, nawet ani razu nie mrygnie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 22 sie 2016, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-22T21:06:38+01:00</updated>
<published>2016-08-22T21:06:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166814#p166814</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166814#p166814"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166814#p166814"><![CDATA[
Sorka ze tak Cię męczę z tymi kodami. <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br />Może przejść na tryb 15 . tylko wtedy wyjściem jest OC1B. (PB2.)  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />[syntax=c]//***********    BIBLIOTEKI    ***********<br /> <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;hd44780.h&quot;<br /> <br />//*********** KONIEC BIBLIOTEKI***********<br /> <br /> <br /> <br />//***********    ZMIENNE    ***********<br /> <br />volatile unsigned int enkoder=120, mnoznik = 1000, x=1, okres, wypelnienie;<br />unsigned int tim, preskaler=256;<br />char enkoder1&#91;6&#93;, mnoznik1&#91;5&#93;;<br />float czestotliwosc;<br /> <br />char cal1&#91;10&#93;,tim1&#91;6&#93;;<br /> <br />//*********** KONIEC ZMIENNE ***********<br /> <br /> <br /> <br />//***********    FUNKCJA PRZELICZ   ***********<br /> <br />void przelicz(){<br /> <br />        czestotliwosc=(float)enkoder/60;  // obliczanie czestotliwości<br />        tim=(float)(16000000/(preskaler*czestotliwosc))-1; // obliczenie tykniec procesora<br />        okres = (unsigned int) tim; // rzutowanie<br /> <br />}<br /> <br />//*********** KONIEC FUNKCJI PRZELICZ ***********<br /> <br /> <br /> <br /> <br />//***********  MAIN  ***********<br /> <br />int main(void){<br /> <br />        PORTD |= (1&lt;&lt;PD2) | (1&lt;&lt;PD3) | (1&lt;&lt;PD4); // Piny do przycisku i enkodera<br />        DDRB |= (1&lt;&lt;PB2); // LED na OC1B   /*  &lt;----------------------------------PB2-----------------*/<br />        GICR |= (1&lt;&lt;INT0) | (1&lt;&lt;INT1);  // zezwolenie na przerwania od przycisków<br />        MCUCR |=  (1&lt;&lt;ISC00) | (1&lt;&lt;ISC11) | (1&lt;&lt;ISC10); // ustawienie reakcji na zbocza<br />        TCCR1A|= (1&lt;&lt;WGM11) | (1&lt;&lt;COM1A1) |     (1&lt;&lt;WGM10); //TRYB 15 PWM i ustawienie porownania  /* &lt;-----------------------WGM10--*/<br />        TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;WGM13) | (1&lt;&lt;WGM12);  // preskaler 256 i trym 14 PWM<br />        TIMSK |= (1&lt;&lt;TOIE1);<br /> <br />        lcd_init();                                     // wyswietlacz<br />        LCD_DISPLAY(LCDDISPLAY);<br /> <br />        LCD_LOCATE(1,0);          // Start<br />        lcd_puts(&quot;Start&quot;);<br />        _delay_ms(1000);<br /> <br />        LCD_LOCATE(0,0);<br />        lcd_puts(&quot;enk:&quot;);<br />        utoa(enkoder, enkoder1, 10);<br />        LCD_LOCATE(4,0);<br />        lcd_puts(enkoder1);<br /> <br />        LCD_LOCATE(11,0);<br />        lcd_puts(&quot;m&quot;);<br />        itoa(mnoznik, mnoznik1, 10);<br />        LCD_LOCATE(12,0);<br />        lcd_puts(mnoznik1);<br /> <br />        sei();  // włączenie przerwań<br /> <br />//***********   PETLA GLOWNA    ***********<br />        while(1){<br /> <br />                przelicz(); // wywołanie funkcji<br /> <br />                utoa(enkoder, enkoder1, 10);  // lcd<br />                LCD_LOCATE(4,0);<br />                lcd_puts(enkoder1);<br />                lcd_puts(&quot; &quot;);<br /> <br />                itoa(mnoznik, mnoznik1, 10);  // lcd<br />                LCD_LOCATE(12,0);<br />                lcd_puts(mnoznik1);<br />                lcd_puts(&quot;   &quot;);<br /> <br />                //-------------------------------------------------<br /> <br />                                dtostrf(tim,6,0,tim1);  //chilowe pomocniecze dane na LCD<br />                                LCD_LOCATE(0,1);<br />                                lcd_puts(tim1);<br />                                lcd_puts(&quot;   &quot;);<br /> <br />                                dtostrf(czestotliwosc,6,3,cal1);  //chilowe pomocniecze dane na LCD<br />                                LCD_LOCATE(8,1);<br />                                lcd_puts(cal1);<br />                                lcd_puts(&quot;   &quot;);<br /> <br />                //------------------------------------------------------<br /> <br />        }<br /> <br />//*********** KONIEC PETLI GLOWNEJ ***********<br /> <br />}<br /> <br />//*********** KONIEC MAIN ***********<br /> <br /> <br />//***********    PRZRWANIE 1   ***********<br /> <br />ISR ( INT0_vect ){   // przerwanie i obsługa enkodera<br /> <br />        if (mnoznik == 1)   // ustawianie mnożnika<br />        x=1;<br />        if (mnoznik == 10)<br />        x=10;<br />        if (mnoznik == 100)<br />        x=100;<br />        if (mnoznik == 1000)<br />        x=1000;<br /> <br /> <br />    static uint8_t dir;<br /> <br />    if( ! (PIND &amp;  (1&lt;&lt;PD2) ) ){  // obsługa enkodera<br />        dir = (PIND &amp; (1&lt;&lt;PD4));<br />        } else {<br />        if (dir != (PIND &amp; (1&lt;&lt;PD4) ) ){<br />                if (dir) enkoder = enkoder + x;<br />                else enkoder = enkoder - x;<br />                }<br />    }<br />        if(enkoder &lt; 120) enkoder=120;       // ustawianie zakresu obrotów<br />        if(enkoder &gt; 60000) enkoder = 120;<br />        if(enkoder &gt; 42000) enkoder = 42000;<br /> <br />        if(enkoder &lt;= 2000){        // ustawinia preskalerów od obrotów<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B = (1&lt;&lt;CS12); //256<br />                preskaler = 256;<br />                }<br />        if(enkoder &gt; 2000 &amp;&amp; enkoder &lt;= 7500){<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B = (1&lt;&lt;CS11) | (1&lt;&lt;CS10); //64<br />                preskaler = 64;<br />                }<br />        if(enkoder &gt; 7500 &amp;&amp; enkoder &lt;= 15000){<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B = (1&lt;&lt;CS11); //8<br />                preskaler = 8;<br />                }<br />        if(enkoder &gt; 15000){<br />                TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />                TCCR1B = (1&lt;&lt;CS10); //1<br />                preskaler = 1;<br />                }<br /> <br />}<br /> <br />//*********** KONIEC PRZERWANIE 1  ***********<br /> <br /> <br /> <br />//***********     PRZERWANIE 2  ***********<br /> <br />ISR ( INT1_vect ){  // przerwanie od przycisku<br /> <br />        mnoznik= mnoznik * 10; // ustawianie mnożnika<br />        if (mnoznik == 10000){<br />                mnoznik=1;<br />                }<br />}<br /> <br />//*********** KONIEC PRZERWANIE 2***********<br /> <br /> <br /> <br />//***********     PRZERWANIE TIMER  ***********<br /> <br />ISR(TIMER1_OVF_vect){<br /> <br />        OCR1A = okres;                                     /* &lt;----------------------------------max--------*/<br />        wypelnienie = (unsigned int) okres * 0,05;<br />        OCR1B = wypelnienie;                             /* &lt;-------------------------------------porownanie---------*/ <br />}<br /> <br />//*********** KONIEC PRZERWANIE TIMER   ***********<br />GeSHi[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 22 sie 2016, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-22T20:47:37+01:00</updated>
<published>2016-08-22T20:47:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166810#p166810</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166810#p166810"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166810#p166810"><![CDATA[
Dzięki za odpowiedzi, ale niestety to jeszcze nie to :p<br />Przy tej i przy poprzedniej wersji programu tylko pierwszy takt jest ok (pierwszy po włączeniu), potem dioda już się odzywa.<br />Nie mam pojęcia gdzie może tkwić problem, wydaje się że wszystko powinno ładnie śmigać :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 22 sie 2016, o 20:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-22T20:33:46+01:00</updated>
<published>2016-08-22T20:33:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166807#p166807</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166807#p166807"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166807#p166807"><![CDATA[
Tak sobie myślę,<br />Kurcze, czegoś w takim razie nie wiem, skoro nie działa.<br />Szukam i nie mogę na nic konkretnego natrafić. Problemem może być zapis ICR. w chwili przepełnienia(ICR jest 16_bit , zapis bez buforowania,&quot;w trybie 15 z buforowaniem&quot; NIE BARDZO TO JESZCE ROZUMIEM). Chodzi o aktualizacje rejestru ICR, który składa się z dwóch rejestrow 8-bit i są zapisywane szeregowo. <br />Ale spróbuj zamiast aktualizować w przerwaniu od przepełnienia, może w przerwaniu od porównania. czyli zanim licznik zliczy do MAX.<br />[syntax=c]TIMSK |= (1&lt;&lt;OCIE1A); /*zezwolenie*/<br /><br />ISR(TIMER1_COMPA_vect){ <br /> <br />        ICR1 = okres;<br />        wypelnienie = (unsigned int) okres * 0,05;<br />        OCR1A = wypelnienie;<br />}[/syntax]<br />może to coś pomoże.<br />A może już ktoś wie jak to ogarnąć.?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 22 sie 2016, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-22T14:45:10+01:00</updated>
<published>2016-08-22T14:45:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166788#p166788</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166788#p166788"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166788#p166788"><![CDATA[
Cześć, w końcu złapałem trochę czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Przemyślałem to i w exelu wyliczyłem nowe wartości które wpisuje do ICR1 (okres) liczę z niego 5 % i jest to moje OCR1A (wypełnienie). Tylko nie wiem gdzie umieścić wpisywanie nowych wartości do ICR1 i OCR1A, bo gdzie nie próbuje to nie działa to dobrze. Jakieś przerwanie od PWM (o ile jest) i po każdym przepełnieniu wpisanie wyliczonych wartości?<br /><br />Dorzucam kod z przerwaniem:<br /><br />[syntax=c]//***********    BIBLIOTEKI    ***********<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;hd44780.h&quot;<br /><br />//*********** KONIEC BIBLIOTEKI***********<br /><br /><br /><br />//***********    ZMIENNE    ***********<br /><br />volatile unsigned int enkoder=120, mnoznik = 1000, x=1, okres, wypelnienie;<br />unsigned int tim, preskaler=256;<br />char enkoder1&#91;6&#93;, mnoznik1&#91;5&#93;;<br />float czestotliwosc;<br /><br />char cal1&#91;10&#93;,tim1&#91;6&#93;;<br /><br />//*********** KONIEC ZMIENNE ***********<br /><br /><br /><br />//***********    FUNKCJA PRZELICZ   ***********<br /><br />void przelicz(){<br /><br />czestotliwosc=(float)enkoder/60;  // obliczanie czestotliwości<br />tim=(float)(16000000/(preskaler*czestotliwosc))-1; // obliczenie tykniec procesora<br />okres = (unsigned int) tim; // rzutowanie<br /><br />}<br /><br />//*********** KONIEC FUNKCJI PRZELICZ ***********<br /><br /><br /><br /><br />//***********  MAIN  ***********<br /><br />int main(void){<br /><br />PORTD |= (1&lt;&lt;PD2) | (1&lt;&lt;PD3) | (1&lt;&lt;PD4); // Piny do przycisku i enkodera<br />DDRB |= (1&lt;&lt;PB1); // LED na OC1A<br />GICR |= (1&lt;&lt;INT0) | (1&lt;&lt;INT1);  // zezwolenie na przerwania od przycisków<br />MCUCR |=  (1&lt;&lt;ISC00) | (1&lt;&lt;ISC11) | (1&lt;&lt;ISC10); // ustawienie reakcji na zbocza<br />TCCR1A|= (1&lt;&lt;WGM11) | (1&lt;&lt;COM1A1); //TRYB 14 PWM i ustawienie porownania<br />TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;WGM13) | (1&lt;&lt;WGM12);  // preskaler 256 i trym 14 PWM<br />TIMSK |= (1&lt;&lt;TOIE1);<br /><br />lcd_init();// wyswietlacz<br />LCD_DISPLAY(LCDDISPLAY);<br /><br />LCD_LOCATE(1,0);          // Start<br />lcd_puts(&quot;Start&quot;);<br />_delay_ms(1000);<br /><br />LCD_LOCATE(0,0);<br />lcd_puts(&quot;enk:&quot;);<br />utoa(enkoder, enkoder1, 10);<br />LCD_LOCATE(4,0);<br />lcd_puts(enkoder1);<br /><br />LCD_LOCATE(11,0);<br />lcd_puts(&quot;m&quot;);<br />itoa(mnoznik, mnoznik1, 10);<br />LCD_LOCATE(12,0);<br />lcd_puts(mnoznik1);<br /><br />sei();  // włączenie przerwań<br /><br />//***********   PETLA GLOWNA    ***********<br />while(1){<br /><br />przelicz(); // wywołanie funkcji<br /><br />utoa(enkoder, enkoder1, 10);  // lcd<br />LCD_LOCATE(4,0);<br />lcd_puts(enkoder1);<br />lcd_puts(&quot; &quot;);<br /><br />itoa(mnoznik, mnoznik1, 10);  // lcd<br />LCD_LOCATE(12,0);<br />lcd_puts(mnoznik1);<br />lcd_puts(&quot;   &quot;);<br /><br />//-------------------------------------------------<br /><br />dtostrf(tim,6,0,tim1);  //chilowe pomocniecze dane na LCD<br />LCD_LOCATE(0,1);<br />lcd_puts(tim1);<br />lcd_puts(&quot;   &quot;);<br /><br />dtostrf(czestotliwosc,6,3,cal1);  //chilowe pomocniecze dane na LCD<br />LCD_LOCATE(8,1);<br />lcd_puts(cal1);<br />lcd_puts(&quot;   &quot;);<br /><br />//------------------------------------------------------<br /><br />}<br /><br />//*********** KONIEC PETLI GLOWNEJ ***********<br /><br />}<br /><br />//*********** KONIEC MAIN ***********<br /><br /><br />//***********    PRZRWANIE 1   ***********<br /><br />ISR ( INT0_vect ){   // przerwanie i obsługa enkodera<br /><br />if (mnoznik == 1)   // ustawianie mnożnika<br />x=1;<br />if (mnoznik == 10)<br />x=10;<br />if (mnoznik == 100)<br />x=100;<br />if (mnoznik == 1000)<br />x=1000;<br /><br /><br />    static uint8_t dir;<br /><br />    if( ! (PIND &amp;  (1&lt;&lt;PD2) ) ){  // obsługa enkodera<br />    dir = (PIND &amp; (1&lt;&lt;PD4));<br />    } else {<br />   if (dir != (PIND &amp; (1&lt;&lt;PD4) ) ){<br />    if (dir) enkoder = enkoder + x;<br />    else enkoder = enkoder - x;<br />  }<br />    }<br />if(enkoder &lt; 120) enkoder=120;       // ustawianie zakresu obrotów<br />if(enkoder &gt; 60000) enkoder = 120;<br />if(enkoder &gt; 42000) enkoder = 42000;<br /><br />if(enkoder &lt;= 2000){        // ustawinia preskalerów od obrotów<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCCR1B = (1&lt;&lt;CS12); //256<br />preskaler = 256;<br />}<br />if(enkoder &gt; 2000 &amp;&amp; enkoder &lt;= 7500){<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCCR1B = (1&lt;&lt;CS11) | (1&lt;&lt;CS10); //64<br />preskaler = 64;<br />}<br />if(enkoder &gt; 7500 &amp;&amp; enkoder &lt;= 15000){<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCCR1B = (1&lt;&lt;CS11); //8<br />preskaler = 8;<br />}<br />if(enkoder &gt; 15000){<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCCR1B = (1&lt;&lt;CS10); //1<br />preskaler = 1;<br />}<br /><br />}<br /><br />//*********** KONIEC PRZERWANIE 1  ***********<br /><br /><br /><br />//***********     PRZERWANIE 2  ***********<br /><br />ISR ( INT1_vect ){  // przerwanie od przycisku<br /><br />mnoznik= mnoznik * 10; // ustawianie mnożnika<br />if (mnoznik == 10000){<br />mnoznik=1;<br />}<br />}<br /><br />//*********** KONIEC PRZERWANIE 2***********<br /><br /><br /><br />//***********     PRZERWANIE TIMER  ***********<br /><br />ISR(TIMER1_OVF_vect){<br /><br />ICR1 = okres;<br />wypelnienie = (unsigned int) okres * 0,05;<br />OCR1A = wypelnienie;<br />}<br /><br />//*********** KONIEC PRZERWANIE TIMER   ***********[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 22 sie 2016, o 14:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-20T12:22:00+01:00</updated>
<published>2016-08-20T12:22:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166598#p166598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166598#p166598"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166598#p166598"><![CDATA[
Powinieneś, tak myślę, Pomyśleć nad ustawieniami :<br />[syntax=c]TCCR1A |= (1 &lt;&lt; COM1A1); /*dla Fast PWM -  Clear OC1A on Compare Match (Set output to low level)*/<br /><br />TCCR1A |= (1 &lt;&lt; WGM11); /*Mode-14,  WGM13, WGM12, WGM11  Fast PWM  TOP-ICR1  */<br />TCCR1B |= (1 &lt;&lt; WGM12) | (WGM13);/*cd*/<br /><br />OCR1A = 100;/*długosc blysku*/[/syntax]<br />preskaler jest wspólny więc zostaje.<br />wyjście na LED przejdzie na PB1 -(OC1A)PWM.<br />wartość max licznika to ICR1, ( PB1 - w stan wysoki)<br />wartośc do porównania licznika z rejestrem, w OCR1A. (zmiana stanu PB1 na niski.)<br /><br />Może jakoś tędy droga. ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 20 sie 2016, o 12:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-20T06:43:07+01:00</updated>
<published>2016-08-20T06:43:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166586#p166586</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166586#p166586"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166586#p166586"><![CDATA[
atmega 8 (zewnętrznie taktowana 16MHz)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 20 sie 2016, o 06:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-19T22:10:20+01:00</updated>
<published>2016-08-19T22:10:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166578#p166578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166578#p166578"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166578#p166578"><![CDATA[
na którym to uc ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 19 sie 2016, o 22:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-19T21:50:56+01:00</updated>
<published>2016-08-19T21:50:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166577#p166577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166577#p166577"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166577#p166577"><![CDATA[
Właśnie ten delay mi się strasznie nie podoba. Też tak mi się wydaje, że PWM będzie lepszym rozwiązaniem, próbowałem to zrobić tylko mi coś nie idzie. Dlatego piszę żeby ktoś mnie nakierował jak się za to zabrać ;p<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 19 sie 2016, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-19T21:31:53+01:00</updated>
<published>2016-08-19T21:31:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166573#p166573</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166573#p166573"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166573#p166573"><![CDATA[
cześć,<br />powiem szczerze że średnio mi się podoba to wstrzymywanie procesora w przerwaniu na 500us, przy Twoim kwarcu chyba 16MHz to wstrzymujesz &quot;uc&quot; na 8000 tyknięć.<br />Chyba lepiej będzie ogarnąć to na PWM sprzętowym w timer1 i załączać PB0 czyli OC1A, w PWM'ie na określony przez OCR1A czas.<br />Chyba w tym kierunku bym podążał .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 19 sie 2016, o 21:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-19T18:10:13+01:00</updated>
<published>2016-08-19T18:10:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166554#p166554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166554#p166554"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166554#p166554"><![CDATA[
Została chyba ostatnia kwestia i program chyba będzie gotowy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ogólnie wyliczyłem w exelu, zakresy obrotów dla poszczególnych ustawień preskalerów, tak aby każdej wartości obrotów odpowiadała jedna wartość TCNT1, jedynie dla niektórych przypadków wartość obrotów ma dwie wartości TCNT1 (z tego co mi się wydaje da to dość dobrą dokładność).<br /><br />To jest to co działa, ale chyba czas trwania błysku lepiej by było regulować wypełnieniem. Niestety nie mogę tego zrobić żeby było dobrze. Próbuje i próbuje i nie idzie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> także znowu proszę o pomoc lub wskazówki ;p<br /><br />KOD:<br />[syntax=c]//***********    BIBLIOTEKI    ***********<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;hd44780.h&quot;<br /><br />//*********** KONIEC BIBLIOTEKI***********<br /><br /><br /><br />//***********    ZMIENNE    ***********<br /><br />volatile unsigned int enkoder=120, mnoznik = 1000, x=1;<br />unsigned int tim, wynik, preskaler=256;<br />char enkoder1&#91;6&#93;, mnoznik1&#91;5&#93;;<br />float czestotliwosc;<br /><br />char cal1&#91;10&#93;,tim1&#91;6&#93;;<br /><br />//*********** KONIEC ZMIENNE ***********<br /><br /><br /><br />//***********    FUNKCJA PRZELICZ   ***********<br /><br />void przelicz(){<br /><br />czestotliwosc=(float)enkoder/60;  // obliczanie czestotliwości<br />tim=(float)65535-(16000000/preskaler/czestotliwosc); // obliczenie tykniec procesora<br />wynik = (unsigned int) tim; // rzutowanie<br /><br />}<br /><br />//*********** KONIEC FUNKCJI PRZELICZ ***********<br /><br /><br /><br /><br />//***********  MAIN  ***********<br /><br />int main(void){<br /><br />PORTD |= (1&lt;&lt;PD2) | (1&lt;&lt;PD3) | (1&lt;&lt;PD4); // Piny do przycisku i enkodera<br />DDRB |= (1&lt;&lt;PB0); // LED<br />GICR |= (1&lt;&lt;INT0) | (1&lt;&lt;INT1);  // zezwolenie na przerwania od przycisków<br />MCUCR |=  (1&lt;&lt;ISC00) | (1&lt;&lt;ISC11) | (1&lt;&lt;ISC10); // ustawienie reakcji na zbocza<br />TCCR1B |= (1&lt;&lt;CS12);  // preskaler 256<br />TIMSK |= (1&lt;&lt;OCIE1A);  // zezwolenie na przerwanie od przepełnienia<br /><br />lcd_init();// wyswietlacz<br />LCD_DISPLAY(LCDDISPLAY);<br /><br />LCD_LOCATE(1,0);          // Start<br />lcd_puts(&quot;Start&quot;);<br />_delay_ms(1000);<br /><br />LCD_LOCATE(0,0);<br />lcd_puts(&quot;enk:&quot;);<br />utoa(enkoder, enkoder1, 10);<br />LCD_LOCATE(4,0);<br />lcd_puts(enkoder1);<br /><br />LCD_LOCATE(11,0);<br />lcd_puts(&quot;m&quot;);<br />itoa(mnoznik, mnoznik1, 10);<br />LCD_LOCATE(12,0);<br />lcd_puts(mnoznik1);<br /><br />sei();  // włączenie przerwań<br /><br />//***********   PETLA GLOWNA    ***********<br />while(1){<br /><br />przelicz(); // wywołanie funkcji<br /><br />utoa(enkoder, enkoder1, 10);  // lcd<br />LCD_LOCATE(4,0);<br />lcd_puts(enkoder1);<br />lcd_puts(&quot; &quot;);<br /><br />itoa(mnoznik, mnoznik1, 10);  // lcd<br />LCD_LOCATE(12,0);<br />lcd_puts(mnoznik1);<br />lcd_puts(&quot;   &quot;);<br /><br />}<br /><br />//*********** KONIEC PETLI GLOWNEJ ***********<br /><br />}<br /><br />//*********** KONIEC MAIN ***********<br /><br /><br />//***********    PRZRWANIE 1   ***********<br /><br />ISR ( INT0_vect ){   // przerwanie i obsługa enkodera<br /><br />if (mnoznik == 1)   // ustawianie mnożnika <br />x=1;<br />if (mnoznik == 10)<br />x=10;<br />if (mnoznik == 100)<br />x=100;<br />if (mnoznik == 1000)<br />x=1000;<br /><br /><br />    static uint8_t dir; <br /><br />    if( ! (PIND &amp;  (1&lt;&lt;PD2) ) ){  // obsługa enkodera<br />    dir = (PIND &amp; (1&lt;&lt;PD4));<br />    } else {<br />   if (dir != (PIND &amp; (1&lt;&lt;PD4) ) ){<br />    if (dir) enkoder = enkoder + x;<br />    else enkoder = enkoder - x;<br />  }<br />    }<br />if(enkoder &lt; 120) enkoder=120;       // ustawianie zakresu obrotów<br />if(enkoder &gt; 60000) enkoder = 120;<br />if(enkoder &gt; 40000) enkoder = 40000;<br /><br />if(enkoder &lt;= 1500){        // ustawinia preskalera od obrotów<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCNT1 = wynik;<br />TCCR1B = (1&lt;&lt;CS12); //256<br />preskaler = 256;<br />}<br />if(enkoder &gt; 1500 &amp;&amp; enkoder &lt;= 4000){<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCNT1 = wynik;<br />TCCR1B = (1&lt;&lt;CS11) | (1&lt;&lt;CS10); //64<br />preskaler = 64;<br />}<br />if(enkoder &gt; 4000 &amp;&amp; enkoder &lt;= 14560){<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCNT1 = wynik;<br />TCCR1B = (1&lt;&lt;CS11); //8<br />preskaler = 8;<br />}<br />if(enkoder &gt; 14560){<br />TCCR1B &amp;= ~( (1&lt;&lt;CS12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10) );<br />TCNT1 = wynik;<br />TCCR1B = (1&lt;&lt;CS10); //1<br />preskaler = 1;<br />}<br />}<br /><br />//*********** KONIEC PRZERWANIE 1  ***********<br /><br /><br /><br />//***********     PRZERWANIE 2  ***********<br /><br />ISR ( INT1_vect ){  // przerwanie od przycisku <br /><br />mnoznik= mnoznik * 10; // ustawianie mnożnika<br />if (mnoznik == 10000){<br />mnoznik=1;<br />}<br />}<br /><br />//*********** KONIEC PRZERWANIE 2***********<br /><br /><br />//***********  PRZERWANIE TIMER     ***********<br /><br />ISR(TIMER1_COMPA_vect){  //przerwanie od timera 1<br /><br />TCNT1 = wynik;<br />PORTB = ~ PORTB;<br />_delay_us(500);<br />PORTB = ~ PORTB;<br />}<br /><br />//*********** KONIEC PRZERWANIE TIMER  ***********[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 19 sie 2016, o 18:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-19T09:09:14+01:00</updated>
<published>2016-08-19T09:09:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166526#p166526</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166526#p166526"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166526#p166526"><![CDATA[
Witam,<br />Kolego &quot;budapreniak&quot;, jeżeli dobrze zrozumiałem,<br />to próbujesz wyzerować bity w rejestrze tym wpisem (0&lt;&lt;CS12).<br />jeżeli zrobisz tak przykładowo<br />zmienna = 0b11111111;<br />po czym wpiszesz: zmienna |= (0&lt;&lt;2); to nie spodziewaj się że otrzymasz wyzerowanie 11111011 niestety pozostanie 11111111.<br />operator | sprawdzi czy w określonym przez ciebie przesunięciu jest choćby jedna jedynka, i w zmiennej i w przesunięciu . Po czym we wskazane przesunięciem miejsce wstawi 1 .<br />Do zerowania bitów stosuje się zapis np:<br />zmienna &amp;=~(1&lt;&lt;2); co zmieni zmienną 1111 1111 na 1111 1011.<br />albo<br />zmienna &amp;=~(3&lt;&lt;2); zmienną 1111 1111 na 1111 0011 - przesunięta wartość 3 (0000 0011), o dwa miejsca w lewo (0000 1100).<br />pozdrawiam Darek<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 17 minutach ]</span></strong><br /><br />przeczytałem jeszcze raz wątek, chyba dubluję - to już było tłumaczone. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 39 minutach ]</span></strong><br /><br />A.. co tam - dokończę.<br />Potem zadziała nasza matylda  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  było 0000 1100 teraz jest  11110011<br />a operator &amp; porówna naszą krwawą maskę ze zmienną 1111 1111<br />i tam gdzie się powtarzają jedynki pozostanie 1, a tam gdzie nie wstawi 0.  i wyjdzie z tego 11110011.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 19 sie 2016, o 09:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-08-19T08:19:46+01:00</updated>
<published>2016-08-19T08:19:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166524#p166524</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166524#p166524"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166524#p166524"><![CDATA[
<div class="quotetitle">budapreniak napisał(a):</div><div class="quotecontent"><br />witam, <br /><br />Czy można w jakiś sposób zmieniać preskaler podczas działania programu?<br /></div><br /><br /><span style="color: #FF0000">Przede WSZYSTKIM NIGDY tak nie rób, nie kasuj własnych postów z pytaniem bo robi się BAJZEL że aż strach. Kto później będzie wiedział o co chodziło ? A nie jesteś przecież nową osobą na forum. Liczę że był to pierwszy i ostatni taki przypadek.</span><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">budapreniak napisał(a):</div><div class="quotecontent"><br />Czyli zawsze unikać ,,(0&lt;&lt;CS12)&quot;? Czy można użyć ich gdy ustawiam timery przy włączeniu programu lub po maskowaniu (łatwiej później edytować ustawienia timerów)?<br /></div><br />Łatwiej edytować? Sorki ... ale później przez to można tak sobie namieszać że błędu będziesz szukał nie godzinami a dniami albo tygodniami.Już pokazałem że ten zapis jest po prostu nielogiczny. Wprawdzie on nie psuje działania ale później zauważyć gdzieś zera .... to masakra<br /><br /><div class="quotetitle">budapreniak napisał(a):</div><div class="quotecontent"><br />Czy taki wpis tylko wydłuża czas trwania programu? Różnica pewnie nie zauważalna, ale gdy program musi być bardzo szybki to może to generować niepotrzebne opóźnienia?<br /></div><br />Tu nie chodzi o czas działania programu bo co to ma za znaczenie często - ale już o zajętość niepotrzebną pamięci Flash procka ? - to chyba wiesz jakie to ważne<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 sie 2016, o 08:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[budapreniak]]></name></author>
<updated>2016-08-19T08:02:31+01:00</updated>
<published>2016-08-19T08:02:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166523#p166523</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166523#p166523"/>
<title type="html"><![CDATA[Re: Preskaler]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16020&amp;p=166523#p166523"><![CDATA[
Dziękuję, dużo mi to wyjaśniło. Dodatkowo obejrzałem krwawy poradnik <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Czyli zawsze unikać ,,(0&lt;&lt;CS12)&quot;? Czy można użyć ich gdy ustawiam timery przy włączeniu programu lub po maskowaniu (łatwiej później edytować ustawienia timerów)?<br />Czy taki wpis tylko wydłuża czas trwania programu? Różnica pewnie nie zauważalna, ale gdy program musi być bardzo szybki to może to generować niepotrzebne opóźnienia?<br /><br />Mam jeszcze jedno pytanko, a nie będę zakładał nowego tematu. Mam przerwanie generowane na timerze 1 od przepełnienia. TCNT1 jest obliczane i wpisywane w przerwaniu. W przerwaniu również muszę zapalić diodę np. z wypełnieniem 1/16 lub ze stałym czasem np. 1ms. Wydaje mi się że PWM byłby odpowiedni, albo timerem 0 odmierzać czas 1ms (tylko czy nie będzie problemów że timer będzie coś odliczał w przerwaniu w którym miga dioda).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7742">budapreniak</a> — 19 sie 2016, o 08:02</p><hr />
]]></content>
</entry>
</feed>