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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-03T20:49:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6224&amp;mode</id>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2014-03-03T20:49:43+01:00</updated>
<published>2014-03-03T20:49:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72948#p72948</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72948#p72948"/>
<title type="html"><![CDATA[Re: Pilot IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72948#p72948"><![CDATA[
Hurra! Zadziałało!<br /><br />W zasadzie sednem było ustawienie funkcji send_rc5_one i send_rc5_zero jak w oryginale <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dzięki!<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 37 minutach ]</span></strong><br /><br />Natomiast jeszcze ciekawostka: w procedurze obsługi przerwania, żeby to zadziałało, musiałem odwrócić kolejność ustawień rejestrów. Tj. najpierw ustawić kierunek i stan PD2, a dopiero potem kierunki i stany KEY1-KEY5.<br /><br />Odwrotnie nie chciało ruszyć ISR...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2954">HCOOH</a> — 3 mar 2014, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-03-03T20:23:18+01:00</updated>
<published>2014-03-03T20:23:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72943#p72943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72943#p72943"/>
<title type="html"><![CDATA[Re: Pilot IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72943#p72943"><![CDATA[
aparat cyfrowy tez chwyta ir nawet ten w komorce<br /><br />Wysłane z telefonu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 3 mar 2014, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-03-03T19:22:17+01:00</updated>
<published>2014-03-03T19:22:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72936#p72936</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72936#p72936"/>
<title type="html"><![CDATA[Re: Pilot IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72936#p72936"><![CDATA[
<div class="quotetitle">HCOOH napisał(a):</div><div class="quotecontent"><br />A czy w trybie CTC (Clear on Compare Match) licznik sam się nie zeruje po zrównaniu wartości z OCR?<br /></div><br />Słuszna uwaga. Masz rację.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Co to za sposób z kamerką w telefonie?<br /></div><br />Podczerwieni nie widać gołym okiem, ale już patrząc na obraz z kamerki można zobaczyć. Sprawdź sobie na dowolnym pilocie IR.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 3 mar 2014, o 19:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2014-03-03T18:47:04+01:00</updated>
<published>2014-03-03T18:47:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72935#p72935</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72935#p72935"/>
<title type="html"><![CDATA[Re: Pilot IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72935#p72935"><![CDATA[
Ok. Dzięki za uwagę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ale głupotę zrobiłem ze zmianą tych funkcji <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Przecież generowanie bitów się nie zmienia, tylko samo generowanie nośnej przyjmuje odwrotne stany  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br /><br />Co to za sposób z kamerką w telefonie?<br /><br />--<br /><br />Chyba wiem już, czemu nie mogę wybudzić mikroklocka ze snu. Zamiast edytować temat, napiszę sam dla siebie podpowiedź - może przyda się komuś kto tego jeszcze nie wiedział tak samo jak ja.<br /><br /><br />Nota pdf głosi wszak:<br />&quot;Note that recognition of falling or rising<br />edge interrupts on INT0 and INT1 requires the presence of an I/O clock, described in “Clock<br />Systems and their Distribution” on page 25. Low level interrupts on INT0/INT1 are detected<br />asynchronously. This implies that these interrupts can be used for waking the part also from<br />sleep modes other than Idle mode.&quot;<br /><br />Moje ustawienie bitu ISC01 czyli reakcja na zbocze opadające chyba jest przyczyną.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />A czy w trybie CTC (Clear on Compare Match) licznik sam się nie zeruje po zrównaniu wartości z OCR?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2954">HCOOH</a> — 3 mar 2014, o 18:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-03-03T18:45:56+01:00</updated>
<published>2014-03-03T18:45:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72934#p72934</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72934#p72934"/>
<title type="html"><![CDATA[Re: Pilot IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72934#p72934"><![CDATA[
send_rc5_zero() i send_rc5_one() powinny pozostać bez zmian. Początkowa konfiguracja portu wystarczy. W funkcji czekaj_us(uint16_t usekundy) brakuje zerowania licznika timera 1 i najlepiej na początek zastąp to funkcją _delay_us.<br />Do obserwacji czy coś się wysyła dobrze posłużyć się kamerą w komórce. Jak coś jest to jeszcze możesz uprościć program tak, że co sekundę generujesz nośną i przez drugą nic nie robisz, a do odbiornika podpinasz sobie diodę LED i obserwujesz czy odbiornik łapie nośną.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 3 mar 2014, o 18:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2014-03-03T16:43:04+01:00</updated>
<published>2014-03-03T16:43:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72931#p72931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72931#p72931"/>
<title type="html"><![CDATA[Pilot IR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6224&amp;p=72931#p72931"><![CDATA[
Jest to mój pierwszy wpis tutaj, więc na początek pragnę wszystkich serdecznie przywitać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Otóż mam problem z projektem pilota IR (realizowanym według rozdziału z bluebooka &quot;Pilot na podczerwień&quot;). Układ pracuje na plastikowej płytce stykowej, zasilany jest z baterii 4,5V.<br /><br />Jako że nie miałem pod ręką attiny2313, użyłem atmegi8 i pozmieniałem odpowiednio rejestry i liczniki.<br /><br />Problem polega na tym, że pilot najprawdopodobniej nie emituje prawidłowych ramek lub w ogóle nie generuje nośnej. Jakieś tam dane próbuje wysłać, bo po zwiększeniu prescalera w timerze1 służącym za odczekiwanie 889us (i wzięciu tym sposobem pod lupę emitowanej ramki) widzę, że dioda led sygnalizująca wysyłanie radośnie migocze.<br /><br />Z braku tranzystora PNP użyłem NPN (BC547) i napisałem funkcje wysyłu danych o odwróconej logice stanów.<br /><br /><br /><br />Proszę kogoś biegłego w rejestrach atmegi8 o sprawdzenie, czy poprawnie mam ustawione wartości rejestrów.<br /><br /><br />btw Zmieniłem też wpisy z przykładu w książce (KEY1)|(KEY2)|(KEY3)|(KEY4)|(KEY5) na KEYS_MASK ale to nie powinno mieć wpływu na nic...<br /><br />Innym problemem jest to, że nie mogę wybudzić atmegi ze stanu powerdown poprzez INT0, ale to sprawa drugorzędna, dlatego na razie sleep_mode() ująłem w komentarz.<br /><br />[syntax=c]#define NPN 1<br />#define PNP 2<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;inttypes.h&gt;<br /><br />// /// // // // <br /><br />#define TRANSISTOR NPN<br /><br />#define _ADDRESS_RC5 0<br /><br />#define _CMD1_RC5 59<br />#define _CMD2_RC5 16<br />#define _CMD3_RC5 17<br />#define _CMD4_RC5 55<br />#define _CMD5_RC5 12<br /><br /><br />// // // // //<br /><br /><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 />#if TRANSISTOR == NPN<br />#define LED_ON  PORTB |=  LED<br />#define LED_OFF PORTB &amp;= ~LED<br />#endif<br /><br />#if TRANSISTOR == PNP<br />#define LED_OFF PORTB |=  LED<br />#define LED_ON  PORTB &amp;= ~LED<br />#endif<br /><br /><br />// // // // // //<br /><br /><br />#define K_PORT PORTB<br />#define K_PIN  PINB<br />#define K_DDR  DDRB<br /><br />#define KEY1 (1&lt;&lt;PB1)<br />#define KEY2 (1&lt;&lt;PB2)<br />#define KEY3 (1&lt;&lt;PB4)<br />#define KEY4 (1&lt;&lt;PB5)<br />#define KEY5 (1&lt;&lt;PB6)<br />#define KEYS_MASK (KEY1|KEY2|KEY3|KEY4|KEY5)<br /><br /><br />// // // // // //<br /><br /><br />uint8_t address;<br />uint8_t command;<br /><br /><br /><br /><br />int main(void)<br />{<br /><br />LED_DDR  |=  (LED);<br /><br />#if TRANSISTOR == NPN<br />LED_PORT &amp;= ~(LED);<br />#endif<br /><br />#if TRANSISTOR == PNP<br />LED_PORT |= (LED);<br />#endif<br /><br />K_DDR  |=  KEYS_MASK;<br />K_PORT &amp;= ~KEYS_MASK;<br /><br />LED_ON;<br />_delay_ms(255);<br />LED_OFF;<br /><br />// zezwolenie na przerwania<br />sei();<br /><br />// ustawienie timera2 w ctc + prescaler<br />// do generowania nośnej<br />OCR2 = 110;<br />TCCR2 |= (1&lt;&lt;WGM21) | (1&lt;&lt;CS20);<br /><br />// ustawienie timera1 do liczenia 889us<br />TCCR1B |= (1&lt;&lt;WGM12);<br /><br />// wyłączanie modułów w celu oszczędzania energii<br />ACSR |= (1&lt;&lt;ACD);<br />ADCSRA &amp;= ~(1&lt;&lt;ADEN);<br /><br />WDTCR |= (1&lt;&lt;WDE) | (1&lt;&lt;WDCE);<br />WDTCR &amp;= ~(1&lt;&lt;WDE);<br /><br />MCUCR |= (1&lt;&lt;SM1);<br /><br />// ustawienie stanu na pinie d2 (dla int0)<br />DDRD  &amp;= ~(1&lt;&lt;PD2);<br />PORTD |=  (1&lt;&lt;PD2);<br /><br />// zezwolenie na przerwanie od int0<br />GICR |= (1&lt;&lt;INT0);<br /><br />MCUCR |= (1&lt;&lt;ISC01);<br /><br />// zerowanie flagi przerwania<br />GIFR |= (1&lt;&lt;INTF0);<br /><br /><br /><br /><br />    while(1)<br />    {<br />/*        sleep_mode();*/<br />    }<br />}<br /><br /><br /><br /><br /><br />void czekaj_us(uint16_t usekundy)<br />{<br />OCR1A = usekundy;<br />TIFR |= (1&lt;&lt;OCF1A);<br />TCCR1B |= (1&lt;&lt;CS11);<br /><br />while(!(TIFR &amp; (1&lt;&lt;OCF1A))) {};<br /><br />TCCR1B &amp;= ~(1&lt;&lt;CS11);<br />}<br /><br /><br /><br />#if TRANSISTOR == NPN<br /><br />void send_rc5_zero()<br />{<br />czekaj_us(889);<br />TCCR2 |= (1&lt;&lt;COM20);<br />czekaj_us(889);<br />TCCR2 &amp;= ~(1&lt;&lt;COM20);<br />}<br /><br />void send_rc5_one()<br />{<br />TCCR2 |= (1&lt;&lt;COM20);<br />czekaj_us(889);<br />TCCR2 &amp;= ~(1&lt;&lt;COM20);<br />czekaj_us(889);<br />}<br /><br />#endif<br /><br />#if TRANSISTOR == PNP<br /><br />// zostawiam ten fragment jako oryginał do porównań<br /><br />void send_rc5_one()<br />{<br />czekaj_us(889);<br />TCCR2 |= (1&lt;&lt;COM20);<br />czekaj_us(889);<br />TCCR2 &amp;= ~(1&lt;&lt;COM20);<br />}<br /><br />void send_rc5_zero()<br />{<br />TCCR2 |= (1&lt;&lt;COM20);<br />czekaj_us(889);<br />TCCR2 &amp;= ~(1&lt;&lt;COM20);<br />czekaj_us(889);<br />}<br /><br />#endif<br /><br /><br />// puszczenie pełnej ramki<br /><br />void send_rc5(uint8_t adr, uint8_t cmd, uint8_t tog)<br />{<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) );<br /><br />do <br />{<br />if( !(data &amp; (1&lt;&lt;i)) ) send_rc5_zero();<br />else send_rc5_one();<br />} while(--i&gt;1);<br />}<br /><br /><br />// // // // //<br /><br />ISR(INT0_vect)<br />{<br />// procedura obsługi przerwania jest w całości autorstwa mirka, więc nie będę jej przytaczał<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Różowo-zielony (czyli sraczkowy) J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2954">HCOOH</a> — 3 mar 2014, o 16:43</p><hr />
]]></content>
</entry>
</feed>