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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-27T21:39:18+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10849&amp;mode</id>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-03-27T21:39:18+01:00</updated>
<published>2015-03-27T21:39:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=124828#p124828</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=124828#p124828"/>
<title type="html"><![CDATA[Re: Pilot podczerwieni RC a zakłócenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=124828#p124828"><![CDATA[
Witam,<br />kolego lukaszjok widzę, że masz podobne problemy do moich. Z tą różnicą, że ja zrobiłem pilota na ATtiny25 na 2 przyciski. Efekt mam podobny, a nawet gorszy - niby coś tam wysyła, ale odbiornik RC5 z BB tego nie widzi.<br /><br />Wcześniej zbudowałem na stykówce pilot na tiny2313 i działał bez problemu. Przerzuciłem się na tiny25, przerobiłem kod, no i kicha. Podejrzewam, że trzeba jeszcze coś przerobić w obsłudze przerwania, tylko jeszcze nie doszedłem co. Może problem leży w maskowaniu portów (bo tiny25 ma tylko PORTB)...<br /><br />Sprawdzałem też częstotliwość nośnej. Normalnie było ok 36,7kHz jednak po odkomentowaniu linii:<br />[syntax]//OSCCAL = 0x66;[/syntax]<br />nośna miała prawie idealnie 36kHz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 27 mar 2015, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lukaszjok]]></name></author>
<updated>2015-02-28T12:46:10+01:00</updated>
<published>2015-02-28T12:46:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121322#p121322</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121322#p121322"/>
<title type="html"><![CDATA[Re: Pilot podczerwieni RC a zakłócenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121322#p121322"><![CDATA[
Właśnie chodzi o to, że nie zawsze wciśnięcie klawisza jest tożsame z wysłaniem kodu IR - to był pierwsze co sprawdziłem, właśnie za pomocą aparatu w telefonie. Muszę nastukać w klawisz zanim cokolwiek wyśle <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=4801">lukaszjok</a> — 28 lut 2015, o 12:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[giciors]]></name></author>
<updated>2015-02-28T08:27:51+01:00</updated>
<published>2015-02-28T08:27:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121291#p121291</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121291#p121291"/>
<title type="html"><![CDATA[Re: Pilot podczerwieni RC a zakłócenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121291#p121291"><![CDATA[
Witam<br />Spróbuj sprawdzić czy za każdym naciśnięciem switcha wysyłany jest sygnał zrobisz to prosto używając kamery telefonu komórkowego ona widzi podczerwień i będziesz wiedział czy w ogóle wysyłany jest sygnał za każdym razem. Korzystałem z tego sposobu jak robiłem pilota do Nikona i problem był w switchu. <br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1818">giciors</a> — 28 lut 2015, o 08:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lukaszjok]]></name></author>
<updated>2015-02-28T00:30:42+01:00</updated>
<published>2015-02-28T00:30:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121275#p121275</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121275#p121275"/>
<title type="html"><![CDATA[Pilot podczerwieni RC a zakłócenia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10849&amp;p=121275#p121275"><![CDATA[
Witam, chciałbym uprzejmie prosić kolegów o sprawdzenie poprawności kodu. Zmontowałem pilot z Bluebooka wszystko zgodnie z założeniami, jednak, mój projekt przewiduje dwa klawisze. Z racji tego, iż miałem pod ręką wyłącznie Atmegę8 przepisałem kod pod ten mikrokontroler, jednak borykam się ze sporymi problemami z zakłóceniami(chyba). <br /><br />Nie wiem, czy kod jest przerobiony odpowiednio na 100% ale aktualnie uzyskuję taki efekt, że nadając z mojego stworzonego pilota -  odbiornik(także ten do dekodowania kodów z greenbooka) odbiera moją wiadomość średnio za ok. 20-30 wciśnięciem klawisza, zatem domniemam, że kod sam sobie jest prawdopodobnie w porządku tylko lipnie działa. <br /><br />W tym miejscu chciałbym zapytać się, czy aż tak duże zakłócenia i złe wyniki transmisji mogą być rezultatem składania układu na płytce stykowej i stosowaniu kabelków do połączeń, kondensatory filtrujące dodawałem różne i w różnej ilości ale średnio pomagały lub wcale. Dodam także że układ zasilam z programatora USBAsp, kiedy zmieniłem źródło zasilania na ładowarkę telefoniczną wyniki były jeszcze gorsze - tylko raz udało mi się wysłać kod. Bądź co bądź na pytce robi się od groma anten, no i zakłócenia przewodzone w momencie stosowania ładowarki.<br /><br />Jeszce raz proszę o sprawdzenie kodu dla spokoju ducha czy czasami nie zawiódł element ludzki tym razem w mojej osobie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />// Tutaj definiujemy jaki adres bêdzie emitowa³ pilot IR<br />#define _ADDRESS_RC5 1// TV = 0<br /><br />// przydzielamy dowolne kody (command) do klawiszy 1-5<br />#define _CMD1_RC5 1<br />#define _CMD2_RC5 2<br /><br /><br />// definicje dla obs³ugi diody LED<br />#define LED_PORT PORTB<br />#define LED_PIN PINB<br />#define LED_DDR DDRB<br />#define LED_PIN_NR 3<br />#define LED (1&lt;&lt;LED_PIN_NR)<br /><br />// dla tranzystora PNP<br />#define LED_OFF PORTB |= LED<br />#define LED_ON PORTB &amp;= ~LED<br /><br />// dla tranzystora NPN<br />//#define LED_ON PORTB |= LED<br />//#define LED_OFFPORTB &amp;= ~LED<br /><br /><br />// definicje klawiszy<br />#define K_PORT PORTB<br />#define K_PIN PINB<br />#define K_DDR DDRB<br /><br />#define KEY1 (1&lt;&lt;PB0)<br />#define KEY2 (1&lt;&lt;PB1)<br /><br /><br />#define KEYS_MASK (KEY1|KEY2)<br /><br />uint8_t address;<br />uint8_t command;<br /><br />/**************** MAIN **********************/<br />int main(void) {<br /><br />// ****** DIODA LED i IR<br />// ustawienie PORTB.2 (OC0A) jako wyjœcie<br />LED_DDR |= (LED);<br />LED_PORT|=(LED);// dla tranzystora PNP<br /><br />// LED_PORT&amp;=~(LED);// dla tranzystora NPN<br /><br />// ******* KLAWISZE<br />// ustawienie PORTD.2 , 3 , 4 i 5 jako wyjœcia<br />K_DDR |= (KEY1|KEY2);<br />// ustawienie stanu niskiego<br />K_PORT &amp;= ~(KEY1|KEY2);<br /><br />// kontrolne zapalenia diody LED na 255ms po w³¹czeniu zasilania (w³o¿eniu baterii do pilota)<br />LED_ON;<br />_delay_ms(255);<br />LED_OFF;<br /><br />//OSCCAL = 0x66;<br /><br /><br />// **************************************************************************************<br />// TIMER0<br />// - u¿ywany do generowania fali noœnej dla IR<br />// za³adowanie OCR0A wartoœci¹ do generowania noœnej ok 36kHz = 110<br />OCR2 =  110;<br />// ustawienie Timer0 w tryb = 2 - CTC - CompareA<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb CTC<br />TCCR2|= (1&lt;&lt;CS20);// preskaler = 1<br />//****************************************************************************************<br /><br />// Timer1 - s³u¿y do odmierzania opóŸnieñ (z dok³adnoœci¹ wielokrotnoœci 1us)<br />// jego preskaler ustawiany jest na 8 podczas za³¹czania<br />// u¿ywana jest wtedy jeo flaga OCF0A<br />// nie korzystamy z przerwañ<br />// ustawiamy Timer1 w tryb = 4 - CTC<br />TCCR1B |= (1&lt;&lt;WGM12);<br /><br />// wy³¹czenie komparatora analogowego<br />// konieczne ze wzglêdu na maksymalne obni¿enie poboru pr¹du<br />ACSR |= (1&lt;&lt;ACD);<br /><br />// Turn off WDT<br />WDTCR = 0x00;<br /><br />// ustawienie trybu POWER-DOWN<br />MCUCR |= ((1&lt;&lt;SM0)|(1&lt;&lt;SM1));<br />//MCUCR |= (1&lt;&lt;SM1);<br /><br />// ustawienie pinu PORTD.2 (INT0) jako wejœcie<br />DDRD &amp;= ~(1&lt;&lt;PD2);<br />// podci¹gniêcie do 1<br />PORTD |= (1&lt;&lt;PD2);<br />// zezwolenie na przerwania INT0<br />GICR |= (1&lt;&lt;INT0);<br />// skasowanie flagi wyst¹pienia przerwania INT0<br />GIFR |= (1&lt;&lt;INTF0);<br /><br />// globalne zezwolenie na przerwania<br />sei();<br /><br />while (1) {<br />// wprowadzenie procesora w tryb POWER-DOWN<br />sleep_mode();<br />}<br />}<br /><br />//------------------------------------------------- RC5 - START<br />// dok³adna pêtla opóŸniaj¹ca = wielokrotnoœci 1us<br />// w oparciu o Timer1, taktowanie 8MHz, preskaler = 8<br />void czekaj_us(uint16_t usekundy) {<br />OCR1A = usekundy;<br />TIFR |= (1&lt;&lt;OCF1A);<br />TCCR1B |= (1&lt;&lt;CS11);<br />while ( !( TIFR &amp; (1&lt;&lt;OCF1A) ) ) {};<br />TCCR1B &amp;= ~(1&lt;&lt;CS11);<br />}<br />// przes³anie bitu o wartoœci 1<br />void send_rc5_one() {<br />czekaj_us(889);<br />TCCR2  |= (1&lt;&lt;COM20);<br />czekaj_us(889);<br />TCCR2 &amp;= ~(1&lt;&lt;COM20);<br />}<br />// przes³anie bitu o wartoœci 0<br />void send_rc5_zero() {<br />TCCR2 |= (1&lt;&lt;COM20);<br />czekaj_us(889);<br />TCCR2 &amp;= ~(1&lt;&lt;COM20);<br />czekaj_us(889);<br />}<br /><br />// przes³anie kompletnej ramki RC5<br />void send_rc5(uint8_t adr, uint8_t cmd, uint8_t tog) {<br />uint16_t data = 0;<br />uint8_t i=15;<br /><br />// Musimy uformowaæ ramkê RC5<br />// w tym celu przesuwamy bity do wys³ania w lew¹ stronê<br />data |= ( (1&lt;&lt;15)|(1&lt;&lt;14)|(tog&lt;&lt;13)|(adr&lt;&lt;8)|(cmd&lt;&lt;2) );<br />/* data = 0bssTaaaaaccccccxx<br /> *     ||||adr||cmd |<br /> *   |||<br /> *   ||+-- bit TOGGLE<br /> *||<br /> *++--- 2 bity Startu<br />*/<br /><br />// wysy³amy kolejno 14 bitów<br />// 2-bity startu, 1-bit Toggle, 5-bitów adresu, 6-bitów komendy<br />do {<br />if ( !(data &amp; ( 1 &lt;&lt; i )) ) send_rc5_zero();<br />else send_rc5_one();<br />} while(--i&gt;1);<br />}<br />//------------------------------------------------- RC5 - END<br /><br /><br />//*************** PRZERWANIE INT0 ***************************<br />ISR(INT0_vect) {<br /><br />uint8_t keys;<br />static uint8_t toggle_bit;<br /><br />// tylko na czas przerwania INT0 - przestawiony zostaje<br />// kierunek portów klawiszy. Zostaj¹ ustawione jako wejœcia<br />// natomiast pin PORTD.2 (INT0) jako wyjœcie ze stanem niskim<br />// dziêki temu dzia³a obs³uga klawiszy<br /><br />// ustawienie PORTD.2 , 3 , 4 i 5 jako wejœcia<br />K_DDR &amp;= ~(KEY1|KEY2);<br />// podci¹gniêcie wejœæ do 1<br />K_PORT |= (KEY1|KEY2);<br /><br />// przestawienie PORTD.2 jako wyjœcie<br />DDRD |= (1&lt;&lt;PD2);<br />// ustawienie stanu niskiego - do obs³ugi klawiszy<br />PORTD &amp;= ~(1&lt;&lt;PD2);<br /><br />/////////////////////////////////////////////////////<br /><br />keys = PINB;<br />if( (keys &amp; KEYS_MASK) != KEYS_MASK ) {// sprawdzamy czy wciœniêty jakikolwiek klawisz<br />_delay_ms(50);// eliminacja drgañ styków<br />keys = PINB;<br />if( (keys &amp; KEYS_MASK) != KEYS_MASK ) {// sprawdzamy czy wciœniêty jakikolwiek klawisz<br /><br />// przed wys³aniem kodu jakiegokolwiek klawisza zmiana<br />// stanu bitu toggle<br />toggle_bit ^= (1&lt;&lt;0);<br /><br />do {<br /><br />if( !(keys &amp; KEY1) ) command = _CMD1_RC5;<br />else<br />if( !(keys &amp; KEY2) ) command = _CMD2_RC5;<br /><br /><br />address = _ADDRESS_RC5;<br />send_rc5(address, command, toggle_bit);<br /><br />_delay_ms(120);// gap<br /><br />keys = PINB;<br /><br />} while ( (keys &amp; KEYS_MASK) != KEYS_MASK );/* powtarzaj gdy wciœniêty */<br />}<br />}<br /><br />/////////////////////////////////////////////////////////<br /><br />// przywracamy ustawienia<br /><br />// ustawienie pinu PORTD.2 (INT0) jako wejœcie<br />DDRD &amp;= ~(1&lt;&lt;PD2);<br />// podci¹gniêcie do 1<br />PORTD |= (1&lt;&lt;PD2);<br /><br />// ******* KLAWISZE<br />// ustawienie PORTD.2 , 3 , 4 i 5 jako wyjœcia<br />K_DDR |= (KEY1|KEY2);<br />// ustawienie stanu niskiego<br />K_PORT &amp;= ~(KEY1|KEY2);<br /><br />GIFR |= (1&lt;&lt;INTF0);<br /><br />}[/syntax]<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/4801/bfcc6c34b8599752726d3253a27fb337.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4801/bfcc6c34b8599752726d3253a27fb337.png" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/4801/d387a0b336c209baa23a3dcaed8b5faf.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/4801/d387a0b336c209baa23a3dcaed8b5faf.png" alt="Obrazek" /></a><br /><br /><strong><span style="color: #FF0000">Proszę umieszczać listingi programów napisanych w C  wewnątrz znaczników syntax=c   -   Anty </span></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4801">lukaszjok</a> — 28 lut 2015, o 00:30</p><hr />
]]></content>
</entry>
</feed>