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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-19T19:23:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=9322&amp;mode</id>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2014-11-19T19:23:19+01:00</updated>
<published>2014-11-19T19:23:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104977#p104977</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104977#p104977"/>
<title type="html"><![CDATA[Re: Enkoder na przerwaniach.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104977#p104977"><![CDATA[
Kręcone breloczkiem więc jakość słaba.<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 19 lis 2014, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2014-11-18T23:12:25+01:00</updated>
<published>2014-11-18T23:12:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104827#p104827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104827#p104827"/>
<title type="html"><![CDATA[Re: Enkoder na przerwaniach.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104827#p104827"><![CDATA[
Problem był w funkcji obsługi przerwania, dodałem zmienną pState i z jej pomocą rozwiązałem problem drgań styków.<br /><br />[syntax=c]void EXTI15_10_IRQHandler(void){<br />static volatile uint8_t state;<br />static volatile uint8_t pState;<br />counter ++;<br /><br />EXTI-&gt;PR = EXTI_PR_PR10 | EXTI_PR_PR11; //kasowanie flagi przerwania<br /><br />if(GPIOD-&gt;IDR &amp; GPIO_IDR_IDR_10){<br />if(GPIOD-&gt;IDR &amp; GPIO_IDR_IDR_11){<br />//st0 1:1<br />if(state == 1 &amp;&amp; pState !=0 &amp;&amp; val &lt; 59) val ++;<br />if(state == 3 &amp;&amp; pState !=0 &amp;&amp; val &gt; 0) val --;<br />if(state == 1 || state == 3) state = 0;<br /><br />}else{<br />//st1 1:0<br />pState = state;<br />if(state == 0 || state == 2) state = 1;<br />}<br />}else{<br />if(GPIOD-&gt;IDR &amp; GPIO_IDR_IDR_11){<br />//st3 0:1<br />pState = state;<br />if(state == 0 || state == 2)state = 3;<br />}else{<br />//st2 0:0<br />if(state == 3 &amp;&amp; pState !=2 &amp;&amp; val &lt; 59) val ++;<br />if(state == 1 &amp;&amp; pState !=2 &amp;&amp; val &gt; 0) val --;<br />if(state == 1 || state == 3) state = 2;<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 18 lis 2014, o 23:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kaka0204]]></name></author>
<updated>2014-11-18T22:51:09+01:00</updated>
<published>2014-11-18T22:51:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104818#p104818</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104818#p104818"/>
<title type="html"><![CDATA[Re: Enkoder na przerwaniach.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104818#p104818"><![CDATA[
Miałem taki sam problem, że zmienna byla z jednym skokiem enkodera zwiekszana nie o jeden a o np 3-6 wartosci. Rozwiazaniem jest rezystor 10k i kondensator 100nF podlaczone szeregowo. Rezystor idzie do plusa a kondensator do masy. Wspolne polaczenia podlaczasz do portow A i B enkodera.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=889">kaka0204</a> — 18 lis 2014, o 22:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2014-11-18T21:43:02+01:00</updated>
<published>2014-11-18T21:43:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104777#p104777</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104777#p104777"/>
<title type="html"><![CDATA[Enkoder na przerwaniach.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9322&amp;p=104777#p104777"><![CDATA[
Mam problem z ujarzmieniem enkodera. Taki sam w VHDL-u działał znośnie, na płytce Discovery robi problemy. Może po prostu jest bardzo niskiej jakości. Czasem działa dobrze a raz na jakiś czas jeden krok potrafi przeskoczyć o kilkadziesiąt i to nawet wstecz. Jak podładuję kamerkę wrzucę filmik.<br /><br />Na początku dwie zmienne, <br /><strong>val</strong> wartość ustawiana<br /><strong>counter</strong> kontrolna<br />[syntax=c]volatile uint32_t val;<br />volatile uint32_t counter;[/syntax]<br /><br /><br />Konfiguracja:<br />[syntax=c]// enkoder<br />/* PD9  - przycisk<br /> * PD10 - enkoder<br /> * PD11 - enkoder<br /> */<br /><br />RCC-&gt;APB2ENR |= RCC_APB2ENR_SYSCFGEN; //uruchomienie SYSCFG<br /><br />GPIOD-&gt;PUPDR |= GPIO_PUPDR_PUPDR9_0 | GPIO_PUPDR_PUPDR10_0 | GPIO_PUPDR_PUPDR11_0;<br />GPIOD-&gt;OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9_0 | GPIO_OSPEEDER_OSPEEDR10_0 | GPIO_OSPEEDER_OSPEEDR11_0;<br /><br />SYSCFG-&gt;EXTICR&#91;2&#93; |= SYSCFG_EXTICR3_EXTI9_PD;<br />SYSCFG-&gt;EXTICR&#91;2&#93; |= SYSCFG_EXTICR3_EXTI10_PD;<br />SYSCFG-&gt;EXTICR&#91;2&#93; |= SYSCFG_EXTICR3_EXTI11_PD;<br /><br />EXTI-&gt;IMR |= EXTI_IMR_MR9 | EXTI_IMR_MR10 | EXTI_IMR_MR11;<br />EXTI-&gt;FTSR |= EXTI_FTSR_TR9 | EXTI_FTSR_TR10 | EXTI_FTSR_TR11;<br />EXTI-&gt;RTSR |= EXTI_RTSR_TR9 | EXTI_RTSR_TR10 | EXTI_RTSR_TR11;<br /><br />__enable_irq();<br />NVIC_SetPriority(EXTI9_5_IRQn,1);<br />NVIC_SetPriority(EXTI15_10_IRQn,2);<br />NVIC_ClearPendingIRQ(EXTI9_5_IRQn);<br />NVIC_ClearPendingIRQ(EXTI15_10_IRQn);<br />NVIC_EnableIRQ(EXTI9_5_IRQn);<br />NVIC_EnableIRQ(EXTI15_10_IRQn);[/syntax]<br /><br /><br /><br />Obsługa przerwania:<br />[syntax=c]void EXTI15_10_IRQHandler(void){<br />static volatile uint8_t state;<br />counter ++;<br /><br />EXTI-&gt;PR = EXTI_PR_PR10 | EXTI_PR_PR11; //kasowanie flagi przerwania<br /><br />if(GPIOD-&gt;IDR &amp; GPIO_IDR_IDR_10){<br />if(GPIOD-&gt;IDR &amp; GPIO_IDR_IDR_11){<br />//st0 1:1<br />if(state == 1 &amp;&amp; val &lt; 59) val ++;<br />if(state == 3 &amp;&amp; val &gt; 0) val --;<br />if(state == 1 || state == 3) state = 0;<br /><br />}else{<br />//st1 1:0<br />if(state == 0 || state == 2) state = 1;<br />}<br />}else{<br />if(GPIOD-&gt;IDR &amp; GPIO_IDR_IDR_11){<br />//st3 0:1<br />if(state == 0 || state == 2)state = 3;<br />}else{<br />//st2 0:0<br />if(state == 3 &amp;&amp; val &lt; 59) val ++;<br />if(state == 1 &amp;&amp; val &gt; 0) val --;<br />if(state == 1 || state == 3) state = 2;<br />}<br />}<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 36 minutach ]</span></strong><br /><br />Znalazłem błąd, muszę przerobić funkcje obsługi przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 18 lis 2014, o 21:43</p><hr />
]]></content>
</entry>
</feed>