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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-03-21T23:29:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17888&amp;mode</id>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2017-03-21T23:29:21+01:00</updated>
<published>2017-03-21T23:29:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185316#p185316</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185316#p185316"/>
<title type="html"><![CDATA[Re: Pomoc z licznikami T0 i T1 oraz enkoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185316#p185316"><![CDATA[
Czyli wygląda na to że &quot;enkoder&quot; nie bywa mniejszy od 0.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br /><br /><div class="quotetitle">hwcn napisał(a):</div><div class="quotecontent"><br />EICRA |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00); //rising przerwanie na int0<br /></div><br />Narastające zbocze na int0 powoduje przerwanie - czyli w przerwaniu będzie zawsze stan wysoki na DDD2. .hmm..<br /><div class="quotetitle">hwcn napisał(a):</div><div class="quotecontent"><br />[syntax=c]ISR (INT0_vect)<br />{<br />        static uint8_t dir;<br /> <br />        if( !(PIND &amp; (1&lt;&lt;DDD2))) // czyli ta linijka nigdy się nie sprawdzi. (czy się mylę. ? )<br />                {<br />                dir = (PIND &amp; (1&lt;&lt;DDD3)); // jeżeli się nie mylę, to dir nigdy nie zapamięta wartości DDD3. (chyba )<br />                }<br />        else<br />                {<br />                        if( dir != (PIND &amp; (1&lt;&lt;DDD3))) <br />                                {<br />                                        if(dir) encoder++;<br />                                        else encoder--; // dir zawsze będzie ==0,  ? (czy mi się coś kićka już)<br />                                }<br />                }<br />    /* interrupt code here */<br />}[/syntax]<br /></div><br />Może warto przemyśleć.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> (albo ja nie jarzę zamysłu  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> ) hmm.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 21 mar 2017, o 23:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[hwcn]]></name></author>
<updated>2017-03-21T17:07:58+01:00</updated>
<published>2017-03-21T17:07:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185286#p185286</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185286#p185286"/>
<title type="html"><![CDATA[Re: Pomoc z licznikami T0 i T1 oraz enkoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185286#p185286"><![CDATA[
wiem wiem już się tego pozbyłem sam, aktualnie z każdą wersję kodu nawet bez tych funkcji, wartość rejestrów tylko można zwiększać więc moge sobie od 0 do 255 zmienić szerokość ale już w dół nie idzie.<br />[syntax=c]while (1)<br />    {<br />    if(encoder&gt;0 &amp;&amp; OCR0A&gt;0)//lewo<br />    {<br />    OCR0A--;<br />    encoder=0;<br />    }<br /><br />    if(encoder&lt;0 &amp;&amp; OCR0A&lt;255)//prawo<br />    {<br />    OCR0A++;<br />    encoder=0;<br />    }<br />    }[/syntax]<br />#edit najprostsza możliwa konfiguracja bez zbędnych ozdobników również nie działa.<br />#edit2 dziekuje za pomoc problem rożwiązany źle ustawiłem wywoływanie przerwania INT0 było na rising a powinno być any logical change<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15202">hwcn</a> — 21 mar 2017, o 17:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2017-03-21T16:52:31+01:00</updated>
<published>2017-03-21T16:52:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185282#p185282</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185282#p185282"/>
<title type="html"><![CDATA[Re: Pomoc z licznikami T0 i T1 oraz enkoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185282#p185282"><![CDATA[
  Nie bawiłem się jeszcze enkoderem <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> , ale wypatrzyłem jeszcze taką dziwną zależność.   <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <div class="quotetitle">hwcn napisał(a):</div><div class="quotecontent"><br />[syntax=c]if(encoder&gt;0)//lewo<br />                {<br />                        if(OCR0A==0) // &lt;--------- ↓<br />                        {<br />                                OCR0A=0; // &lt;--------- ?<br />                                encoder=0;<br />                        }<br />                        else<br />                        {<br />                                OCR0A=OCR0A-1;<br />                                encoder=0;<br />                        }<br />                }<br />            if(encoder&lt;0)//prawo<br />                {<br />                        if(OCR0A==255) // &lt;------ ↓<br />                        {<br />                                OCR0A=255; // &lt;------ ?<br />                                encoder=0;<br />                        }<br />                        else<br />                        {<br />                                OCR0A=OCR0A+1;<br />                                encoder=0;<br />                        }<br />                }[/syntax]<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 21 mar 2017, o 16:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[hwcn]]></name></author>
<updated>2017-03-21T14:07:26+01:00</updated>
<published>2017-03-21T14:07:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185270#p185270</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185270#p185270"/>
<title type="html"><![CDATA[Re: Pomoc z licznikami T0 i T1 oraz enkoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185270#p185270"><![CDATA[
Dziekuje za odpowiedź czy rozwiązaniem mogłoby być zerowanie zmiennej encoder przy każdym wywołaniu przerwania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15202">hwcn</a> — 21 mar 2017, o 14:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2017-03-21T00:16:47+01:00</updated>
<published>2017-03-21T00:16:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185252#p185252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185252#p185252"/>
<title type="html"><![CDATA[Re: Pomoc z licznikami T0 i T1 oraz enkoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=185252#p185252"><![CDATA[
Witam,<br />Widzę że od jakiegoś czasu nikt nie podpowiedział, to może ja podniosę temat.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><div class="quotetitle">hwcn napisał(a):</div><div class="quotecontent"><br />Czy mógłby ktoś rzucić okiem na kod i sprawdzić czy jestem na dobrej drodze bo niby działa ale nie zawsze<br /></div><br />Przejrzałem trochę i zastanawia mnie czy nie jest problemem zmienna encoder. ?<br />Jest wykorzystana w funkcjach,<br />ale co się stanie w trakcie jej wykonywania kiedy nastąpi przerwanie i ją zmieni, ?<br />i ze zmienioną wartością enkoder powróci do dalszego działania w funkcji. ?<br />Może to tu leży problem.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 21 mar 2017, o 00:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[hwcn]]></name></author>
<updated>2017-03-15T23:59:08+01:00</updated>
<published>2017-03-15T23:59:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=184873#p184873</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=184873#p184873"/>
<title type="html"><![CDATA[Pomoc z licznikami T0 i T1 oraz enkoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17888&amp;p=184873#p184873"><![CDATA[
Witam piszę prosty program do większego projektu funkcja mikrokontrolera ma się sprowadzać do generowania 4 sygnałów prostokątnych PWM o częstotliwości 1kHz.<br />Których szerokość zmienia się wybierając odpowiedni kanał przy pomocy przycisku i inkrementując lub dekrementując rejestry OCR liczników w zalezności od kierunku obrotu enkodera.<br />na liczniku T0, 8 bitowy zakres(256 róznych szerokości), natomiast na T1, 10 bitowy(1024 różne szerokości). Czy mógłby ktoś rzucić okiem na kod i sprawdzić czy jestem na dobrej drodze bo niby działa ale nie zawsze chwilowo mam możliwość sprawdzenia tego tylko na diodzie LED.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 9 lut 2017<br /> *      Author: Dejmian<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdbool.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define KEY_I_A (1&lt;&lt;DDC0)<br />#define KEY_I_B (1&lt;&lt;DDC1)<br />#define KEY_U_A (1&lt;&lt;DDC2)<br />#define KEY_U_B (1&lt;&lt;DDC3) //definicje pinów klawiszy<br /><br />#define LED_I_A (1&lt;&lt;DDB4)<br />#define LED_I_B (1&lt;&lt;DDB5)<br />#define LED_U_A (1&lt;&lt;DDC4)<br />#define LED_U_B (1&lt;&lt;DDC5) //definice pinow diod<br /><br />volatile int encoder = 0;<br /><br />void prad_kanal_a(void); //deklaracje funkcji obslugi kanalow<br />void prad_kanal_b(void);<br />void napiecie_kanal_a(void);<br />void napiecie_kanal_b(void);<br /><br />int main(void)<br />{<br />//IN_OUT PORTS<br />DDRC &amp;= ~(KEY_I_A | KEY_I_B | KEY_U_A | KEY_U_B); //piny C0,C1,C2,C3 jako wejscia przyciskow<br />DDRC |= LED_U_A | LED_U_B; //pin C4 i C5 jako diody napieciowe<br />DDRB |= LED_I_A | LED_I_B; //pin B4 i B5 jako diody pradowe<br /><br />DDRD &amp;= ~(1&lt;&lt;DDD2 | 1&lt;&lt;DDD3);// piny D2 i D3 jako wejscie do przerwania<br /><br />    PORTD |= (1 &lt;&lt; DDD2);<br />    PORTD |= (1 &lt;&lt; DDD3);<br /><br />DDRD |= (1 &lt;&lt; DDD5) | (1 &lt;&lt; DDD6);//piny PWM pradowych jako wyjscie 8 bit<br />DDRB |= (1 &lt;&lt; DDB1) | (1 &lt;&lt; DDB2);//piny PWM napieciowych jako wyjscie 16 bit<br />///////////////////////////////////<br />//EX_INT<br />EICRA |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00); //rising przerwanie na int0<br />EIMSK |=(1&lt;&lt;INT0); //int0enable<br />sei();<br />//END_EX_INT<br />////////////////////////////<br />//inicjalizacja fast PWM T0 - 8bit<br /> TCCR0A |= (1 &lt;&lt; COM0A1);// set PWM for 50% duty cycle<br /> TCCR0A |= (1 &lt;&lt; COM0B1);<br /> // set none-inverting mode<br /> TCCR0A |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00);<br /> // set fast PWM Mode<br /> TCCR0B |= (1 &lt;&lt; CS01);<br />//END INIT T0<br />//INIT T1<br /> /*<br /> TCCR1A |= (1 &lt;&lt; COM1A1);<br /> TCCR1A |= (1 &lt;&lt; COM1A0);<br /> TCCR1A |= (1 &lt;&lt; COM1B1);<br /> TCCR1A |= (1 &lt;&lt; COM1B0); //Set OC1A/OC1B on Compare Match, clear OC1A/OC1B at BOTTOM (inverting mode)<br /><br /> TCCR1A |= (1 &lt;&lt; WGM11);<br /> TCCR1A |= (1 &lt;&lt; WGM10);<br /> TCCR1B |= (1 &lt;&lt; CS11);<br /><br />*/<br /><br />//END INIT T1<br /><br /><br />    while (1)<br />    {<br />     if(!(PINC &amp; KEY_U_A))<br />        {<br />     _delay_ms(80); //czas drgania stykow<br />     if(!(PINC &amp; KEY_U_A))<br />     {<br />     PORTB &amp;= ~LED_U_B;<br />     PORTC &amp;= ~LED_I_A;<br />     PORTC &amp;= ~LED_I_B;//wygaszanie diod<br />     napiecie_kanal_a();<br />     }<br />        }<br /><br />     if(!(PINC &amp; KEY_U_B))<br />        {<br />      _delay_ms(80); //czas drgania stykow<br />         if(!(PINC &amp; KEY_U_B))<br />         {<br />         PORTB &amp;= ~LED_U_A;<br />         PORTC &amp;= ~LED_I_A;<br />         PORTC &amp;= ~LED_I_B;//wygaszanie diod<br />         napiecie_kanal_b();<br />         }<br />        }<br /><br />     if(!(PINC &amp; KEY_I_A))<br />        {<br />      _delay_ms(80);//czas drgania stykow<br />      if(!(PINC &amp; KEY_I_A))<br />      {<br />      PORTC &amp;= ~LED_I_B;<br />      PORTB &amp;= ~LED_U_A;<br />      PORTB &amp;= ~LED_U_B;//wygaszanie diod<br />      prad_kanal_a();<br />      }<br />        }<br /><br /><br />      if(!(PINC &amp; KEY_I_B))<br />        {<br />      _delay_ms(80);//czas drgania stykow<br />      if(!(PINC &amp; KEY_I_B))<br />      {<br />      PORTC &amp;= ~LED_I_A;<br />      PORTB &amp;= ~LED_U_A;<br />      PORTB &amp;= ~LED_U_B;//wygaszanie diod<br />      prad_kanal_b();<br />      }<br />        }<br /><br />    }<br />}<br /><br />ISR (INT0_vect)<br />{<br />static uint8_t dir;<br /><br />if( !(PIND &amp; (1&lt;&lt;DDD2)))<br />{<br />dir = (PIND &amp; (1&lt;&lt;DDD3));<br />}<br />else<br />{<br />if( dir != (PIND &amp; (1&lt;&lt;DDD3)))<br />{<br />if(dir) encoder++;<br />else encoder--;<br />}<br />}<br />    /* interrupt code here */<br />}<br />//funkcje obslugi kanałow<br />void napiecie_kanal_a(void)<br />{<br />PORTB |= LED_U_A;<br />while((PINC &amp; KEY_U_B)!=0 &amp;&amp; (PINC &amp; KEY_I_A)!=0  &amp;&amp; (PINC &amp; KEY_I_B)!=0)<br />{<br />if(encoder&gt;0)//lewo<br />{<br />if(OCR0A==0)<br />{<br />OCR0A=0;<br />encoder=0;<br />}<br />else<br />{<br />OCR0A=OCR0A-1;<br />encoder=0;<br />}<br /><br />}<br /><br />if(encoder&lt;0)//prawo<br />{<br />if(OCR0A==255)<br />{<br /><br />OCR0A=255;<br />encoder=0;<br />}<br />else<br />{<br />OCR0A=OCR0A+1;<br />encoder=0;<br />}<br /><br />}<br />}<br />}<br /><br />void napiecie_kanal_b(void)<br />{<br />PORTB |= LED_U_B;<br />while((PINC &amp; KEY_U_A)!=0 &amp;&amp; (PINC &amp; KEY_I_A)!=0  &amp;&amp; (PINC &amp; KEY_I_B)!=0)<br />{<br />if(encoder&gt;0)<br />{<br /><br />if(OCR0B==0)<br />{<br />OCR0B=0;<br />encoder=0;<br />}<br />else<br />{<br />OCR0B=OCR0B-1;<br />encoder=0;<br />}<br /><br />}<br />if(encoder&lt;0)<br />{<br />if(OCR0B==255)<br />{<br />OCR0B=255;<br />encoder=0;<br />}<br />else<br />{<br />OCR0B=OCR0B+1;<br />encoder=0;<br />}<br /><br /><br />}<br />}<br /><br />}<br /><br />void prad_kanal_a(void)<br />{<br />PORTC |= LED_I_A;<br />while((PINC &amp; KEY_U_A)!=0 &amp;&amp; (PINC &amp; KEY_U_B)!=0  &amp;&amp; (PINC &amp; KEY_I_B)!=0)<br />{<br />if(encoder&gt;0)<br />{<br /><br />encoder=0;<br />}<br />if(encoder&lt;0)<br />{<br /><br />encoder=0;<br />}<br />}<br />}<br /><br />void prad_kanal_b(void)<br />{<br />PORTC |= LED_I_B;<br />while((PINC &amp; KEY_U_A)!=0 &amp;&amp; (PINC &amp; KEY_U_B)!=0  &amp;&amp; (PINC &amp; KEY_I_A)!=0)<br />{<br />if(encoder&gt;0)<br />{<br /><br />encoder=0;<br />}<br />if(encoder&lt;0)<br />{<br /><br />encoder=0;<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15202">hwcn</a> — 15 mar 2017, o 23:59</p><hr />
]]></content>
</entry>
</feed>