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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-12-11T21:19:03+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1819&amp;mode</id>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-11T21:19:03+01:00</updated>
<published>2012-12-11T21:19:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20854#p20854</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20854#p20854"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20854#p20854"><![CDATA[
W końcu udało się, wszystko działa tak jak powinno. Dziękuję wszystkim (w szczególności koledze Antystatyczny) za pomoc.<br /><br />Program steruję diodą RGB (wspólna anoda) (przyciski 1,2,3 każdy to inny kolor). Wszystko oparte jest na przerwaniach od ICP.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define MAX_BIT 2220<br />#define MIN_BIT 1340<br />#define MAX_HALF_BIT 1130<br />#define MIN_HALF_BIT 640 <br /><br />volatile uint8_t a;<br />volatile uint8_t n;// Numer zmiennej w tablicy<br />volatile uint8_t koniec;<br />volatile uint16_t ostatnia_wartosc;<br />volatile uint16_t szerokosc_impulsu;<br />volatile uint8_t licznikz; <br /><br />volatile int ramka[13]; <br /><br />int main(void)<br />{<br /><br />/* Wszystkie linie PB będą wejściami */<br />DDRB=0;<br />/* Linia PB0 w stanie wysokim, podciągnięcie do Vvc */<br />PORTB=1;<br />/* Wszystkie linie PC będą wyjściami*/<br />DDRC=255;<br />/* Wszystkie linie PC będą w stanie niskim */<br />PORTC=255;<br /><br />_delay_ms(1000); // Ustabilizowanie układu po włączeniu<br /><br />a=0;<br />n=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B |= (1&lt;&lt;CS10); // Timer 1, preskaler 1<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1); // Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br />sei();//Globalna obsługa przerwań<br /><br />while(1)<br />{<br />if(n&gt;12)<br /><br />{<br />if(ramka[7]==0 &amp;&amp; ramka[8]==0 &amp;&amp; ramka[9]==0 &amp;&amp; ramka[10]==0 &amp;&amp; ramka[11]==0 &amp;&amp; ramka[12]==1) PORTC=254;<br />if(ramka[7]==0 &amp;&amp; ramka[8]==0 &amp;&amp; ramka[9]==0 &amp;&amp; ramka[10]==0 &amp;&amp; ramka[11]==1 &amp;&amp; ramka[12]==0) PORTC=253;<br />if(ramka[7]==0 &amp;&amp; ramka[8]==0 &amp;&amp; ramka[9]==0 &amp;&amp; ramka[10]==0 &amp;&amp; ramka[11]==1 &amp;&amp; ramka[12]==1) PORTC=251;<br />if(ramka[7]==0 &amp;&amp; ramka[8]==0 &amp;&amp; ramka[9]==1 &amp;&amp; ramka[10]==1 &amp;&amp; ramka[11]==0 &amp;&amp; ramka[12]==0) PORTC=255; // Wyłączenie diody<br /><br />TIMSK &amp;= ~(1&lt;&lt;TICIE1); // Nieaktywne przerwania od ICP<br />TCCR1B=0;  // Wyłączenie Timera 1 (Preskaler = 0), brak reakcji na zbocza<br /><br />for(n=0; n&lt;=12; n++)<br />{ramka[n]=0;}<br /><br />a=0;<br />n=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;   // Ustawienie warunków początkowych<br />licznikz=0;<br />koniec=0;<br /><br /><br />_delay_ms(30);<br /><br />TCCR1B |= (1&lt;&lt;CS10);// Timer1 preskaler 1<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br /><br />if(koniec==1)<br />{<br /><br />TIMSK &amp;= ~(1&lt;&lt;TICIE1); // Nieaktywne przerwania od ICP<br />TCCR1B=0; // Wyłączenie Timera 1 (preskaler = 0), brak reakcji na zbocza<br /><br />for(n=0; n&lt;=12; n++)<br />{ramka[n]=0;}<br /><br /><br />n=0;<br />a=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;  //Ustawienie warunków początkowych, po błędzie ramki<br />licznikz=0;<br />koniec=0;<br /><br />_delay_ms(30);<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TCCR1B |= (1&lt;&lt;CS10);// Timer1 preskaler 1<br />TIMSK |= (1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br /><br />};<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect) <br />{<br /><br /><br /><br /><br />szerokosc_impulsu = ICR1 - ostatnia_wartosc; // Pomiar długosci impulsu<br />ostatnia_wartosc = ICR1; // Zapamietanie ostatniego punktu przerwania<br /><br />TCCR1B ^= (1&lt;&lt;ICES1); // Reakcja na przeciwne zbocze<br /><br /><br />if (szerokosc_impulsu&gt;MAX_BIT) licznikz=0;<br /><br />if (licznikz&gt;0) {a=1;}<br /><br />if (licznikz==0) {TCCR1B |= (1&lt;&lt;ICES1);  licznikz++;}<br /><br /><br />if (a==1) <br />{<br /><br />if(szerokosc_impulsu &gt; MAX_BIT) a=2;<br /><br />if(szerokosc_impulsu &lt; MIN_HALF_BIT) a=2;<br /><br />if(a==1)<br />{<br /><br /><br />if(szerokosc_impulsu&gt;MAX_HALF_BIT) licznikz++;<br /><br />if (licznikz&gt;1)<br />{<br /><br />if(licznikz%2==0)<br />{<br /><br /> <br />if (TCCR1B &amp; (1&lt;&lt;ICES1))<br />{<br /><br /><br />ramka[n]=1;<br /><br />}<br />n++;<br /><br />}<br />}<br />licznikz++;<br /><br />}<br /><br />if (a==2)<br />{<br />koniec=1;<br />}<br /><br /><br />}<br /><br />}<br /><br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 11 gru 2012, o 21:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-10T18:20:40+01:00</updated>
<published>2012-12-10T17:23:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20755#p20755</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20755#p20755"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20755#p20755"><![CDATA[
Częstotliwość mojej atmegi to 1MHz. Niby wszystko się zgadza.<br /><br />Aby wykryć, czy przypadkiem nie łapie mi śmieci, zrobiłem tak, że jak tylko program wejdzie do procedury obsługi przerwania to zapala mi jedną diodę. Po podłączeniu (czekam w programie głównym 1s na ustabilizowanie układu) do zasilania to prędzej czy później ta dioda się zapala. Układ sam się wzbudza. Jutro zakupię nowy odbiornik i zobaczę czy coś się zmieni. Dodam że odbiornik jest podłączony wg schematu z książki (bez dodatkowego rezystora podciągającego 10kOhm)<br /><br />[syntax=c]ISR(TIMER1_CAPT_vect) <br />{<br /><br />TCCR1B ^= (1&lt;&lt;ICES1); // Reakcja na przeciwne zbocze<br />PORTC |= (1&lt;&lt;PC2);<br /><br />szerokosc_impulsu=ICR1-ostatnia_wartosc; // Pomiar długosci impulsu<br />ostatnia_wartosc=ICR1; // Zapamietanie ostatniego punktu przerwania<br /><br /><br /><br />if (licznikz&gt;0) {a=1;}<br /><br />if (licznikz==0) {licznikz++;}<br /><br /><br />if (a==1) <br />{<br /><br />if(szerokosc_impulsu&gt;MAX_BIT) // To się zawsze spełnia nie wiem dlaczego ???<br />{<br />a=2;<br />PORTC |= (1&lt;&lt;PC0);<br />}<br />if(szerokosc_impulsu&lt;MIN_HALF_BIT) <br />{<br />a=2;<br />PORTC |= (1&lt;&lt;PC1);<br />}[/syntax]<br /><br /><br /><span style="color: #80BF00">Nie, nic to nie dało ... dalej się wzbudza</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 10 gru 2012, o 17:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T17:42:41+01:00</updated>
<published>2012-12-09T17:42:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20672#p20672</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20672#p20672"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20672#p20672"><![CDATA[
Ok tak zrobię.<br /><br /><span style="color: #FF0000">Chyba że sam Pan Mirek rzuci okiem ...</span><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define MAX_BIT 2220<br />#define MIN_BIT 1340<br />#define MAX_HALF_BIT 1130<br />#define MIN_HALF_BIT 640 <br /><br />volatile uint8_t a;<br />volatile uint8_t n;<br />volatile uint8_t koniec;<br />volatile uint8_t ostatnia_wartosc;<br />volatile uint16_t szerokosc_impulsu;<br />volatile uint8_t licznikz; // Liczba zboczy<br /><br />uint8_t ramka[13]; <br /><br />int main(void)<br />{<br /><br /><br />/* Wszystkie linie PB będą wejściami */<br />DDRB=0;<br />/* Linia PB0 w stanie wysokim, podciągnięcie do Vvc */<br />PORTB=1;<br />/* Wszystkie linie PC będą wyjściami*/<br />DDRC=255;<br />/* Wszystkie linie PC będą w stanie niskim */<br />PORTC=0;<br /><br />_delay_ms(1000); // Ustabilizowanie układu po włączeniu<br /><br />a=0;<br />n=0; // Numer zmiennej w tablicy<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B |= (1&lt;&lt;CS10); // Timer 1, preskaler 1<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1); // Zbocze opadające powoduje wpis do rejestru ICR<br />licznikz = 0;<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br />sei();//Globalna obsługa przerwań<br /><br /><br /><br />while(1)<br />{<br />if(n&gt;=13)<br />{<br />PORTC=((1*ramka[13]) + (2*ramka[12]) + (4*ramka[11]) + (8*ramka[10]) + (16*ramka[9]) + (32*ramka[8])) ;<br /><br /><br />TIMSK &amp;= ~(1&lt;&lt;TICIE1); // Nieaktywne przerwania od ICP<br />TCCR1B=0; // Zerowanie rejestru<br />_delay_ms(30);<br /><br />a=0;<br />n=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;   // Ustawienie warunków początkowych<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br /><br />if(koniec==1)<br />{<br />TIMSK &amp;= ~(1&lt;&lt;TICIE1); // Nieaktywne przerwania od ICP<br />TCCR1B=0; // Zerowanie rejestru<br />_delay_ms(30);<br /><br />a=0;<br />n=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;  //Ustawienie warunków początkowych, po błędzie ramki<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br />};<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect) <br />{<br /><br /><br /><br />szerokosc_impulsu=ICR1 - ostatnia_wartosc; // Pomiar długosci impulsu<br />ostatnia_wartosc=ICR1; // Zapamietanie ostatniego punktu przerwania<br /><br /><br /><br />TCCR1B ^= (1&lt;&lt;ICES1); // Reakcja na przeciwne zbocze<br /><br />if (licznikz&gt;0) a=1;<br /><br />if (licznikz==0) licznikz++;<br /><br /><br />if (a==1) <br />{<br /><br />if(szerokosc_impulsu&gt;50300) // To się zawsze spełnia nie wiem dlaczego ???<br />{<br />a=2; PORTC |= (1&lt;&lt;PC0);<br />}<br />if(szerokosc_impulsu&lt;MIN_HALF_BIT) <br />{<br />a=2; PORTC |= (1&lt;&lt;PC1);<br />}<br /><br />if(a==1)<br />{<br /><br /><br />if(szerokosc_impulsu&gt;MAX_HALF_BIT) licznikz++;<br />if(licznikz%2==0)<br />{<br /><br /><br />if((TCCR1B &amp; (1&lt;&lt;ICES1)))<br />{<br />ramka[n]=1;<br />n++;<br />}<br />}<br />licznikz++;<br />}<br /><br />if (a==2)<br />{<br /><br />koniec=1;<br />}<br /><br /><br />}<br />}<br />[/syntax]<br /><br />Pozdrawiam, dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 17:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T17:26:17+01:00</updated>
<published>2012-12-09T17:04:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20670#p20670</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20670#p20670"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20670#p20670"><![CDATA[
Bez zamykania nawiasów nie kompiluję się. Sprawdziłem inny pilot też 38kHz (Panasonic) tam też nie ma takich szerokich impulsów i jest to samo.<br /><br /><br />Zmieniłem kod, na 1 stronie też i nic. To chyba musi być jakiś problem sprzętowy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 17:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T16:26:57+01:00</updated>
<published>2012-12-09T16:26:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20666#p20666</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20666#p20666"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20666#p20666"><![CDATA[
Zmieniłem kod według zaleceń. (Poprawiony wstawiony jest na 1 stronie - nie zmieniłem deklaracji zmiennych żeby nie przesuwać numeru linii ). Dla próby zmodyfikowałem linie 118 i 119 żeby sprawdzić czy dobrze mierzony jest czas i okazuję się, że nie. Szerokość impulsu wychodzi dużo za duża ... <br /><br />(Wszystko zrealizowane jest na płytce prototypowej, zasilanie z usb nie wiem czy to może mieć wpływ, pilot rc5 philips)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 16:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ajek]]></name></author>
<updated>2012-12-09T12:20:32+01:00</updated>
<published>2012-12-09T12:20:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20639#p20639</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20639#p20639"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20639#p20639"><![CDATA[
hehe, racja. Już jednym okiem przysypiałem widać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Oczywiście 0b101 i 0b111. Mój błąd, na szczęście Sun czuwa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Kolego, wszędzie przed moimi czterobitowcami 0b wpakować, ale idea ta sama.<br /><br />0b, zapis binarny<br />0x, zapis szesnastkowy<br />zwykła liczba, zapis dziesiętny<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=354">ajek</a> — 9 gru 2012, o 12:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ajek]]></name></author>
<updated>2012-12-09T02:00:41+01:00</updated>
<published>2012-12-09T02:00:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20620#p20620</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20620#p20620"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20620#p20620"><![CDATA[
Dobrze myślisz, ale pewnie źle to w słowa ubrałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Bo na porcie c nic nie ustawiasz, tylko port c traktujesz iloczynem z zaprzeczonej wystawionej jedynki na PC3 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Na przykładzie:<br />PORTC= 1010<br />i robimy:<br />PORTC &amp;= ~(1&lt;&lt;3)<br />to rozbiję na podstawowe funkcje tak jakby:<br />PORTC = 1010 &amp; (~1000);<br />czyli:<br />PORTC = 1010 &amp; 0111;<br />a to nam w efekcie daje:<br />PORTC = 0010.<br /><br />Mam nadzieję, że w miarę zrozumiale <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />Widzisz Antystatyczny, taki ze mnie cwaniak nocny marek <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=354">ajek</a> — 9 gru 2012, o 02:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T02:06:33+01:00</updated>
<published>2012-12-09T01:51:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20619#p20619</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20619#p20619"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20619#p20619"><![CDATA[
Natomiast samo zerowanie zrobisz tak: PORTC &amp;= ~(1&lt;&lt;PC3) rzeczywiscie<br /><br />Czyli tak jakby ustawiam na PORTC wszędzie jedynki, później ten bit który chce wyzerować ustawiam na 1 i wszystko traktuje iloczynem<br /><br />Dziękuję Panowie (<span style="color: #0000FF">Antystatyczny</span> i <span style="color: #8000FF">ajek</span> ) za wasze poświecenie. Jutro sprawdzę czy to pomoże mojemu układowi - będę się jeszcze odzywał.<br /><br />Podoba mi się to że nie przedstawiacie gotowych odpowiedzi tylko pomagacie w nauce. SUPER !<br /><br /><br />PS.(ajek) tak, tak o tym myślałem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 01:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ajek]]></name></author>
<updated>2012-12-09T01:44:13+01:00</updated>
<published>2012-12-09T01:36:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20617#p20617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20617#p20617"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20617#p20617"><![CDATA[
Było dobrze, to popsułeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />a |= (1&lt;&lt;3) to jest a=a|00000100 Jest źle<br />a |= (1&lt;&lt;3) to jest a=a|00001000 Jest dobrze<br /><br />Numerologię bitów zaczynamy zawsze od zera.<br /><br /><br />PORTC ^= (1&lt;&lt;PC3) zrobi wartość tego bitu przeciwną do aktualnej. Tj. jak masz 1 to zrobi 0, a gdy masz 0 zrobi 1.<br /><br />Natomiast samo zerowanie zrobisz tak: PORTC &amp;= ~(1&lt;&lt;PC3)<br /><br />I przeczytaj <a href="http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html"  class="postlink">ten wpis</a> na blogu pewnego erudyty. Mirek poświęca swój czas i udostępnia za darmo swą wiedzę, to nic tylko korzystać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Choć to nie to samo co na papierze <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=354">ajek</a> — 9 gru 2012, o 01:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T01:43:44+01:00</updated>
<published>2012-12-09T01:22:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20616#p20616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20616#p20616"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20616#p20616"><![CDATA[
Ok rozumiem. Tylko proszę o potwierdzenie mojego przykładu <br /><br />a|= (1&lt;&lt;3) to jest a=a|00000100<br /><br />czyli a|= (1&lt;&lt;3)|(1&lt;&lt;5) to jest a=a|00010100<br /><br />gdy mam jedynkę  załóżmy  na bicie PC3 i chce zmieniać za każdym przerwaniem  to robię tak ?<br /><br />PORTC ^=(1&lt;&lt;PC3) czy to działa ?<br /><br />Jak jest 1 i dam jeden to zmieni na zero, a jak mam zero to będzie 1?<br /><br />A teraz jak chce wyzerować  bit PC4 (00010001) to działam tak ?<br />00010001 &amp; 11101111 wiec najpierw muszę cały port ustawić jedynkami, później zmienić PC4 na zero i zrobić iloczyn ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 01:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T00:54:49+01:00</updated>
<published>2012-12-09T00:54:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20614#p20614</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20614#p20614"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20614#p20614"><![CDATA[
TCCR1B |= (0&lt;&lt;ICES1);           // Zbocze opadające powoduje wpis do rejestru ICR tutaj wydaje mi się ze jest wszystko ok 0+0=0<br /><br />Weźmy to linie 38. Na starcie wszystkie linie tego portu maja 0, ja chce aby linia ICES1 dalej była zerem wiec 0+0=0 tak to działa ?<br /><br />Jeszcze takie pytanie:<br /><br />a|=(1&lt;&lt;5) to jest a= a  |00010000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 00:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-09T17:24:27+01:00</updated>
<published>2012-12-09T00:38:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20612#p20612</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20612#p20612"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20612#p20612"><![CDATA[
[syntax=c]<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define MAX_BIT 2220<br />#define MIN_BIT 1340<br />#define MAX_HALF_BIT 1130<br />#define MIN_HALF_BIT 640 <br /><br />volatile uint8_t a;<br />volatile uint8_t n;<br />volatile uint8_t koniec;<br />volatile uint8_t ostatnia_wartosc;<br />volatile uint16_t szerokosc_impulsu;<br />volatile uint8_t licznikz; // Liczba zboczy<br /><br />uint8_t ramka[13]; <br /><br />int main(void)<br />{<br /><br /><br />/* Wszystkie linie PB będą wejściami */<br />DDRB=0;<br />/* Linia PB0 w stanie wysokim, podciągnięcie do Vvc */<br />PORTB=1;<br />/* Wszystkie linie PC będą wyjściami*/<br />DDRC=255;<br />/* Wszystkie linie PC będą w stanie niskim */<br />PORTC=0;<br /><br />_delay_ms(1000); // Ustabilizowanie układu po włączeniu<br /><br />a=0;<br />n=0; // Numer zmiennej w tablicy<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B |= (1&lt;&lt;CS10); // Timer 1, preskaler 1<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1); // Zbocze opadające powoduje wpis do rejestru ICR<br />licznikz = 0;<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br />sei();//Globalna obsługa przerwań<br /><br /><br /><br />while(1)<br />{<br />if(n&gt;=13)<br />{<br />PORTC=((1*ramka[13]) + (2*ramka[12]) + (4*ramka[11]) + (8*ramka[10]) + (16*ramka[9]) + (32*ramka[8])) ;<br /><br /><br />TIMSK &amp;= ~(1&lt;&lt;TICIE1); // Nieaktywne przerwania od ICP<br />TCCR1B=0; // Zerowanie rejestru<br />_delay_ms(30);<br /><br />a=0;<br />n=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;   // Ustawienie warunków początkowych<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br /><br />if(koniec==1)<br />{<br />TIMSK &amp;= ~(1&lt;&lt;TICIE1); // Nieaktywne przerwania od ICP<br />TCCR1B=0; // Zerowanie rejestru<br />_delay_ms(30);<br /><br />a=0;<br />n=0;<br />ostatnia_wartosc=0;<br />szerokosc_impulsu=0;  //Ustawienie warunków początkowych, po błędzie ramki<br />licznikz=0;<br />koniec=0;<br /><br /><br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br />};<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect) <br />{<br /><br /><br /><br />szerokosc_impulsu=ICR1 - ostatnia_wartosc; // Pomiar długosci impulsu<br />ostatnia_wartosc=ICR1; // Zapamietanie ostatniego punktu przerwania<br /><br /><br /><br />TCCR1B ^= (1&lt;&lt;ICES1); // Reakcja na przeciwne zbocze<br /><br />if (licznikz&gt;0) a=1;<br /><br />if (licznikz==0) licznikz++;<br /><br /><br />if (a==1) <br />{<br /><br />if(szerokosc_impulsu&gt;50300) <br />{<br />a=2; PORTC |= (1&lt;&lt;PC0);<br />}<br />if(szerokosc_impulsu&lt;MIN_HALF_BIT) <br />{<br />a=2; PORTC |= (1&lt;&lt;PC1);<br />}<br /><br />if(a==1)<br />{<br /><br /><br />if(szerokosc_impulsu&gt;MAX_HALF_BIT) licznikz++;<br />if(licznikz%2==0)<br />{<br /><br /><br />if((TCCR1B &amp; (1&lt;&lt;ICES1)))<br />{<br />ramka[n]=1;<br />n++;<br />}<br />}<br />licznikz++;<br />}<br /><br />if (a==2)<br />{<br /><br />koniec=1;<br />}<br /><br /><br />}<br />}<br /><br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 9 gru 2012, o 00:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-08T22:29:38+01:00</updated>
<published>2012-12-08T22:29:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20605#p20605</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20605#p20605"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20605#p20605"><![CDATA[
Zmieniłem wiersze 57 , 76<br /><br />I w 105 zmieniłem to tak, że mogłem usunąć tą zmienna &quot;e&quot; nad którą się zastanawialiśmy.<br />Niestety w dalszym ciągu nie rusza.<br /><br />Gdzieś na początku musi być błąd po wstawieniu <span style="color: #FF0000">PORTC=1;</span> (dla próby) dioda się nie zapala.<br /><br />if (a==1) <br />{<br /><br />if(szerokosc_impulsu&gt;MAX_BIT) a=2; <br />if(szerokosc_impulsu&lt;MIN_HALF_BIT) a=2;<br /><br />if(a==1)<br />{<br /><span style="color: #FF0000">PORTC=1;</span><br />if(szerokosc_impulsu&gt;MAX_HALF_BIT) licznikz++;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 8 gru 2012, o 22:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-08T20:00:56+01:00</updated>
<published>2012-12-08T20:00:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20585#p20585</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20585#p20585"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20585#p20585"><![CDATA[
Dziękuję za wskazówki, zaraz biorę się do poprawek i dam znać o efektach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 8 gru 2012, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-08T18:40:00+01:00</updated>
<published>2012-12-08T18:40:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20580#p20580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20580#p20580"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20580#p20580"><![CDATA[
Poprawione <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=717">Bartek_98k</a> — 8 gru 2012, o 18:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ajek]]></name></author>
<updated>2012-12-08T18:27:34+01:00</updated>
<published>2012-12-08T18:27:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20576#p20576</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20576#p20576"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20576#p20576"><![CDATA[
I kolego Bartek_98k wklej ten swój kod w znacznikach syntex c, a nie code, bo zaraz przyjdzie Sun i tu zrobi czystki <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=354">ajek</a> — 8 gru 2012, o 18:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-12-08T18:12:28+01:00</updated>
<published>2012-12-08T18:12:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20572#p20572</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20572#p20572"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20572#p20572"><![CDATA[
Na początek kilka wskazówek<br />1.Nigdy w kodzie nie definiuj częstotliwości procesora!!! Ale to nigdy!<br />2. Zrób wcięcia w kodzie będzie on bardziej przejrzysty. Wtedy szybciej znajdziemy twojego babola <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=288">Janadamis</a> — 8 gru 2012, o 18:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2012-12-08T18:12:16+01:00</updated>
<published>2012-12-08T18:12:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20571#p20571</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20571#p20571"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20571#p20571"><![CDATA[
Piszesz, że kod oparty jest o książkę, to dlaczego nie korzystasz z gotowej eleganckiej biblioteki, która jest na płytce? Tam obsługa jest napisana w bardzo fajny sposób, łatwo i przyjemnie analizuje się jej kod. Tak przy okazji<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define F_CPU 1000000L</div><br />Nie rób tak, definiuj to w ustawieniach projektu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 8 gru 2012, o 18:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek_98k]]></name></author>
<updated>2012-12-08T22:20:19+01:00</updated>
<published>2012-12-08T17:44:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20567#p20567</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20567#p20567"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=20567#p20567"><![CDATA[
Dołączam się do wątku kolegi, gdyż mój problem również dotyczy dekodowania rc5. Kod program oparty jest na tym przedstawionym w książce Pana Mirosława. Dekodowanie oparte na ICP (Przechwytywanie zdarzeń zewnętrznych i nadawanie im markera czasowego). Zamiast przesunięć bitowych, odbierane wartości zapisuję w tablicy. Samemu strasznie trudno jest mi znaleźć błąd. Jeśli koledzy w wolnym czasie skłonni byliby rzucić okiem to byłbym bardzo wdzięczny.  Z moich spostrzeżeń  wynika, iż jest coś nie tak z mierzeniem długości impulsu.<br /><br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define MAX_BIT 2220<br />#define MIN_BIT 1340<br />#define MAX_HALF_BIT 1130<br />#define MIN_HALF_BIT 640 <br /><br />volatile unsigned char a;<br />volatile unsigned char n;<br />volatile unsigned char koniec;<br />volatile unsigned char ostatnia_wartosc;<br />volatile unsigned int szerokosc_impulsu;<br />volatile unsigned char licznikz; // Liczba zboczy<br /><br />volatile unsigned int ramka[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; <br /><br />int main(void)<br />{<br /><br /><br />/* Wszystkie linie PB będą wejściami */<br />DDRB=0;<br />/* Linia PB0 w stanie wysokim, podciągnięcie do VVc */<br />PORTB=1;<br />/* Wszystkie linie PC będą wyjściami*/<br />DDRC=255;<br />/* Wszystkie linie PC będą w stanie niskim */<br />PORTC=0;<br /><br />_delay_ms(500); // Ustabilizowanie układu po włączeniu<br /><br /><br />   n=0; // Numer zmiennej w tablicy<br />   ostatnia_wartosc=0;<br />   szerokosc_impulsu=0;<br />   licznikz=0;<br />   koniec=0;<br /><br /><br />TCCR1B |= (1&lt;&lt;CS10); // Timer 1, preskaler 1<br />TCCR1B |= (0&lt;&lt;ICES1); // Zbocze opadające powoduje wpis do rejestru ICR<br />licznikz = 0;<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br />sei();//Globalna obsługa przerwań<br /><br /><br /><br />while(1)<br />{<br />if(n&gt;=13)<br />{<br /><br />PORTC=((1*ramka[13]) + (2*ramka[12]) + (4*ramka[11]) + (8*ramka[10]) + (16*ramka[9]) + (32*ramka[8])) ;   // 6 bitów<br /><br />TIMSK &amp;=(0&lt;&lt;TICIE1);// nieaktywne przerwania od ICP<br />TCCR1B=0; // Zerowanie rejestru<br />_delay_ms(25);<br /><br />   n=0;<br />   ostatnia_wartosc=0;<br />   szerokosc_impulsu=0;   // Ustawienie warunków początkowych<br />   licznikz=0;<br />   koniec=0;<br />  <br /><br />TCCR1B |= (0&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br /><br />if(koniec==1)<br />{<br />TIMSK &amp;=(0&lt;&lt;TICIE1);// nieAktywne przerwania od ICP<br />TCCR1B=0; // Zerowanie rejestru<br />_delay_ms(25);<br /><br />   n=0;<br />   ostatnia_wartosc=0;<br />   szerokosc_impulsu=0;  //Ustawienie warunków początkowych, po błędzie ramki<br />   licznikz=0;<br />   koniec=0;<br />   e=0;<br /><br />TCCR1B |= (0&lt;&lt;ICES1);// Zbocze opadające powoduje wpis do rejestru ICR<br />TIMSK |=(1&lt;&lt;TICIE1); // Aktywne przerwania od ICP<br /><br /><br />}<br />};<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect) <br />{<br /><br /><br />szerokosc_impulsu=ICR1-ostatnia_wartosc; // Pomiar długosci impulsu<br />ostatnia_wartosc=ICR1; // Zapamietanie ostatniego punktu przerwania<br /><br /><br /><br />TCCR1B ^= (1&lt;&lt;ICES1);// Reakcja na przeciwne zbocze<br /><br />if (licznikz&gt;0) a=1;<br /><br />if (licznikz==0) licznikz++;<br /><br /><br />if (a==1) <br />{<br /><br />if(szerokosc_impulsu&gt;MAX_BIT) a=2; <br />if(szerokosc_impulsu&lt;MIN_HALF_BIT) a=2;<br /><br />if(a==1)<br />{<br /><br />if(szerokosc_impulsu&gt;MAX_HALF_BIT) licznikz++;<br /><br /><br />if(licznikz%2==0)<br />{<br /><br /><br />if((TCCR1B &amp; (1&lt;&lt;ICES1)))<br />{<br />ramka[n]=1;<br />n++;<br />}<br />}<br /><br />licznikz++;<br />}<br />if (a==2)<br />{<br /><br />koniec=1;<br />}<br />}<br />}<br /><br /><br /><br />[/syntax]<br /><br />Chciałem wszystko napisać samemu od początku - chyba przerost ambicji. Dodam, że programuje procesor atmega8, a do 6 portów rejestru C podłączone są diody.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=717">Bartek_98k</a> — 8 gru 2012, o 17:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Piotrek121]]></name></author>
<updated>2012-11-29T21:27:28+01:00</updated>
<published>2012-11-29T21:27:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19771#p19771</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19771#p19771"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19771#p19771"><![CDATA[
Dziękuje bardzo za pomoc, wszystko juz działa jak powinno, a co do książki to jak będę miał trochę gotówki to będę musiał podjechać po cześć drugą<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=270">Piotrek121</a> — 29 lis 2012, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-29T21:05:27+01:00</updated>
<published>2012-11-29T21:05:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19769#p19769</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19769#p19769"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19769#p19769"><![CDATA[
Ło Matko ! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> z córką - no nie działa bo wstawiłeś to<br /><br />[syntax=c]                        if(toggle_bit == bit){<br />                                if(toggle_bit == 1)     bit = 0;<br />                                else bit=1;<br /><br />                               }[/syntax]<br /><br />wywal to (tzn tego IF'a a to co jest wewnątrz niego zostaw) czym prędzej i wszystko zacznie ci działać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a jak chcesz w bardzo zaawansowany hmm ale też bardzo bardzo praktyczny i przydatny sposób korzystać z ogromnych zalet bitu TOGGLE to zapraszam serdecznie do pierwszego rozdziału mojej drugiej książki, który jest dość obszerny - i tam dopiero się dzieje jeśli chodzi o te zagadnienia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> mnóstwo fajnych rzeczy a nawet więcej, bo okazuje się, że dla takich standardów jak Sony, JVC, Samsung i innych które normalnie nie mają czegoś takiego jak TOGGLE bit - ja wprowadzam VIRTUAL TOGGLE BIT <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... bo aż tak bardzo jest to przydatne<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/jezyk-c-pasja-programowania.html" >http://atnel.pl/jezyk-c-pasja-programowania.html</a><!-- m --><br /><br />w pierwszej książce masz po prostu taką hmmm rzekłbym dydaktyczną wersję obsługi RC5 a w drugiej książce to już &quot;jazda bez trzymanki&quot; i pełne biblioteki, takie które ja osobiście wykorzystuję w swoich projektach komercyjnych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 lis 2012, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2012-11-29T21:07:27+01:00</updated>
<published>2012-11-29T21:04:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19768#p19768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19768#p19768"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19768#p19768"><![CDATA[
Przeanalizuj sobie istotny fragment który napisałeś<br />[syntax=cpp]  if(Ir_key_press_flag) { /* jeśli odebrano prawidłowe kody z pilota */<br /><br />                        if(toggle_bit == bit){<br /><br />                                if(toggle_bit == 1)     bit = 0;<br /><br />                                else bit=1;<br /><br />                        /* wyzerowanie flagi odbioru oraz wartości odebranych kodów */<br /><br />                        Ir_key_press_flag=0;<br /><br />                        command = 0;<br /><br />                        address = 0;<br /><br />                        }<br /><br />                }[/syntax]<br /><br />wykonasz pętle, odbierzesz kod, przestawisz zmienną bit. I w tym momencie warunek<br />[syntax=cpp] if(toggle_bit == bit)[/syntax]<br />nie będzie spełniony, a co za tym idzie:<br />[syntax=cpp]Ir_key_press_flag=0;<br />command = 0;<br /> address = 0;[/syntax]<br />nie zostaną wykonane te instrukcje. Idąc dalej, patrząc do biblioteki IR jest tam kod:<br />[syntax=cpp]if (Ir_key_press_flag == 0) {<br />command = IrData &amp; 0b0000000000111111;<br />address = (IrData &amp; 0b0000011111000000) &gt;&gt; 6;<br />toggle_bit = (IrData &amp; 0b0000100000000000) &gt;&gt; 11;<br />}[/syntax]<br />Czyli nowe dane nie zostaną wpisane do interesujących cie zmiennych. A w rezultacie toggle_bit będzie wciąż ten sam, czyli różny od twojej tymczasowej zmiennej bit i wracamy na początek mojego postu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ten kod powinien ci pomóc (pomigałem nawiasy, teraz bedzie ok)<br />[syntax=cpp]if(Ir_key_press_flag){<br />if(toggle_bit!=bit) {<br />                                  }<br />bit = toggle_bit;<br />Ir_key_press_flag=0;<br />command=0xff;<br />address=0xff;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 29 lis 2012, o 21:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Piotrek121]]></name></author>
<updated>2012-11-29T20:47:00+01:00</updated>
<published>2012-11-29T20:47:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19762#p19762</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19762#p19762"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19762#p19762"><![CDATA[
No właśnie tak myślałem, i zrobiłem programik, ale nie wiem gdzie jest problem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> pierwsza dane odbiera a kolejnej już nie<br /><br />[syntax=c]<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;util/delay.h&gt;<br /><br />#include &quot;IR_DECODE/ir_decode.h&quot;<br /><br /><br />int main(void) {<br /><br />volatile uint8_t czas = 100;<br />volatile uint8_t bit = 0;<br /><br />ir_init();/* inicjalizacja dekodowania IR */<br /><br />sei();/* włączamy globalne przerwania */<br /><br />DDRB |= (1&lt;&lt;PB2);<br />DDRB |= (1&lt;&lt;PB3);<br />DDRB |= (1&lt;&lt;PB4);<br /><br />PORTB |= (1&lt;&lt;PB2);<br />PORTB |= (1&lt;&lt;PB3);<br />PORTB |= (1&lt;&lt;PB4);<br /><br />void zerowanie(){<br />PORTB |= (1&lt;&lt;PB2);<br />PORTB |= (1&lt;&lt;PB3);<br />PORTB |= (1&lt;&lt;PB4);<br />}<br /><br />while(1) {<br /><br />if(Ir_key_press_flag) {/* jeśli odebrano prawidłowe kody z pilota */<br /><br />if(toggle_bit == bit){<br />if(toggle_bit == 1)bit = 0;<br />else bit=1;<br /><br />//if((command == 32) || (command == 33) || (command == 16) || (command == 17) || (command == 12) || (command == 43))<br /><br />if( command == 32 ) {  //+L<br /><br />PORTB |= (1&lt;&lt;PB2);<br />PORTB |= (1&lt;&lt;PB3);<br />PORTB &amp;= ~(1&lt;&lt;PB4);<br />_delay_ms(czas);<br />zerowanie();<br />}<br /><br />if( command == 33) {  //-L<br /><br />PORTB |= (1&lt;&lt;PB2);<br />PORTB &amp;= ~(1&lt;&lt;PB3);<br />PORTB |= (1&lt;&lt;PB4);<br />_delay_ms(czas);<br />zerowanie();<br /><br />}<br /><br />if( command == 16) {  //+P<br /><br />PORTB |= (1&lt;&lt;PB2);<br />PORTB &amp;= ~(1&lt;&lt;PB3);<br />PORTB &amp;= ~(1&lt;&lt;PB4);<br />_delay_ms(czas);<br />zerowanie();<br /><br />}<br /><br />if( command == 17) {  //-P<br /><br />PORTB &amp;= ~(1&lt;&lt;PB2);<br />PORTB |= (1&lt;&lt;PB3);<br />PORTB |= (1&lt;&lt;PB4);<br />_delay_ms(czas);<br />zerowanie();<br /><br />}<br /><br />if( command == 12) {  //zerowanie<br /><br />PORTB &amp;= ~(1&lt;&lt;PB2);<br />PORTB |= (1&lt;&lt;PB3);<br />PORTB &amp;= ~(1&lt;&lt;PB4);<br />_delay_ms(czas);<br />zerowanie();<br /><br />}<br /><br />if (command == 43) { //edycja zegara<br /><br />PORTB &amp;= ~(1&lt;&lt;PB2);<br />PORTB &amp;= ~(1&lt;&lt;PB3);<br />PORTB |= (1&lt;&lt;PB4);<br />_delay_ms(czas);<br />zerowanie();<br /><br />}<br /><br /><br />/* wyzerowanie flagi odbioru oraz wartości odebranych kodów */<br />Ir_key_press_flag=0;<br />command = 0;<br />address = 0;<br />}<br />}<br /><br />}<br />}<br /><br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=270">Piotrek121</a> — 29 lis 2012, o 20:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[savian86]]></name></author>
<updated>2012-11-29T20:16:41+01:00</updated>
<published>2012-11-29T20:16:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19758#p19758</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19758#p19758"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19758#p19758"><![CDATA[
Bit toggle działa tak, że jak trzymasz wciśnięty przycisk to cały czas ma on taką samą wartość. Dopiero jak zwolnisz przycisk i wciśniesz go ponownie (dowolny przycisk) to zmieni się na wartość przeciwną, tak długo, aż znowu puścisz przycisk. Można to wykorzystać w taki sposób, że deklarujesz sobie jakąś zmienną pomocniczą i ładujesz do niej aktualny stan TOGGLE, a w następnym obiegu pętli porównujesz wartość TOGGLE z tą tymczasową. Jeśli są identyczne to jest dla ciebie informacja, że trzymasz przycisk.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=393">savian86</a> — 29 lis 2012, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Piotrek121]]></name></author>
<updated>2012-11-29T20:09:45+01:00</updated>
<published>2012-11-29T20:09:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19757#p19757</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19757#p19757"/>
<title type="html"><![CDATA[Re: Ponowne odbieranie IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1819&amp;p=19757#p19757"><![CDATA[
czyli przykładowo wciskam przycisk 1 na pilocie to przez cały czas gdy jest przyciśnięty ten przycisk toggle_bit = 0; a jak przycisnę przycisk 2 to toggle_bit = 1?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=270">Piotrek121</a> — 29 lis 2012, o 20:09</p><hr />
]]></content>
</entry>
</feed>