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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-04-14T14:51:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=989&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-14T14:51:32+01:00</updated>
<published>2012-04-14T14:51:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5232#p5232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5232#p5232"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5232#p5232"><![CDATA[
<div class="quotetitle">infa08 napisał(a):</div><div class="quotecontent"><br />Czyli nieważne jakiego timera użyję ale ważne jest z jaką rozdzielczością chcę go użyć.<br /></div><br /><br />tak tylko że chodzi o rozdzielczość PWM'a a nie timera w tym wypadku - taka tylko już drobna uwaga.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 kwi 2012, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-14T14:23:54+01:00</updated>
<published>2012-04-14T14:23:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5229#p5229</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5229#p5229"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5229#p5229"><![CDATA[
Czyli nieważne jakiego timera użyję ale ważne jest z jaką rozdzielczością chcę go użyć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 14 kwi 2012, o 14:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-14T14:08:45+01:00</updated>
<published>2012-04-14T14:08:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5228#p5228</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5228#p5228"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5228#p5228"><![CDATA[
Tzn inaczej - timera to można użyć dowolnego ale jak pisałem w książce:<br /><br />- jeśli daną operację można wykonać za pomocą timera 8-bitowego i 16-bitowego : to zawsze wybierz 8-bitowy bo 16-bitowy jest cenniejszy z punktu widzenia programistycznego i zostaw go sobie na później <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />o to z tym chodzi<br /><br />natomiast w przypadku liczenia podziałów dla programowego PWM to właśnie zapominasz o ostatnim podziale przez rozdzielczość swojego PWM'a<br /><br />czyli przypominam:<br /><br />np F_CPU = 8MHz a odświeżanie ma być powiedzmy 150Hz i PWM 8-bitowy:<br /><br />F_CPU / preskaler / rozdzielczość_PWM / odswieżanie = OCR<br /><br />8MHz / 1 / 256 / 150  = 208 do rejestru OCR gdy timer odpalisz w trybie CTC<br /><br />a teraz np:<br /><br /><br />F_CPU = 20MHz a odświeżanie ma być powiedzmy 100Hz i PWM 9-bitowy:<br /><br />20MHz / 1 / 51200 / 100 = 3,9 ale można zaokrąglić do 4 to odświeżanie wyjdzie ( 20MHz/1/51200/4 = ok 97Hz)<br /><br />teraz jaśniej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 kwi 2012, o 14:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-14T13:44:27+01:00</updated>
<published>2012-04-14T13:44:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5227#p5227</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5227#p5227"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5227#p5227"><![CDATA[
Czyli jeżeli dobrze rozumiem to bardziej się opłaci użyć timera 8-bitowego bo można uzyskać większe odświeżanie a większa rozdzielczość PWM uzyskać za pomocą dania większego typu zmiennej licznik w przerwaniu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 14 kwi 2012, o 13:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-14T13:25:43+01:00</updated>
<published>2012-04-14T13:25:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5225#p5225</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5225#p5225"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5225#p5225"><![CDATA[
Po pierwsze to nie zrozumiałeś może do końca - a przecież przytoczyłeś prawidłowy cytat z książki, przeanalizuj sobie jak to jest z tym 8-bitowym PWM'em bo popełniasz duży błąd w rozważaniach i w ogóle niepotrzebnie sięgasz po ten timer 16-bitowy.<br /><br />pomyśl sobie co ci da to że przy F_CPU = 20MHz użyjesz timera1 i po przepełnieniu będziesz miał 305Hz ???<br /><br />z tą częstotliwością 305Hz to ty dopiero będziesz miał przerwanie w którym masz zamiar inkrementować liczniki programowych PWM'ów .... to jak sobie to wyobrażasz - przecież nawet jak byś chciał zrobić 8-bitowy to:<br /><br />305/8 = 38 !!!! i to jest dopiero odświeżanie !!!<br /><br />a ty przecież chcesz zrobić 16-bitowy więc:<br /><br />305/65536 = 0.0046Hz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> co to jest ? coś tam będzie sobie pomigiwać<br /><br />zacznij może od tyłu to będzie ci łatwiej - np ustalasz sobie że odświeżanie chcesz mieć powiedzmy 100Hz<br /><br />więc 100 * 65536 = 6553600Hz (6,5MHz !!!!!!) taka musi być częstotliwość timera !!! ale i przerwania - a to już tak mało czasu na wykonanie przerwania będzie, że samo przerwanie będzie absolutnie spowalniać ci działanie nie tylko programu głównego ale będziesz wręcz gubił przerwania jeśli w tej procedurze będziesz nawet proste i niewiele operacji wykonywał. Efektem tego będzie jedno wielkie nieporozumienie niestety<br /><br />zrób sobie 9- albo nawet 10-bitowy PWM programowy to ci jeszcze się uda żeby procek wydolił<br /><br />dla 9-bitowego:<br /><br />100 *  512 = 51200Hz (to i tak już bardzo krótki czas na przerwnia - policz sobie przerwanie musi się wykonać co ok 19us !!! no ale jeśli założyć że weźmiesz taktowanie 20MHz to jeden cykl/rozkaz wykona się w czasie 50ns - teraz zależy ile tych rozkazów będzie w przerwaniu - jeśli podzielisz:<br /><br />19us / 50ns - to wyjdzie ci że masz 380 cykli pomiędzy przerwaniami. Jeśli zużyjesz kodu na połowę tego to jeszcze będzie jakoś całość działać<br /><br />przy 10-bitowym będzie jeszcze gorzej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />100 * 1024 = 102400Hz ....<br /><br />czyli przerwanie co ok 9,7us !!!!!!!!!!!!!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 kwi 2012, o 13:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-14T11:50:54+01:00</updated>
<published>2012-04-14T11:50:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5222#p5222</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5222#p5222"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5222#p5222"><![CDATA[
Jeżeli dobrze rozumuję działanie timera to jest to taki licznik, który każdy nowy Hz uderzenia procesora inkremenduje jego wartość po czym jeżeli dojdzie do swojej maksymalnej wartości, w tym przypadku 65 536 rozpoczyna liczenie od nowa? <br />Czyli jeżeli mam taktowanie 20MHz bez preskalacji 20MHz/65 536 = ok. 305Hz? Tyle razy jest zliczane uint16_t przez procesor.<br /><br />W ostatnim akapicie ze strony 228 jest napisane: <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />&quot;Jeżeli nasz licznik zlicza z częstotliwością 40kHz, to jeśli utworzymy PWM 8-bitowy, częstotliwość tę trzeba podzielić przez 256[...]&quot;<br /></div><br /><br />Czyli w teorii mam odświeżanie ok 305Hz czyli oko powinno się poddać a reszta programu (wyświetlanie zmiennej na LCD) nie powinno spowalniać działania procesora a dzieje się odwrotnie: inkremendowanie zmiennej jest bardzo spowolnione(bez polecenia delay zachowuje się jakby to polecenie było z wartością ms(100) ) a o &quot;mruganiu&quot; diody nie wspomnę.<br /><br />Pomyślałem sobie, że jeżeli nie preskaluje automatycznie wykorzystuję 100% procesora to dodałem preskaler przez 8 (305/8=38Hz) niby 25Hz wystarczy ale preskalacja w ogóle nie zmieniła działania diody, owszem inkremendacja zmiennej przyspieszyła się ale to nie jest rozwiązaniem bo program ma działać w 100% a nie w 50%.<br /><br />Oto kod który wyskrobałem bazując na przykładzie z płyty<br />[syntax=c]//ustawienie TIMERA1<br />void PWM_inic(void)<br />{<br />TCCR1B |= (1&lt;&lt;WGM12);//tryb CTC<br />TCCR1B |= (1&lt;&lt;CS10);//bez preskalacji (F_cpu/1)<br />OCR1A = 8;//podzielenie (F_cpu)takotowania timera przez x<br />TIMSK1 |= (1&lt;&lt;OCIE1A);//zezwolenie na CompareMatch<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint16_t licznik;//zliczacz impulsów PWM (timera)<br />if(licznik &gt;= PWM_ch1) PWM_port_ch1 |= (1&lt;&lt;PWM_pin_ch1); else PWM_port_ch1 &amp;= ~(1&lt;&lt;PWM_pin_ch1);//ustawine długości impulsu kanału 1 PWM<br />if(licznik &gt;= PWM_ch2) PWM_port_ch2 |= (1&lt;&lt;PWM_pin_ch2); else PWM_port_ch2 &amp;= ~(1&lt;&lt;PWM_pin_ch2);<br /><br />licznik ++;<br />}[/syntax] <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;PWM TIMER1/pwm_timer1.h&quot;<br /><br />uint16_t i;<br />int main(void)<br />{<br />DDRC |= (1&lt;&lt;PWM_pin_ch1)|(1&lt;&lt;PWM_pin_ch2);<br />PORTC |= (1&lt;&lt;PWM_pin_ch1)|(1&lt;&lt;PWM_pin_ch2);<br /><br />lcd_init();<br />PWM_inic();<br />sei();<br /><br />while(1)<br />{<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_int(i);<br /><br />PWM_ch1=i;<br />PWM_ch2=i;<br /><br />i++;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 14 kwi 2012, o 11:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-13T23:10:53+01:00</updated>
<published>2012-04-13T23:10:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5205#p5205</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5205#p5205"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5205#p5205"><![CDATA[
Ale ja nie za bardzo widzę o co chodzi - musiałbym przynajmniej twój kod zobaczyć - inaczej nie umiem nic podpowiedzieć <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=54">mirekk36</a> — 13 kwi 2012, o 23:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-13T23:00:26+01:00</updated>
<published>2012-04-13T23:00:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5204#p5204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5204#p5204"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5204#p5204"><![CDATA[
Oczywiście mam pod PWM podpięte dwie diody<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 13 kwi 2012, o 23:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-13T22:59:12+01:00</updated>
<published>2012-04-13T22:59:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5203#p5203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5203#p5203"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5203#p5203"><![CDATA[
Jak już pisałem potrzebuję tego typu do PWM i wykonałem je na TIMER1 o dziwo działa jednak jak już pisałeś w książce PWM jeszcze bardziej dzieli Hz dlatego postanowiłem nie preskalować procesora. Rezultat jest taki, że owszem gdy wzrasta &quot;i&quot; długość impulsu jest dłuższa ale wartość odświeżania jest zbyt mała aby oszukać oko, a dodatkowe wyświetlanie tej zmiennej jeszcze bardziej zajmuje procesor. Pytanie więc brzmi: <strong>Jak temu zaradzić?</strong> Próbowałem zwiększać i zmniejszać rejestr OCR ale chociaż przyśpieszyło się wykonanie zadania to jednak nadal bez oszustwa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 13 kwi 2012, o 22:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-13T22:23:05+01:00</updated>
<published>2012-04-13T22:23:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5202#p5202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5202#p5202"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5202#p5202"><![CDATA[
Proponuję też zajrzeć na DVD do kodów z lekcji o ADC - tam jest z kolei przykład własnej procedurki konwertującej liczby na ASCII z jakimś prostym formatowaniem - warto popatrzeć jak to można robić we własnym zakresie bo też czasem może się przydać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 kwi 2012, o 22:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-13T22:19:44+01:00</updated>
<published>2012-04-13T22:19:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5201#p5201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5201#p5201"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5201#p5201"><![CDATA[
Dzięki za odpowiedź. Zmodyfikowałem konwersje na utoa i poszło teraz mogę kontynuować zabawę z PWM'em<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 13 kwi 2012, o 22:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-04-13T22:00:11+01:00</updated>
<published>2012-04-13T22:00:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5200#p5200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5200#p5200"/>
<title type="html"><![CDATA[Re: brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5200#p5200"><![CDATA[
Problem w niczym nie tkwi .... niestety co najwyżej kolega nie doczytał w książce na temat tworzenia funkcji lcd_int() <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Przecież tam wyraźnie masz napisane że posłużyłem się funkcją <strong><span style="color: #0040FF">ITOA()</span></strong> (jak nazwa nadrzędnej funkcji lcd_int) bo chciałem mieć i pokazać jak można zrobić konwersję liczb właśnie int (Integer z zakresu -32768 do 32767) ....<br /><br />Więc nic nie jest degradowane jak piszesz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... taki był zamiar i warto czytać jak się tworzy takie biblioteki w szczegółach a nie tylko z nich korzystać w ciemno .....<br /><br />Bo gdyby kolega zajrzał dalej do pliku PDF na własnym dysku z dokumentacją tych funkcji wbudowanych w C to szybko by znalazł odpowiedniki konwertujące do innych zakresów, np: <br /><br /><strong>LTOA()</strong> - tym razem Long Int To Ascii<br /><br />albo<br /><br /><strong>UTOA()</strong> - czy np Unsigned To Ascii<br /><br />wtedy można sobie albo przerobić lcd_ind() albo może lepiej dorobić np:<br /><br />l<strong>cd_lint()</strong><br /><br />albo<br /><br /><strong>lcd_uint()</strong><br /><br />co za problem hmmmm? <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> — 13 kwi 2012, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[infa08]]></name></author>
<updated>2012-04-13T21:47:16+01:00</updated>
<published>2012-04-13T21:47:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5199#p5199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5199#p5199"/>
<title type="html"><![CDATA[brak uint16_t ATMega664P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=989&amp;p=5199#p5199"><![CDATA[
Witam<br />Koncepcja PWM z 16 bitowym timer'em 1 nie dała mi spokoju i postanowiłem do niej wrócić. Jednak tym razem postanowiłem rozpocząć zabawę od wyświetlenia zmiennej <strong>uint16_t</strong> (od 0 do 64 535) i okazało się, że ujawniła mi się dosyć nie ciekawa sprawa. Aczkolwiek ostatnią zmienną, która jest generowana przez procesor to <strong>int16_t</strong> (od -32 768 do 32 767) i nie wiem dla czego każda zmienna powyżej int16_t jest degradowana do niej. Oczywiście nie jest ona wkomponowana jak narazie w żadną skomplikowaną procedurę bo wpisałem ją w &quot;czysty&quot; program.<br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />uint16_t i;<br />int main(void)<br />{<br />lcd_init();<br />sei();<br /><br />while(1)<br />{<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_int(i);<br /><br />i++;<br />_delay_ms(2);<br />}<br />}[/syntax]<br />Możecie mi powiedzieć w czym tkwi problem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=235">infa08</a> — 13 kwi 2012, o 21:47</p><hr />
]]></content>
</entry>
</feed>