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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-04-02T19:32:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11258&amp;mode</id>
<entry>
<author><name><![CDATA[carlos]]></name></author>
<updated>2015-04-02T19:32:19+01:00</updated>
<published>2015-04-02T19:32:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125431#p125431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125431#p125431"/>
<title type="html"><![CDATA[Re: dziwna komenda na odbiorniku do rc5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125431#p125431"><![CDATA[
A no faktycznie<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 22 minutach ]</span></strong><br /><br />Dobra wszystko działa<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8766">carlos</a> — 2 kwi 2015, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[makipaki]]></name></author>
<updated>2015-04-02T19:30:21+01:00</updated>
<published>2015-04-02T19:30:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125430#p125430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125430#p125430"/>
<title type="html"><![CDATA[Re: dziwna komenda na odbiorniku do rc5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125430#p125430"><![CDATA[
Masz złe przeliczenie na mikrosekundy w pliku rc5.h.<br /><br />F_CPU powinienieś podzielić przez 1000000.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7384">makipaki</a> — 2 kwi 2015, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[carlos]]></name></author>
<updated>2015-04-02T12:41:35+01:00</updated>
<published>2015-04-02T12:41:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125373#p125373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125373#p125373"/>
<title type="html"><![CDATA[dziwna komenda na odbiorniku do rc5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11258&amp;p=125373#p125373"><![CDATA[
Kiedy tak napisze kod program wyświetla mi stała komende która wogóle się nie zmienia czy wiecie może w czym jest problem<br /><br />[syntax=c]//Załączenie pliku nagłówkowego<br />#include&quot;RC5.h&quot;<br /><br />//Definicje zmiennych<br />volatile uint8_t flag_collection;<br />volatile uint8_t address;<br />volatile uint8_t command;<br />volatile uint8_t counter;<br />volatile uint8_t toggle_bit;<br /><br />//Wskaźnik który będzie przechowywał naszą funkcje do obsługi podczerwieni<br />static void (*indicator)(uint8_t address,uint8_t command,uint8_t counter);<br /><br />//Funkcja która wpisze do wskaźnika naszą funkcje do obsługi podczerwieni<br />void CALLBACK(void (*function)(uint8_t address,uint8_t command,uint8_t counter))<br />{<br />indicator=function;<br />}<br /><br />//Zdarzenie które jeżeli wykryje nadleciałą ramkę i wywoła naszą funkcje do obsługi ramek<br />void EVENT(void)<br />{<br />if(flag_collection)<br />{<br />//Jeżeli nasza funkcja do obsługi ramek jest zarejestrowana to wywołujemy ją poprzez wskaźnik<br />if(indicator) (*indicator)(address,command,counter);<br /><br />flag_collection=0;<br />}<br />}<br /><br />void INITIALIZATION(void)<br />{<br />//Ustawienie pinu IR jako wejście<br />IR_DDR&amp;=~IR_PIN;<br /><br />//Podciągnięcie rezystorem pinu IR do VCC<br />IR_PORT|=IR_PIN;<br /><br />//Ustawienie preskalera na 8<br />TCCR1B|=(1&lt;&lt;CS11);<br /><br />//Reakcja przerwnia na zbocze opadające<br />TCCR1B&amp;=~(1&lt;&lt;ICES1);<br /><br />//Odblokowanie przerwania ICP<br />TIMSK|=(1&lt;&lt;TICIE1);<br />}<br /><br />//Przerwanie ICP<br />ISR(TIMER1_CAPT_vect)<br />{<br />//Powołanie zmiennej która będzie przechowywała długość impulsu<br />uint16_t pulse_length;<br /><br />//Powołanie zmiennej która będzie przechowywyała wartość timera z poprzedniego przerwania<br />uint16_t static last_length;<br /><br />//Obliczenie długości impulsu<br />pulse_length=ICR1-last_length;<br />last_length=ICR1;<br /><br />//Zmiana zbocza wyzwalającego przerwanie na przeciwne<br />TCCR1B^=(1&lt;&lt;ICES1);<br /><br />//Powołanie statusu<br />static uint8_t STATUS=1;<br /><br />//Powołanie zmiennych<br />static uint8_t meter;<br />static uint8_t counter_bits;<br /><br />//Powołanie bufora<br />static uint16_t buffer;<br /><br />//Powołanie zmiennej do obsługi bitu toggle<br />static uint8_t previous_bit;<br /><br />//Jeżeli wystąpił błąd to restartujemy zmienne i bufor oraz ustawiamy status na jeden<br />if(STATUS==ERROR)<br />{<br />meter=0;<br />counter_bits=0;<br />buffer=0;<br /><br />STATUS=1;<br />}<br /><br />if(meter)<br />{<br />//Sprawdzanie długości impulsów<br />if(pulse_length&gt;half_bit+tolerance &amp;&amp; ICR1&lt;bit-tolerance) STATUS=ERROR;<br /><br />if(pulse_length&lt;half_bit-tolerance) STATUS=ERROR;<br />    //if(pulse_length&gt;bit+tolerance) STATUS=ERROR;<br /><br />//Jeżeli impuls był dłuższy od połowy bitu to zwiększamy licznik zboczy o jeden<br />if(pulse_length&gt;half_bit+tolerance) meter++;<br />}<br /><br />////Sprawdzenie bitów startowych<br />//if(counter_bits==2)<br />//{<br />//if(!(buffer&amp;0x0002)) STATUS=ERROR;<br />//}<br /><br />//Jeżeli impulsy się zgadzają to przechodzimy do dalszej analizy<br />if(STATUS)<br />{<br />//Trafianie w środek każdego bitu za pomocą modulo<br />if(!(meter%2))<br />{<br />//Przesunięcie bufora o jeden w lewo<br />buffer&lt;&lt;=1;<br /><br />//Jeżeli mamy zbocze opadające to oznacza to że mamy bit jeden<br />if(TCCR1B&amp;(1&lt;&lt;ICES1)) buffer|=0x0001;<br /><br />//Zwiększenie licznika bitów o jeden<br />counter_bits++;<br />}<br />}<br /><br />//Jeżeli odebrano 14 bitów to wyłuskujemy adres komende oraz bit toggle<br />if(counter_bits==14)<br />{<br />address=(buffer&gt;&gt;6)&amp;0b00000000011111;<br />command=buffer&amp;0b00000000111111;<br />toggle_bit=(buffer&gt;&gt;11)&amp;0b00000000000001;<br /><br />//Obsługa bitu toggle<br />if(toggle_bit==previous_bit) counter++;<br />else counter=0;<br /><br />//Przypisanie bieżącej wartości bitu toggle do zmiennej<br />previous_bit=toggle_bit;<br /><br />//Ustawienie flagi odbioru na jeden<br />flag_collection=1;<br /><br />//Reakcja przerwania na zbocze opadające<br />TCCR1B&amp;=~(1&lt;&lt;ICES1);<br /><br />//Rozpoczęcie odbioru ramek od nowa<br />STATUS=ERROR;<br />}<br /><br />//Zwiększanie licznika zboczy przerwań o jeden<br />meter++;<br />}[/syntax]<br /><br /><br />[syntax=c]#ifndef RC5_H_<br />#define RC5_H_<br /><br />//Załączenie bibliotek<br />#include&lt;avr/io.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br /><br />//Wybór pinu ICP do obróbki ramek nadlatujących z pilota<br />#define IR_PIN PD6<br />#define IR_PORT PORTD<br />#define IR_DDR DDRD<br /><br />//Sprowadzanie czsów dla standardu RC5 i czasów timera do stałej częstotliwości<br />#define clock_ticks(value) value*(F_CPU/100000000/8)<br /><br />//Czas połowy bitu i całego bitu dla standardu RC5<br />#define half_bit clock_ticks(889)<br />#define bit clock_ticks(1778)<br /><br />//Przyjęta tolerancja dla standardu RC5<br />#define tolerance clock_ticks(200)<br /><br />//Stała dosłowna na potrzeby złej ramki<br />#define ERROR 0<br /><br />#define jeden 1<br />#define dwa 2<br /><br />//Deklaracje funkcji<br />void CALLBACK(void (*function)(uint8_t address,uint8_t command,uint8_t counter));<br />void EVENT(void);<br />void INITIALIZATION(void);<br /><br />#endif /* RC5_H_ */[/syntax]<br /><br />[syntax=c]//Załączenie pliku nagłówkowego<br />#include&quot;RC5/RC5.h&quot;<br /><br />//Deklaracja własnej funkcji do obsługi nadlatujących ramek<br />void funkcja_1(uint8_t address,uint8_t command,uint8_t counter);<br /><br />int main(void)<br />{<br />DDRC=0xff;<br />PORTC=0xff;<br /><br />//Wywołanie funkcji inicjalizującej<br />INITIALIZATION();<br /><br />//Zarejestrowanie własnej funkcji poprzez funkcje CALLBACK<br />CALLBACK(funkcja_1);<br /><br />//Zezwolenie na przerwania<br />sei();<br /><br />while(1)<br />{<br />//Wywołanie zdarzenia reagującego na ramki<br />EVENT();<br />}<br />}<br /><br />//Własna funkcja użytkownika do obróbki ramek<br />void funkcja_1(uint8_t address,uint8_t command,uint8_t counter)<br />{<br />PORTC=~(command);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8766">carlos</a> — 2 kwi 2015, o 12:41</p><hr />
]]></content>
</entry>
</feed>