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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-04-05T16:09:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11279&amp;mode</id>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-05T16:09:37+01:00</updated>
<published>2015-04-05T16:09:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125691#p125691</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125691#p125691"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125691#p125691"><![CDATA[
Mirku, ale jak zrobić tą inkrementację w pętli oczekującej?<br />W warunku pętli nie bardzo, bo tam ciągle sprawdzana jest flaga wystąpienia porównania CompareMatch.<br />A w bloku instrukcji... nie wiem, może z jakimś IF-em <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  Tylko z jakim, bo mnie przyćmiło <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br />Proszę o kolejne koło ratunkowe:)<br /><br />PS. a może inkrementować zmienną usekundy? i po prostu zrobić &quot;starym indiańskim sposobem&quot;:<br />[syntax=c]void czekaj_us (uint16_t usekundy) {<br />      while (--usekundy) {<br />      _delay_us(1);<br />      }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 5 kwi 2015, o 16:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-04-05T07:00:34+01:00</updated>
<published>2015-04-05T07:00:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125658#p125658</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125658#p125658"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125658#p125658"><![CDATA[
inkrementuj sobie zmienną w petli oczekujacej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 kwi 2015, o 07:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-04T21:19:52+01:00</updated>
<published>2015-04-04T21:19:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125644#p125644</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125644#p125644"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125644#p125644"><![CDATA[
Może któryś z kolegów stworzył kiedyś funkcję opóźniającą (&quot;mikrosekundową&quot;) z argumentem 16-bitowym, która wykorzystuje Timer 8-bitowy? Może mógłby się podzielić jakimś rozwiązaniem?<br />Będzie to dla mnie bardzo pomocne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 4 kwi 2015, o 21:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-04T18:05:34+01:00</updated>
<published>2015-04-04T18:05:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125640#p125640</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125640#p125640"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125640#p125640"><![CDATA[
No właśnie muszę to sobie na spokojnie rozrysować na kartce i prześledzić stany na pinach.<br />Póki co zrobiłem taki manewr, że przyciski podłączyłem do masy, a ich obsługę dałem w pętli głównej. <br /><br />[syntax=c]while (1)<br />{<br />// obsluga 1-go przycisku<br /><br />if (KEY1_DOWN) {<br />_delay_ms(50);// eliminacja drgan stykow<br />if (KEY1_DOWN) {<br />toggle_bit ^= (1&lt;&lt;0);// zmiana stanu bitu toggle przed wyslaniem kodu<br />command = _CMD1_RC5;<br />address = _ADDRESS_RC5;<br /><br />do {<br />//if (KEY2_DOWN) command = _CMD2_RC5;<br />send_rc5(address, command, toggle_bit);<br />_delay_ms(115);// default gap<br />} while (KEY1_DOWN);<br />}<br />}<br /><br />if (KEY2_DOWN) {<br />_delay_ms(50);// eliminacja drgan stykow<br />if (KEY2_DOWN) {<br />toggle_bit ^= (1&lt;&lt;0);// zmiana stanu bitu toggle przed wyslaniem kodu<br /><br />do {<br />//if (KEY2_DOWN) command = _CMD2_RC5;<br />command = _CMD2_RC5;<br />address = _ADDRESS_RC5;<br />send_rc5(address, command, toggle_bit);<br />_delay_ms(115);// default gap<br />} while (KEY2_DOWN);<br />}<br />}// konie cobslugi 1-go przycisku<br />}// koniec petli nieskonczonej[/syntax]<br /><br /><br />Wtedy działa jak należy (za każdym wciśnięciem), ale zasilanie bateryjne raczej odpada...<br /><br />Trochę jeszcze muszę dopracować funkcję opóźniającą bo to co na szybko wymyśliłem kiepsko działa...<br /><br />[syntax=c]void czekaj_us (uint16_t usekundy) {<br /><br />uint8_t cykle, reszta;<br />cykle = usekundy / 255;<br />reszta = usekundy % 255;<br /><br />while (--cykle) {<br />OCR0A = 255;// wpisanie ilosci us do rejestru porownania<br />TIFR |= (1&lt;&lt;OCF0A);// ustawienie flagi porownania CompareMatch z OCR0A<br />TCCR0B |= (1&lt;&lt;CS01);// wlaczenie TIMER0 z preskalerem 8<br />while ( !( TIFR &amp; (1&lt;&lt;OCF0A) ) ) {};// petla oczekujaca<br />TCCR0B &amp;= ~((1&lt;&lt;CS01));// wylaczenie TIMER0<br />}<br /><br />OCR0A = reszta;// wpisanie ilosci us do rejestru porownania<br />TIFR |= (1&lt;&lt;OCF0A);// ustawienie flagi porownania CompareMatch z OCR0A<br />TCCR0B |= (1&lt;&lt;CS01);// wlaczenie TIMER0 z preskalerem 8<br />while ( !( TIFR &amp; (1&lt;&lt;OCF0A) ) ) {};// petla oczekujaca<br />TCCR0B &amp;= ~((1&lt;&lt;CS01));// wylaczenie TIMER0<br /><br />}// koniec funkcji czekaj_us[/syntax]<br /><br />O wiele bardziej wydłuża się czas trwania ZERA niż JEDYNKI na wyjściu odbiornika<br /><br />Najlepiej działa po prostu (już bez żadnych przeliczeń) na żywca wpisanie 3 razy pod rząd linijki:  <br />[syntax=c]czekaj_us(889);<br />czekaj_us(889);<br />czekaj_us(889);[/syntax]<br />i nie modyfikować tej funkcji.<br />Z tym że to mało uniwersalne i nieprofesjonalne rozwiązanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 4 kwi 2015, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-04-04T16:45:07+01:00</updated>
<published>2015-04-04T16:45:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125631#p125631</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125631#p125631"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125631#p125631"><![CDATA[
No ma ogromne .. przesledz sekwencje przelaczania kierunkow i opdciagania pinow<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 kwi 2015, o 16:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-04T10:47:10+01:00</updated>
<published>2015-04-04T10:47:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125601#p125601</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125601#p125601"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125601#p125601"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />no i zagadka wyjasniona <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Jednak jak się napisze na forum, to człowiek sam zaczyna bardziej zastanawiać się nad tematem:)<br />A dzisiaj podczas święcenia jajek, usłyszałem jakiś głos: &quot;człowieku sprawdź jeszcze PDF-a&quot; <img src="https://forum.atnel.pl/images/smilies/icon_idea.gif" alt=":idea:" title="Pomysł" /> <br /><br />Pozostaje jednak jeszcze drugi problem.<br />Co zrobić, żeby za każdym wciśnięciem przycisku pilot wysyłał ramkę <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br />Podejrzewam, że to coś z portami. <br />W tiny 2313 INT0 jest na innym porcie niż przyciski, a w Tiny25 na tym samym... ale czy to ma znaczenie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 4 kwi 2015, o 10:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-04-04T10:35:12+01:00</updated>
<published>2015-04-04T10:35:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125600#p125600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125600#p125600"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125600#p125600"><![CDATA[
no i zagadka wyjasniona <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=54">mirekk36</a> — 4 kwi 2015, o 10:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-04T10:19:32+01:00</updated>
<published>2015-04-04T10:19:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125599#p125599</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125599#p125599"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125599#p125599"><![CDATA[
No to czas posypać głowę popiołem.<br />Strzeliłem 'babola' ze hoho. Otóż tiny25 nie ma Timera 16-bitowego. Stąd to całe zamieszanie. <br />Jakieś zamieszanie w dokumentacjach miałem (ale obciach <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> ). Ściągnąłem ze strony atmela od nowa a tam jak byk Timer0 8-bit i Timer1 8-bit. Trzeba będzie to jakoś przerobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 4 kwi 2015, o 10:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-04-04T00:08:25+01:00</updated>
<published>2015-04-04T00:08:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125572#p125572</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125572#p125572"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125572#p125572"><![CDATA[
<div class="quotetitle">gordon10 napisał(a):</div><div class="quotecontent"><br />Jeśli z taktowaniem byłoby coś nie tak, to nośna też raczej by miała zupełnie inną częstotliwość.... a tu jest w okolicy 36kHz, dziwna sprawa.<br /></div><br />No to bardzo dziwne<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 kwi 2015, o 00:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-03T23:08:56+01:00</updated>
<published>2015-04-03T23:08:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125558#p125558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125558#p125558"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125558#p125558"><![CDATA[
Jeśli chodzi o Fusy, to praktycznie odznaczyłem tylko &quot;wewnetrzny podział zegaza przez 8&quot; CKDIV8<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />Jeśli z taktowaniem byłoby coś nie tak, to nośna też raczej by miała zupełnie inną częstotliwość.... a tu jest w okolicy 36kHz, dziwna sprawa.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 22 minutach ]</span></strong><br /><br />Dla czystego sumienia sprawdziłem jeszcze raz fusebity<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/968/1c54a087a306ba0e699681cc8a9cc68e.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/968/1c54a087a306ba0e699681cc8a9cc68e.png" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/968/c7156fa4a9d88ad95264e71ab1f352f9.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/968/c7156fa4a9d88ad95264e71ab1f352f9.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 3 kwi 2015, o 23:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-04-03T23:02:44+01:00</updated>
<published>2015-04-03T23:02:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125556#p125556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125556#p125556"/>
<title type="html"><![CDATA[Re: Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125556#p125556"><![CDATA[
<div class="quotetitle">gordon10 napisał(a):</div><div class="quotecontent"><br />No ale do rzeczy: <br />Pilot na procku ATtiny25, taktowany wewnętrznym zegarem 8MHz<br /></div><br />No gdybym ja miał takie efekty to pierwsze co ... to podejrzewałbym, że jednak coś skopałem np z fusebitami. Ty piszesz, że ustawiłeś na 8MHz. Wszystkie inne rzeczy ładnie pokazałeś - ale może jednak pokazałbyś jak masz ustawione fusebity po ich odczytaniu w MkAvrCalculator ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 kwi 2015, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2015-04-03T23:03:37+01:00</updated>
<published>2015-04-03T22:56:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125554#p125554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125554#p125554"/>
<title type="html"><![CDATA[Pilot IR (RC5) na ATtiny25 - dziwne przypadłości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11279&amp;p=125554#p125554"><![CDATA[
Witam szanownych Forumowiczów,<br /><br /><br />Od dobrych kilku dni męczę się z programem do pilota IR. Postanowiłem przerobić kod z BlueBooka pod procka Tiny25, gdyż chcę to zmieścić w malutkiej obudowie (na 2 lub 3 przyciski). Myślałem, że kod przerobiłem prawidłowo, jednak pilot trochę dziwnie się zachowuje.  <br />Może coś mi umknęło, ze względu na niewielkie doświadczenie, dlatego piszę na forum. Może, któryś z kolegów rzuci trochę światła na moje szare komórki:)<br /><br />No ale do rzeczy: <br />Pilot na procku ATtiny25, taktowany wewnętrznym zegarem 8MHz<br /><br />pojawiły się 2 problemy:<br />1. zbyt krótkie opóźnienia generowane przez funkcję &quot;czekaj_us&quot;. Połówki bitów zamiast ok 889us, trwają 200-300us.<br /><br />2. ramka RC5 wysyłana jest nie za każdym wciśnięciem przycisku (co 10-20 wcisniecie przycisku wysyła ramkę)<br /><br />Schemat pilota:<br /><a href="http://forum.atnel.pl/_obrazki/o/968/32847ccd35ce435778ef681c25dccbdc.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/968/32847ccd35ce435778ef681c25dccbdc.png" alt="Obrazek" /></a><br /><br />kod main.c<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 />// Adres urzadzenia emitowany przez pilot IR<br />#define _ADDRESS_RC5 0// TV = 0<br /><br />// przydzielamy dowolne kody (command) do poszczegolnych klawiszy<br />#define _CMD1_RC5 1<br />#define _CMD2_RC5 2<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 1<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 />// 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;PB3)<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 />LED_DDR |= (LED);// ustawienie PB1 (OC1A) jako wyjście<br />LED_PORT|=(LED);// dla tranzystora PNP<br />// LED_PORT&amp;=~(LED);// dla tranzystora NPN<br /><br />// ******* KLAWISZE<br />K_DDR |= (KEY1|KEY2);// ustawienie pinow klawiszy jako wyjścia<br />K_PORT &amp;= ~(KEY1|KEY2);// ustawienie stanu niskiego<br /><br />LED_ON;// kontrolne zapalenia diody LED po włożeniu baterii do pilota<br />_delay_ms(255);<br />LED_OFF;<br /><br />//OSCCAL = 0x66;// kalibracja F_CPU<br /><br />// **************************************************************************************<br />// TIMER1 - jako generator fali nosnej dla IR 36kHz<br />// OCR = (F_CPU / ( 2 * prescaler) * F_nosna ) - 1<br />OCR1C = 110;// zaladowanie rejestru wartoscia do generowania nosnej 36kHz (wzor w PDF)<br />TCCR1 |= (1&lt;&lt;CTC1) | (1&lt;&lt;CS10);// tryb CTC | preskaler 1<br />// **************************************************************************************<br /><br />// TIMER0 do odmierzania opoznien (z dokladnoscia wielokrotnosci 1us)<br />// preskaler ustawiony na 8 podczas wlaczenia (przy F_CPU = 8MHz: 1 takt co 1us)<br />// uzywana jest jego flaga (nie korzystamy z przerwan)<br />TCCR0A |= (WGM01);// ustawienie TIMER0 w tryb CTC (porownanie CompareMatch z OCRA)<br /><br />ACSR |= (1&lt;&lt;ACD);// wyłączenie komparatora analogowego dla obnizenia poboru pradu<br />WDTCR = 0x00;// Turn off WDT<br />MCUCR |= (1&lt;&lt;SM1);// ustawienie trybu POWER-DOWN<br /><br />DDRB &amp;= ~(1&lt;&lt;PB2);// ustawienie pinu PORTB.2 (INT0) jako wejście<br />PORTB |= (1&lt;&lt;PB2);// podciągnięcie do 1<br /><br />GIMSK |= (1&lt;&lt;INT0);// zezwolenie na przerwania INT0<br />// przerwanie INT0 wyzwalane niskim poziomem wiec bity ISC01 i ISC00 ustawione na 0<br />GIFR |= (1&lt;&lt;INTF0);// skasowanie flagi wystąpienia przerwania INT0<br /><br />sei();// globalne zezwolenie na przerwania<br /><br />while (1)<br />{<br />sleep_mode();// wprowadzenie procesora w tryb POWER-DOWN<br />}<br />}<br /><br />// ------------------------------------------------- RC5 - START<br />// dokładna pętla opóźniająca = wielokrotności 1us<br />// w oparciu o TIMER0, taktowanie 8MHz, preskaler = 8<br />void czekaj_us (uint16_t usekundy) {<br />OCR0A = usekundy;// wpisanie ilosci us do rejestru porownania<br />TIFR |= (1&lt;&lt;OCF0A);// ustawienie flagi porownania CompareMatch z OCR0A<br />TCCR0B |= (1&lt;&lt;CS01);       // wlaczenie TIMER0 z preskalerem 8<br />while ( !( TIFR &amp; (1&lt;&lt;OCF0A) ) ) {};// petla oczekujaca<br /> TCCR0B &amp;= ~((1&lt;&lt;CS01));// wylaczenie TIMER0<br />}<br /><br />// funkcje przesylania bitow (TIMER1)<br />// przesłanie bitu o wartosci 1<br />void send_rc5_one() {<br />czekaj_us(889);// delay 889us - pierwsza polowka bitu<br />TCCR1 |= (1&lt;&lt;COM1A0);// podanie nosnej na pin OC1A (PB1)<br />czekaj_us(889);// delay 889us - druga polowka bitu<br />TCCR1 &amp;= ~(1&lt;&lt;COM1A0);// odlaczenie nosnej z pinu OC1A (PB1)<br />}<br /><br />// przeslanie bitu o wartosci 0<br />void send_rc5_zero() {<br />TCCR1 |= (1&lt;&lt;COM1A0);// podanie nosnej na pin OC1A (PB1)<br />czekaj_us(889);<br />TCCR1 &amp;= ~(1&lt;&lt;COM1A0);// odlaczenie nosnej z pinu OC1A (PB1)<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 />data |= ( (1&lt;&lt;15)|(1&lt;&lt;14)|(tog&lt;&lt;13)|(adr&lt;&lt;8)|(cmd&lt;&lt;2) );// formowanie ramki RC5<br />/* data = 0bssTaaaaaccccccxx<br /> *     ||||adr||cmd |<br /> *   ||+-- bit TOGGLE<br /> *++--- 2 bity Startu(xx - ostatnie bity zmiennej data: poza ramka)<br />*/<br /><br />// wysyłamy kolejno 14 bitów: 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 />// *************** 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 kierunek portów klawiszy.<br />// Zostają ustawione jako wejścia, natomiast pin PORTD.2 (INT0) jako wyjście ze stanem niskim<br />// dzięki temu działa obsługa klawiszy<br /><br />K_DDR &amp;= ~(KEY1|KEY2);// ustawienie pinow klawiszy jako wejścia<br />K_PORT |= (KEY1|KEY2);// podciągnięcie wejść do 1<br /><br />DDRB |= (1&lt;&lt;PB2);// przestawienie PB2 (INT0) jako wyjście<br />PORTB &amp;= ~(1&lt;&lt;PB2);// ustawienie stanu niskiego - do obsługi klawiszy<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 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 />address = _ADDRESS_RC5;<br />send_rc5(address, command, toggle_bit);<br /><br />_delay_ms(115);// gap default<br /><br />keys = PINB;<br /><br />} while ( (keys &amp; KEYS_MASK) != KEYS_MASK );// powtarzaj gdy wciśnięty<br />}<br />}<br /><br />// przywracamy ustawienia<br />DDRB &amp;= ~(1&lt;&lt;PB2);// ustawienie pinu PB2 (INT0) jako wejście<br />PORTB |= (1&lt;&lt;PB2);// podciągnięcie do 1<br /><br />// ******* KLAWISZE<br />K_DDR |= (KEY1|KEY2);// ustawienie klawiszy jako wyjścia<br />K_PORT &amp;= ~(KEY1|KEY2);// ustawienie stanu niskiego<br /><br />GIFR |= (1&lt;&lt;INTF0);// skasowanie flagi wystąpienia przerwania INT0<br />}[/syntax]<br /><br />Zamieniłem tu funkcje działania timerów (TIMER0 do odmierzania opóźnień, TIMER1 do generowania nośnej).<br /><br />pilot wysyła taką ramkę:<br /><a href="http://forum.atnel.pl/_obrazki/o/968/70cdd89a897b70ea71d137de9389a232.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/968/70cdd89a897b70ea71d137de9389a232.png" alt="Obrazek" /></a><br /><br />I tu ujawnia się pierwszy problem - czasy trwania połówek bitów są rzędu 200-300us, sporo za mało<br />Nie jest to raczej problem z taktowaniem procka, gdyż częstotliwość nośnej jest ok 36kHz (mierzone multimetrem)<br /><br /><br />Drugi problem pojawia się... (nie zawsze)<br />O dziwo, jak do układu podłączony jest programator, to przy każdym wciśnięciu przycisku, pilot wysyła ramkę/ramki. Jeśli podłącze tylko zasilanie, to co 10-20 wciśnięcie powoduje wysyłanie ramki.<br /><br />Będę wdzięczny jeśli ktoś pomoże mi w tym temacie, bo mi skończyły się pomysły.<br /><br />Jeśli któryś z kolegów chciałby się przeprowadzić próby na &quot;żywym organizmie&quot; to mogę mu wysłać zmontowany przeze mnie układzik<br /><a href="http://forum.atnel.pl/_obrazki/o/968/b60f0850b33c6eada0d6a46b7c10009e.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/968/b60f0850b33c6eada0d6a46b7c10009e.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 3 kwi 2015, o 22:56</p><hr />
]]></content>
</entry>
</feed>