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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-22T18:51:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3882&amp;mode</id>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-22T18:51:43+01:00</updated>
<published>2013-08-22T18:51:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46697#p46697</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46697#p46697"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46697#p46697"><![CDATA[
Ale ftopa! Zasugerowałem się w nazwie końcówka 2313 i uznałem że to ta nota, nie patrząc na pozostałe. Byka w książce nie ma, wszystko jest ok. Temat zamykam, dziękuje Wszystkim za pomoc !!!  <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=874">kubansa</a> — 22 sie 2013, o 18:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-22T14:51:38+01:00</updated>
<published>2013-08-22T14:51:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46660#p46660</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46660#p46660"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46660#p46660"><![CDATA[
<div class="quotetitle">kubansa napisał(a):</div><div class="quotecontent"><br />Nadal jest dla mnie zagadką zapis na stronie bluebook'a (str.374). Przecież w nocie AT90S2313.pdf nie ma dla Timera0 rejestru TCCR0A. Ktoś może wykonał tego pilota z książki?<br /></div><br /><br />tzn kolega sam sobie tworzy zagadki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo w książce WYRAŹNIE piszę o procku ATtiny2313 który jest o wiele nowszą wersją szrota którego symbol podałeś czyli AT90S2313 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Ten szrot AT90S2313 nawet nie ma wbudowanego wewn. oscylatora tylko trzeba go zewn kwarcem popędzać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />więc powiedz skąd wziąłeś pomysł aby zaglądać w notę AT90S2313 ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zamiast w ATtiny2313, który opisany jest w książce ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 sie 2013, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-22T12:44:53+01:00</updated>
<published>2013-08-22T12:44:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46635#p46635</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46635#p46635"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46635#p46635"><![CDATA[
Migawka się wyzwala w aparacie. Problem był trywialny. Podczas generowania ramki, odwrócona była sekwencja stanów: wysoki/niski. Dioda podczerwieni jest podlączona na stałe do VCC, wiec aby pojawił się stan wysoki trzeba wyzerować PIN PB2, a w kodzie było na odwrót.<br /><br />Poprawiony kod:<br /><br />[syntax=c]#include &lt;util/delay.h&gt;<br />    #include &lt;avr/io.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br />    #include &lt;avr/power.h&gt;<br />    #include &lt;avr/sleep.h&gt;<br />    #include &lt;avr/wdt.h&gt;<br /><br /><br />#define LED_PIN (1&lt;&lt;PA2)// definicja pinu do którego podłączona jest dioda<br />#define LED_ON PORTA &amp;= ~LED_PIN// makrodefinicja – załączenie diody<br />#define LED_OFF PORTA |= LED_PIN// makrodefinicja – wyłączenie diody<br />#define LED_TOG PORTA ^= LED_PIN// makrodefinicja – zmiana stanu diody<br /><br />#define KEY1 (1&lt;&lt;PB1)<br />#define K_DDR DDRB<br />#define K_PIN PINB<br />#define K_PORT PORTB<br />#define KEYS_MASK KEY1<br /><br />#define NOSNA_ON TCCR0 |= (1&lt;&lt;COM00)<br />#define NOSNA_OFF TCCR0 &amp;= ~(1&lt;&lt;COM00)<br /><br />void pulseOn()<br />{<br /><br />NOSNA_OFF;<br />PORTB &amp;= ~ (1&lt;&lt;PB2);<br /><br />}<br /><br /><br />void pulseOff()<br />{<br />NOSNA_ON;<br />PORTB |= (1&lt;&lt;PB2);<br />}<br /><br />//ramka<br />void nikonRelease()<br />{<br />pulseOn();<br />_delay_ms(2);<br />pulseOff();<br /><br />_delay_ms(27.83);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(1.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(3.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(63.2);<br /><br />pulseOn();<br />_delay_ms(2);<br />pulseOff();<br /><br />_delay_ms(27.83);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(1.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(3.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br />}<br /><br /><br /><br /><br />    int main(void)<br />    {<br /><br />            DDRB |=(1&lt;&lt;PB2);        // kierunek portu  PB2<br />            DDRB |=(1&lt;&lt;PB1);        // kierunek portu  PB2<br />            DDRA |= LED_PIN;// kierunek pinu PA2 – wyjściowy<br /><br /><br />           //Timer0 - służy do genrowanie fali nosnej 38,4 kHz<br /><br />            TCCR0 |= (1&lt;&lt;WGM01);<br />            TCCR0 |= (1&lt;&lt;CS01);<br />            OCR0 = 13;<br /><br /><br />           DDRD &amp;= ~(1&lt;&lt;PD2);<br />           PORTD |= (1&lt;&lt;PD2);<br />           GIMSK |= (1&lt;&lt;INT0);<br />           TIFR |= (1&lt;&lt;INT0);<br /><br />            sei();<br /><br /><br />            while(1)<br />            {<br />            sleep_mode();<br />            }<br /><br />    }<br /><br /><br />    ISR(INT0_vect) {<br /><br />    uint8_t keys = PINB;<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;<br />    // podciągnięcie wejść do 1<br />    K_PORT |= KEY1;<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 />    if( (keys &amp; KEYS_MASK) != KEYS_MASK ) {// sprawdzamy czy wciśnięty jakikolwiek klawisz<br />    _delay_ms(80);// 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 /><br />    LED_TOG; //kontrolna zmiana stanu diody<br />    nikonRelease();<br />    _delay_ms(50);<br />    _delay_ms(50);<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);<br />    // ustawienie stanu niskiego<br />    K_PORT &amp;= ~(KEY1);<br /><br />    TIFR |= (1&lt;&lt;INTF0);<br />    //TIMSK &amp;= ~(1&lt;&lt;OCIE0);<br /><br /><br />    }[/syntax]<br /><br />Nadal jest dla mnie zagadką zapis na stronie bluebook'a (str.374). Przecież w nocie AT90S2313.pdf nie ma dla Timera0 rejestru TCCR0A. Ktoś może wykonał tego pilota z książki?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 22 sie 2013, o 12:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-21T23:45:38+01:00</updated>
<published>2013-08-21T23:45:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46611#p46611</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46611#p46611"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46611#p46611"><![CDATA[
Odróżniam zapis = od |=, wkradł się błąd w moim kodzie. Dzięki za znalezienie. Pomimo błędu nadal aparat nie reaguje  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 21 sie 2013, o 23:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-21T18:45:17+01:00</updated>
<published>2013-08-21T18:45:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46542#p46542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46542#p46542"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46542#p46542"><![CDATA[
Chodzi mi o to, że musisz odróżnić zapis <strong>=</strong> od <strong>|=</strong>. Tak masz źle:<br />[syntax=c]TCCR0 |= (1&lt;&lt;WGM01); // WGM01 ustawiony<br />TCCR0 = (1&lt;&lt;CS00); //WGM01 wyzerowany, a CS00 ustawiony[/syntax]<br />a tak dobrze:<br />[syntax=c]TCCR0 |= (1&lt;&lt;WGM01); // WGM01 ustawiony<br />TCCR0 |= (1&lt;&lt;CS00); //CS00 ustawiony, a WGM01 nie zmieniony czyli nadal ustawiony[/syntax]<br />Analogicznie możesz się pobawić ustawianiem stanów na porcie. Czy zostaną zapalone dwie diody:<br />[syntax=c]#define LED1 (1&lt;&lt;PB0)<br />#define LED2 (1&lt;&lt;PB1)<br />DDRB |= LED1 | LED2;<br />PORTB |= LED1;<br />PORTB = LED2;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 21 sie 2013, o 18:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-21T11:10:40+01:00</updated>
<published>2013-08-21T11:10:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46508#p46508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46508#p46508"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46508#p46508"><![CDATA[
<div class="quotetitle">kubansa napisał(a):</div><div class="quotecontent"><br />Proszę nie traktować tego jako czepianie się, chcę zrozumieć   a przerwania dla nowicjusza nie są takie banalne do zrozumienia.<br /></div><br /><br />Ale czy ty odebrałeś to że ja uznałem, że się czepiasz ? skąd ? ... raczej chciałem szybko zobaczyć czy przypadkiem nie wypatrzyłeś nowego BUG'a w książce więc spokojnie. Kto jak kto ale ja dobrze rozumiem początkującego <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo sam nim jestem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />na razie nie mogę odpowiedzieć merytorycznie - może później - chyba że ktoś z kolegów mnie ubiegnie i tobie pomoże<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 sie 2013, o 11:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-21T09:49:18+01:00</updated>
<published>2013-08-21T09:49:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46498#p46498</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46498#p46498"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46498#p46498"><![CDATA[
Może nad interpretowałem, zacznę od początku:<br />Na stronie 187 jest:<br />[syntax=c]//ustawienie TIMER0<br />TCCR0 |= (1&lt;&lt;WGM01); //tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00) ; // preskaler = 1024<br />OCR0 = 39 //podział przez 39 (rej. porównania)[/syntax]<br /><br />W nocie pdf dla Atmegi 32 jest napisane, że przy ustawieniu 1 dla CS00: clk/(No prescaling) uznałem że preskaler przyjmuje wówczas wartość 1 - <strong>czy  nad interpretowałem ?</strong><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 27 minutach ]</span></strong><br /><br />Druga sprawa, strona 374 bleubook - projekt pilot na podczerwień, jest na dole strony ustawienie dla generowania fali nośnej zapis:<br /><br />[syntax=c]// **************************************************************************************<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 />OCR0A =  110;<br />// ustawienie Timer0 w tryb = 2 - CTC - CompareA<br />TCCR0A |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0B |= (1&lt;&lt;CS00);// preskaler = 1<br />//****************************************************************************************[/syntax]<br /><br />ten zapis też jest w pliku źródłowym.<br /><br />Układ pilota z projektu jest oparty na ATTINY2313, w nocie PDF dla tego procka nie ma rejestru TCCR<strong>0</strong>A i TCCR<strong>0</strong>B, jest tylko TCCR0, TCCR<strong>1</strong>A , TCCR<strong>1</strong>A<br />Uznałem to za błąd i dla TIMERA0 występuje tylko jeden rejestr TCCR0 i tak ustawiłem w swoim projekcie.<br />Proszę nie traktować tego jako czepianie się, chcę zrozumieć  <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" /> a przerwania dla nowicjusza nie są takie banalne do zrozumienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 21 sie 2013, o 09:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-20T21:36:12+01:00</updated>
<published>2013-08-20T21:36:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46463#p46463</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46463#p46463"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46463#p46463"><![CDATA[
<div class="quotetitle">kubansa napisał(a):</div><div class="quotecontent"><br />Chyba nie do końca, w bluebooks, strona 187 <br />   TCCR0 |= (1&lt;&lt;WGM01); // ustawienie trybu CTC<br />    TCCR0 = (1&lt;&lt;CS00); //ustawienie preskaler = 1<br /></div><br /><br />Na pewno strona 187 ? - nie mogę znaleźć tego błędu<br /><br />ale jeśli tak jest to oczywisty błąd. Zawsze w takich wypadkach posiłkuj się też kodem z DVD dla sprawdzenia....<br /><br />Bo Krauser oczywiście ma rację <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... że to sprawka Hermana <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 sie 2013, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T21:23:49+01:00</updated>
<published>2013-08-20T21:23:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46461#p46461</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46461#p46461"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46461#p46461"><![CDATA[
To tylko dowód, że HERMAN zrobił włam do drukarni  <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=465">Krauser</a> — 20 sie 2013, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-20T21:14:16+01:00</updated>
<published>2013-08-20T21:14:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46460#p46460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46460#p46460"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46460#p46460"><![CDATA[
Chyba nie do końca, w bluebooks, strona 187 <br />   TCCR0 |= (1&lt;&lt;WGM01); // ustawienie trybu CTC<br />    TCCR0 = (1&lt;&lt;CS00); //ustawienie preskaler = 1<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 20 sie 2013, o 21:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-08-20T20:35:59+01:00</updated>
<published>2013-08-20T20:35:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46454#p46454</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46454#p46454"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46454#p46454"><![CDATA[
Drugi wpis zeruje ustawienie w pierwszej linii:<br />[syntax=c]TCCR0 |= (1&lt;&lt;WGM01);<br />TCCR0 = (1&lt;&lt;CS00);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 sie 2013, o 20:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-20T19:47:55+01:00</updated>
<published>2013-08-20T19:47:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46440#p46440</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46440#p46440"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=46440#p46440"><![CDATA[
Panowie pomożecie, siedzę już drugi dzień i włosy se rwe!!!<br /><br />We wcześniejszym poście udało się uruchomić pilota do nikona z wykorzystaniem przerwania Compare Match.  ISR(TIMER0_COMP_vect). Efekt jest taki że ramka jest wysyłana non stop i aparat robi fotki bezustannie. Nie potrafię tego zatrzymać, wiec postanowiłem zmodyfikować kod, tak aby działa w ten sposób, aby wyzwolenie migawki w aparacie odbywało się po wciśnięciu klawisza, modyfikując projekt z bluebook'a &quot;pilot ma podczerwień&quot; str. 371. Problem w tym ze nie wykorzystuje standardu RC5, tylko nadajnik ma generować taką fale jak w pierwszym posice. Puszczam nośną 38,4 kHz a potem ją załączać i wyłączać wg pokazanego w pierwszym poście wykresu czasowego. Niestety nośna nie wyzwala migawki w aparacie. Wciśniecie klawisza działa, sprawdzam to za pomocą LED. Podłączenie wygląda tak,(stara wersja płyty ATB, w nowej wersji jest wyprowadzenie na diodę nadawcą):<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/874/f1fa69313d8c6822b67a97486069d7e2.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/874/f1fa69313d8c6822b67a97486069d7e2.jpg" alt="Obrazek" /></a><br /><br /><br /><br />program C poniżej:<br /><br />[syntax=c]#include &lt;util/delay.h&gt;<br />    #include &lt;avr/io.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br />    #include &lt;avr/power.h&gt;<br />    #include &lt;avr/sleep.h&gt;<br />    #include &lt;avr/wdt.h&gt;<br /><br /><br />#define LED_PIN (1&lt;&lt;PA2)// definicja pinu do którego podłączona jest dioda<br />#define LED_ON PORTA &amp;= ~LED_PIN// makrodefinicja – załączenie diody<br />#define LED_OFF PORTA |= LED_PIN// makrodefinicja – wyłączenie diody<br />#define LED_TOG PORTA ^= LED_PIN// makrodefinicja – zmiana stanu diody<br /><br />#define KEY1 (1&lt;&lt;PB1)<br />#define K_DDR DDRB<br />#define K_PIN PINB<br />#define K_PORT PORTB<br />#define KEYS_MASK KEY1<br /><br />#define NOSNA_ON TCCR0 |= (1&lt;&lt;COM00)<br />#define NOSNA_OFF TCCR0 &amp;= ~(1&lt;&lt;COM00)<br /><br />void pulseOn()<br />{<br />NOSNA_ON;<br />PORTB |= (1&lt;&lt;PB2);<br />}<br /><br /><br />void pulseOff()<br />{<br />NOSNA_OFF;<br />PORTB &amp;= ~ (1&lt;&lt;PB2);<br /><br />}<br /><br />//ramka<br />void nikonRelease()<br />{<br />pulseOn();<br />_delay_ms(2);<br />pulseOff();<br /><br />_delay_ms(27.83);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(1.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(3.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(63.2);<br /><br />pulseOn();<br />_delay_ms(2);<br />pulseOff();<br /><br />_delay_ms(27.83);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(1.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(3.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br />}<br /><br /><br /><br /><br />    int main(void)<br />    {<br /><br />            DDRB |=(1&lt;&lt;PB2);        // kierunek portu  PB2<br />            DDRB |=(1&lt;&lt;PB1);        // kierunek portu  PB2<br />            DDRA |= LED_PIN;// kierunek pinu PA2 – wyjściowy<br /><br /><br />           //Timer0 - służy do genrowanie fali nosnej 38,4 kHz<br /><br />            TCCR0 |= (1&lt;&lt;WGM01);<br />            TCCR0 = (1&lt;&lt;CS00);<br />            OCR0 = 104;<br /><br /><br />           DDRD &amp;= ~(1&lt;&lt;PD2);<br />           PORTD |= (1&lt;&lt;PD2);<br />           GIMSK |= (1&lt;&lt;INT0);<br />           TIFR |= (1&lt;&lt;INT0);<br /><br />            sei();<br /><br /><br />            while(1)<br />            {<br />            sleep_mode();<br />            }<br /><br />    }<br /><br /><br />    ISR(INT0_vect) {<br /><br />    uint8_t keys = PINB;<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;<br />    // podciągnięcie wejść do 1<br />    K_PORT |= KEY1;<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 />    if( (keys &amp; KEYS_MASK) != KEYS_MASK ) {// sprawdzamy czy wciśnięty jakikolwiek klawisz<br />    _delay_ms(80);// 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 /><br />    LED_TOG; //kontrolna zmiana stanu diody<br />    nikonRelease();<br />    _delay_ms(50);<br />    _delay_ms(50);<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);<br />    // ustawienie stanu niskiego<br />    K_PORT &amp;= ~(KEY1);<br /><br />    TIFR |= (1&lt;&lt;INTF0);<br />    //TIMSK &amp;= ~(1&lt;&lt;OCIE0);<br /><br /><br />    }[/syntax]<br /><br />Prośba na spojrzenie kodu co jest nie tak.  I czy dobrze rozumie kod:<br />1. Po naciśnięciu klawisza pojawia się stan niski na pinie PD2 (INTO) <br />2. Powoduje to wybudzenie procesora i przejście do przerwania ISR(INTO_vect)<br />3. Jest sprawdzenie za pomocą if'a czy jest wciśnięty klawisz, jeśli tak, to<br />4. Wykonuje się polecenie LED_TOG; oraz nikonRelease();<br />5. W efekcie jest zmian stanu pinu na PA2 oraz uruchamia się Timer0, który generuje nośną<br />6. pojawia się stan wysoki przez okres 2000us z częstotliwościowa 38,4 kHz<br />7. pojawia się stan niski przez okres 27830 us z częstotliwościowa 38,4 kHz<br />8. i tak dalej... po skończeniu procedury  nikonRelease(); następuje zmiana stanu portów i pinów związanych z klawiszem i INTO<br /><br />Liczę na Was <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /><br />PS: Sprawdziłem za pomocą aparatu w telefonie dioda nadawcza ciągle się świeci, dlaczego?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 20 sie 2013, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-16T20:06:38+01:00</updated>
<published>2013-08-16T20:06:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45940#p45940</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45940#p45940"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45940#p45940"><![CDATA[
<div class="quotetitle">kubansa napisał(a):</div><div class="quotecontent"><br />i jest efekt, zadziałało<br /></div><br />Prawda jak łatwo się to robi w ten sposób ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Gratulacje i powodzenia w dalszych bojach i projektach<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 sie 2013, o 20:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-16T18:58:57+01:00</updated>
<published>2013-08-16T18:58:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45933#p45933</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45933#p45933"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45933#p45933"><![CDATA[
Przeczytałem enty raz Mirku, i jest efekt, zadziałało <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /> Jaka radość!<br /><br />Poprawiony kod:<br /><br />[syntax=c]#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/power.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;avr/wdt.h&gt;<br /><br />#define LED_PORT PORTA<br />#define LED_PIN PINA<br />#define LED_DDR DDRA<br />#define LED_PIN_NR 2<br />#define LED (1&lt;&lt;LED_PIN_NR)<br /><br />#define LED_OFF PORTA |= LED<br />#define LED_ON PORTA &amp;= ~LED<br /><br /><br /><br />int main(void)<br />{<br /><br />DDRB |=(1&lt;&lt;PB2);// kierunek portu  PB2<br /><br />LED_DDR |= (LED);<br />LED_PORT |= (LED);<br /><br />OCR0 = 104;         //podział przez 104 (rejestr przepełnienia)<br />TCCR0 = (1&lt;&lt;WGM01); //tryb CTC<br />TCCR0 = (1&lt;&lt;CS00);  //preskaler 1<br />TIMSK |= (1&lt;&lt;OCIE0); //zezwolenie na przerwanie ComapreMatch<br /><br />sei();<br /><br /><br />while(1) {<br />LED_ON;<br />_delay_ms(1000);<br />LED_OFF;<br />_delay_ms(1000);<br />}<br /><br />}<br /><br /><br />void pulseOn()<br />{<br />PORTB |= (1&lt;&lt;PB2);<br />}<br /><br />void pulseOff()<br />{<br />PORTB &amp;= ~ (1&lt;&lt;PB2);<br />}<br /><br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />pulseOn();<br />_delay_ms(2);<br />pulseOff();<br /><br />_delay_ms(27.83);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(1.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(3.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(63.2);<br /><br />pulseOn();<br />_delay_ms(2);<br />pulseOff();<br /><br />_delay_ms(27.83);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(1.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />_delay_ms(3.58);<br /><br />pulseOn();<br />_delay_ms(0.4);<br />pulseOff();<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 16 sie 2013, o 18:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-08-16T17:15:19+01:00</updated>
<published>2013-08-16T17:15:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45923#p45923</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45923#p45923"/>
<title type="html"><![CDATA[Re: Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45923#p45923"><![CDATA[
W bluebooku - masz fajny przykład, którego przerobienie powinno zająć 5 sekund.<br /><br />Tymczasem ty zabierasz się za jakiś mega pokręcony kod, który na pierwszy rzut oka jeszcze softwarowo generuje nośną - no pokręcony pomysł ... <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> po co ?<br /><br />toż masz przykład w Bluebooku, jak puścić nośną np 36kHz czy dowolną inną jaką zechcesz - a potem tylko ją załączać i wyłączać wg pokazanego w pierwszym poście wykresu czasowego. No nic już bardziej prostego nie da rady zrobić ....<br /><br />więc po co się męczysz z reverse engeenering'iem ??? jakiegoś kociego programu ?<br /><br />Polecam ci jednak przeczytać jeszcze raz ten rozdział o pilocie RC5 i go zrozumieć a jak coś niejasne to dopytać - bo przyda ci się wiedza jak generować nośną przy okazji za pomocą timera sprzętowego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 sie 2013, o 17:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubansa]]></name></author>
<updated>2013-08-16T15:05:53+01:00</updated>
<published>2013-08-16T15:05:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45912#p45912</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45912#p45912"/>
<title type="html"><![CDATA[Pilot do lustrzanki Nikon D5000]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3882&amp;p=45912#p45912"><![CDATA[
To mój pierwszy post, więc proszę o wyrozumiałość. Jestem początkującym i obrałem sobie jako pierwszy projekt zrobić pilota do aparatu Nikon D5000. Ramka wygląda tak:<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/874/ad1da0467600549e9a87995bfb11ccef.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/874/ad1da0467600549e9a87995bfb11ccef.png" alt="Obrazek" /></a><br /><br />Na stronie: <!-- m --><a class="postlink" href="http://www.bigmike.it/ircontrol/index.html" >http://www.bigmike.it/ircontrol/index.html</a><!-- m --> jest napisany kod w C dla AT90S2313. Chciałem go przerobić dla Atmegi32, wpierw testując na płycie ATB rev: 1.002. W książce niebieskiej jest projekt &quot;Pilot na podczerwień&quot; wyczytałem ze wystarczy podpiąć IR LED, skompilować program, wgrać i powinno działać. Niestety nie działa mój kod po przeróbce, pewnie mam coś nie tak z kodem, prośba o spojrzenie, co może być problemem:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define tau0 164;<br />unsigned int i;<br /><br />int main( void )<br />{<br />DDRB=(1&lt;&lt;PB2);     //00000100 wyjsciem  będzie PB2<br />TCNT0=164;    //10100100 // rejestr licznika, ustawiony na zliczanie 164 impulsów<br />/* dlaczego 164?<br /> Taktowanie ustawione jest na 8Mhz, czyli na jeden cykl trwa 125ns. Musimy uzyskac 13us (didoda ma mrugac co 38,4 kHz<br /> , 1s/38kHz = 26us/2=13us, ddzielimy przez 2 bo dioda ma byc wlaczona i wylaczona w tym czasie)<br /> 13us/125ns = 104 impulsy<br />*/<br />TCCR0=1;      //00000001 -ustawienie preskalera<br /><br />while(1)<br /> {<br /> for(i=0;i&lt;154;i++)<br /> {while(bit_is_clear(TIFR,TOV0)); // sprawdza czy dany bit (TOV0) jest w stanie niskim<br /> //pętla wykonuje się aż do momentu gdy TOV0 przyjmie stan wysoki &quot;1&quot;<br />  TCNT0 = tau0; //10100100 // rejestr licznika, ustawiony na zliczanie 164 impulsów<br />  PORTB ^= (1&lt;&lt;PB2);//zmiana stanu bitu, na wyjsciu 11111110,do PD0 podlaczona jest dioda IR<br />  TIFR = 1&lt;&lt;TOV0; //ustawienie  TOV0 na stan wysoki &quot;1&quot;<br /> }<br /><br /><br /> for(i=0;i&lt;2226;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br />  for(i=0;i&lt;31;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB^=(1&lt;&lt;PB2);<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;126;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br />  for(i=0;i&lt;33;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB^=(1&lt;&lt;PB2);<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;286;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br />  for(i=0;i&lt;32;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB^=(1&lt;&lt;PB2);<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;2208;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTB=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> <br /> }<br />}[/syntax] <br /><br />Może mi ktoś wytłumaczyć &quot;TCNT0=164;&quot; dlaczego 164? <br /><br />Poniżej oryginalny kod, który ponoć działa na AT90S2313:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define tau0 164;<br />unsigned int i;<br />int main( void )<br />{<br />DDRD=0x01;     <br />TCNT0=164;    <br />TCCR0=1;      <br /><br />while(1)<br /> {<br /> for(i=0;i&lt;160;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD^=0x01;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;2226;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br />  for(i=0;i&lt;31;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD^=0x01;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;126;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br />  for(i=0;i&lt;33;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD^=0x01;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;286;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br />  for(i=0;i&lt;32;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD^=0x01;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> for(i=0;i&lt;2208;i++)<br /> {while(bit_is_clear(TIFR,TOV0));<br />  TCNT0=tau0;<br />  PORTD=0x00;<br />  TIFR=1&lt;&lt;TOV0; <br /> }<br /> <br /> }<br />}[/syntax]<br /><br /><br />Analizując kod:<br />[syntax=c]for(i=0;i&lt;154;i++)<br /> {while(bit_is_clear(TIFR,TOV0)); // sprawdza czy dany bit (TOV0) jest w stanie niskim<br /> //pętla wykonuje się aż do momentu gdy TOV0 przyjmie stan wysoki &quot;1&quot;<br />  TCNT0 = tau0; //10100100 // rejestr licznika, ustawiony na zliczanie 164 impulsów<br />  PORTB ^= (1&lt;&lt;PB2);//zmiana stanu bitu, na wyjsciu 11111110,do PB2 podlaczona jest dioda IR<br />  TIFR = 1&lt;&lt;TOV0; //ustawienie  TOV0 na stan wysoki &quot;1&quot;<br /> }[/syntax]<br /><br />Po co w pętli pierwotny autor umieścił TCNT0 i PORTB, przecież to się wykona tylko raz bo pętla While wykona się raz po pierwszym przejściu ustawi się stan wysoki na TOV0.  Dobrze myślę?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=874">kubansa</a> — 16 sie 2013, o 15:05</p><hr />
]]></content>
</entry>
</feed>