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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-24T00:57:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9811&amp;mode</id>
<entry>
<author><name><![CDATA[yeo1725]]></name></author>
<updated>2014-12-24T00:57:16+01:00</updated>
<published>2014-12-24T00:57:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110221#p110221</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110221#p110221"/>
<title type="html"><![CDATA[Re: PCINT i obsługa podczerwieni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110221#p110221"><![CDATA[
Czy coś takiego ma sens?<br /><br />Używam atmega88 smd 8mhz z wewnętrznego rezonatora.<br />Nóżka sygnału od czujnika podpięta jest pod PD6 (PCINT22).<br /><br />W momencie, gdy to wysłałem myślę jak sprawdzić, czy to działa. Spróbuję może zapisać adres do eepromu, a potem zapalić coś gdy taki adres otrzymam.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile int czas;<br />volatile uint8_t komenda;<br />volatile uint8_t adres;<br />volatile uint8_t toggle;<br /><br />int main(){<br /><br />PORTD |= (1&lt;&lt;PD6); //podciągnięcie ir do vcc<br /><br />PCICR |= (1&lt;&lt;PCIE2);  //PCINT 16-23<br />PCMSK2 |= (1&lt;&lt;PCINT22);<br /><br />//TIMER IR<br />TCCR0B |= (1&lt;&lt;CS01); //preskaler 8<br />TCNT0 = 255;<br />TIMSK0 |= (1&lt;&lt;TOIE0);<br /><br />sei();<br /><br />while(1){<br /><br />}<br />}<br /><br />ISR(TIMER0_OVF_vect){ //1us<br />TCNT0 = 255;<br />czas++;<br />}<br /><br />ISR(PCINT2_vect){<br /><br />static int t;<br />static uint8_t stan;<br />static int licznik = 0;<br />static uint16_t ramka;<br />static uint8_t bitow_odebranych = 0;<br /><br />t = czas;<br />czas = 0;<br /><br />if(t &gt;= 1978) licznik = 0;<br /><br />if(licznik &gt; 0) stan = 1;<br /><br />if(licznik == 0){<br />                bitow_odebranych = 0;<br />licznik++;<br />ramka = 0;<br />stan = 2;<br />}<br /><br />if(stan == 1){<br />if(t &lt; 689) stan = 0;<br />if(t &gt; 1978) stan = 0;<br /><br />if(stan == 1){<br />if(t &gt; 1089) licznik++;<br /><br />if( (licznik % 2) == 0 ){<br />if(licznik &gt;= 4){<br />if(PIND &amp; (1&lt;&lt;PD6)) ramka |= (1&lt;&lt;bitow_odebranych);<br />}<br />bitow_odebranych++;<br />}<br /><br />if(bitow_odebranych &gt; 12){<br />toggle = ramka &amp; 0b0000000000000001;<br />adres = (ramka &amp; 0b0000000000111110) &gt;&gt; 1;<br />komenda = (ramka &amp; 0b0000111111000000) &gt;&gt; 6;<br />stan = 0;<br />}<br /><br />licznik++;<br />}<br />}<br /><br />if(stan == 0) licznik = 0;<br /><br />}[/syntax]<br /><br />@edit w miejscu, gdzie rozszyfrowuję słowo ramka i wpisuję do zmiennych toggle, adres i komenda dałem sobie, ażeby zaświeciło mi diodę jednakże nic się nie zapala.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1792">yeo1725</a> — 24 gru 2014, o 00:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[deerjelen]]></name></author>
<updated>2014-12-23T21:12:05+01:00</updated>
<published>2014-12-23T21:12:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110185#p110185</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110185#p110185"/>
<title type="html"><![CDATA[Re: PCINT i obsługa podczerwieni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110185#p110185"><![CDATA[
<a href="http://forum.atnel.pl/_obrazki/o/1870/65e3d77d351debaf203f564a45cfe4a6.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1870/65e3d77d351debaf203f564a45cfe4a6.png" alt="Obrazek" /></a><br />Mamy dwie zmienne globalne:<br />temp = 1;<br />ilosc_zboczy_T1 = 0;    // ilość zboczy, między którymi czas wynosi T1;<br /><br />Na pierwszym zboczu (wg wykresu powinno być opadające):<br />-wpisujesz do temp = 1;<br />-wpisujesz do zmiennej ilosc_zboczy_T1 = 0;<br />-umieszczasz temp jako pierwszy bit danych; <br />-uruchamiasz timer;<br /><br />Na kolejnych zboczach sprawdzasz ile zliczył timer:<br />-Jeżeli zliczył około T1: <br />----ilosc_zboczy_T1 += 1;<br />----Jeżeli(ilosc_zboczy_T1  == 1) return;  // wychodzisz z funkcji<br />----Jeżeli(ilosc_zboczy_T1  == 2):<br />--------ilosc_zboczy_T1 = 0;<br />--------przepisujesz wartość temp jako kolejny bit danych<br /><br />-Jeżeli zliczył około T2: <br />----temp= !temp; <br />----przepisujesz wartość temp jako kolejny odebrany bit.<br /><br />Notatka na marginesie: aby sprawdzić jakie zbocze wywołało przerwanie możesz w funkcji sprawdzić jaki jest stan pinu, który odpowiada za przerwania -&gt; jeżeli niski: zbocze opadające, jeżeli wysoki: zbocze narastające;<br />Zmienna &quot;temp&quot; jest zmienną globalną( lub statyczną w funkcji obsługującej przerwanie - ale wtedy będzie więcej kombinowania z przypisywaniem jej wartości z innej funkcji). Na początku musi przyjąć wartość 1 (zgodnie z wykresem &quot;u góry&quot;, jak i po zakończeniu musi mieć wartość 1, aby kolejna przychodząca paczka dała dobre wyniki. Ewentualnie jeżeli nie będziesz kontrolować jej wartości, musisz sprawdzać 2 pierwsze bity paczki. Jeżeli dwie jedynki - masz dobrą paczkę, jeżeli dwa zera - negujesz odebrane dane.<br />Zmienna ilosc_zboczy_T1, przydałaby się również globalna, aby przerwanie od przepełniającego się timera mogło jej przypisać wartość 0;<br />T1 i T2 to czasy, które zliczył timer. Można zapisać, że 2T1 = T2, czyli T2 jest 2 razy większy niż T1(zgodnie z przebiegiem na rysunku). <br />Dobrze by było, jakbyś zrobił jeszcze, że T2 nie jest na granicy przepełnienia timera, tylko gdzieś w połowie, ponieważ później będziesz mógł zrobić przerwanie od przepełniającego się timera, w którym:<br />-wyłączysz timer;<br />-przywrócisz zmienne do stanu początkowego;<br /><br />Wesołych Świąt!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1870">deerjelen</a> — 23 gru 2014, o 21:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yeo1725]]></name></author>
<updated>2014-12-22T23:26:36+01:00</updated>
<published>2014-12-22T23:26:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110053#p110053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110053#p110053"/>
<title type="html"><![CDATA[PCINT i obsługa podczerwieni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9811&amp;p=110053#p110053"><![CDATA[
Witam serdecznie (i wesołych świąt!), czy da się obsłużyć odbiornik podczerwieni używając przerwań pin change?<br />Jeżeli tak to jakby wyglądało takie dekodowanie ramki rc5?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1792">yeo1725</a> — 22 gru 2014, o 23:26</p><hr />
]]></content>
</entry>
</feed>