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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-01T19:38:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=7938&amp;mode</id>
<entry>
<author><name><![CDATA[programek]]></name></author>
<updated>2014-08-01T19:38:00+01:00</updated>
<published>2014-08-01T19:38:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89789#p89789</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89789#p89789"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89789#p89789"><![CDATA[
<div class="quotetitle">OdeOn napisał(a):</div><div class="quotecontent"><br />Podejrzewam ze JTAG nie wyłączony.<br /></div><br />jest wyłączony<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />co jeszcze może być nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1526">programek</a> — 1 sie 2014, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OdeOn]]></name></author>
<updated>2014-08-01T19:30:26+01:00</updated>
<published>2014-08-01T19:30:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89787#p89787</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89787#p89787"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89787#p89787"><![CDATA[
Podejrzewam ze JTAG nie wyłączony.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1407">OdeOn</a> — 1 sie 2014, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[programek]]></name></author>
<updated>2014-07-31T19:09:31+01:00</updated>
<published>2014-07-31T19:09:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89617#p89617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89617#p89617"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89617#p89617"><![CDATA[
witam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />chciałem zmodyfikować ten kod aby działał na atmega16, żebym całość mógł mieć na zestawie ATB ( teraz jest to stykówka połączona z ATB ). <br /><br />to jest zmodyfikowany kod:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 30-07-2014<br /> *      Author: Artur<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br />// preprocesor<br />#define LED_IR_ON PORTC&amp;=~(1&lt;&lt;PC4);<br />#define LED_IR_OFF PORTC|=(1&lt;&lt;PC4);<br /><br />#define LED_ON PORTD&amp;=~(1&lt;&lt;PD4);<br />#define LED_OFF PORTD|=(1&lt;&lt;PD4);<br /><br />#define BUTTON (!(PINC&amp;(1&lt;&lt;PC5)))<br /><br />#define NOSNA_START TIMSK  |= (1&lt;&lt;TOIE0)<br />#define NOSNA_STOP TIMSK &amp;= ~(1&lt;&lt;TOIE0)<br /><br />#define TIMER_START TIMSK |= (1&lt;&lt;OCIE2)<br />#define TIMER_STOP TIMSK &amp;= ~(1&lt;&lt;OCIE2)<br /><br />#define LICZBA_PROBEK 149<br /><br /><br />// definicje zmiennych globalnych<br />volatile uint16_t licznik;<br /><br />uint8_t sygnal=1;<br />uint8_t nr_pomiaru;<br />uint16_t pkr; //przypuszczalny koniec ramki<br />uint8_t wysylanie_start;<br />uint8_t wysylanie_stop;<br />uint16_t zmienna_i;<br />uint8_t puszczono_klawisz;<br />enum tryby {oczekiwanie,wczytywanie, wyslanie,wyzerowanie_przed_wczytaniem,szukanie_ramek,sprawdz_czy_w_pamieci_jest_kod,blad};<br />enum wysylane_ramki {empty,pdtdtdt,pdtcpdtc,pppppp,pdpdpd}; //p - pierwsza, d - druga, t - trzecia, c - czwarta<br />volatile uint8_t tryb_pracy;<br />volatile uint8_t zegar_ir;<br />uint8_t wtrpr;          // wyslij_tylko_raz_pierwsza_ramke;<br /><br />// typedef<br /><br />typedef struct{<br />uint16_t x_pomiar&#91;LICZBA_PROBEK&#93;;<br />    uint8_t x_koniec_ramki_1;<br />    uint8_t x_koniec_ramki_2;<br />    uint8_t x_koniec_ramki_3;<br />    uint8_t x_tryb_wysylania_ramek;<br />} Tkod_pilota;<br /><br />// deklaracje funkcji<br />void timer2_init(void);<br />void timer0_init(void);<br />void mrygnij(uint8_t l_d);<br />void copy_eem_to_ram(void);<br />void copy_ram_to_eem(void);<br /><br />// inne definicje zmiennych<br /><br />Tkod_pilota ram_kod;<br />Tkod_pilota eem_kod EEMEM;<br /><br />int main(void){<br /><br />// dioda debug<br />    DDRD|=(1&lt;&lt;PD4);<br /><br />    // button<br />    DDRC&amp;=(1&lt;&lt;PC5);<br />    PORTC|=(1&lt;&lt;PC5);<br /><br />    // dioda nadawcza<br />    DDRC|=(1&lt;&lt;PC4);<br />    LED_IR_OFF;<br /><br />    timer2_init();<br />    TIMER_START;<br />    timer0_init();<br />    NOSNA_START;<br /><br />    sei();<br /><br />    _delay_ms(10);<br />    mrygnij(1);<br /><br />    if (BUTTON)<br />    tryb_pracy = wyzerowanie_przed_wczytaniem;<br />    else<br />    tryb_pracy = sprawdz_czy_w_pamieci_jest_kod;<br /><br /><br />    while(1){<br /><br />    if (sprawdz_czy_w_pamieci_jest_kod == tryb_pracy){<br />    uint8_t * ram_wsk = (uint8_t*)&amp;ram_kod;<br />            copy_eem_to_ram();<br />            for (zmienna_i=0;zmienna_i&lt;sizeof(ram_kod);zmienna_i++){<br />            if( 0xff == *ram_wsk++) continue;<br />                break;<br />            }<br /><br />            if (zmienna_i == sizeof(ram_kod))<br />            tryb_pracy = blad;<br />            else<br />            tryb_pracy = oczekiwanie;<br />            }<br /><br />        if (blad == tryb_pracy){<br />        while(1){<br />        mrygnij(10);<br />        }<br />        }<br /><br />            if (wyzerowanie_przed_wczytaniem == tryb_pracy){ //start pomiaru<br />            nr_pomiaru=0;<br />                licznik=0;<br />                sygnal=1;<br />                pkr=0;<br />                ram_kod.x_koniec_ramki_1=0;<br />                ram_kod.x_koniec_ramki_2=0;<br />                ram_kod.x_koniec_ramki_3=0;<br />                tryb_pracy=wczytywanie;<br />            }<br />            if(wczytywanie == tryb_pracy){<br />            while(PIND&amp;(1&lt;&lt;PD6)); // czekaj aż zaczniesz odczytywać sygnał z diody odbiorczej<br /><br />                licznik=0;<br />                sygnal=0;<br /><br />                while(nr_pomiaru&lt;LICZBA_PROBEK){<br />                if (wyzerowanie_przed_wczytaniem==tryb_pracy){<br />                //nastąpiło przepełnienie licznika w przerwaniu<br />                break;<br />                }<br />                if ((PIND&amp;(1&lt;&lt;PD6))!=sygnal){<br />                sygnal=1-sygnal;<br />                        ram_kod.x_pomiar&#91;nr_pomiaru&#93;=licznik;<br />                        licznik=0;<br />                        nr_pomiaru++;<br />                }<br />                }<br />                if (wyzerowanie_przed_wczytaniem!=tryb_pracy){<br /><br />                //nastąpiło przepełnienie licznika w przerwaniu<br />                if (empty == ram_kod.x_tryb_wysylania_ramek)<br />                tryb_pracy=szukanie_ramek;<br />                    else<br />                    tryb_pracy=oczekiwanie;<br /><br />                }<br />            }<br />            if (szukanie_ramek==tryb_pracy){<br />            //obliczenie dlugosci ramek<br />                for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++)<br />                if(pkr&lt;ram_kod.x_pomiar&#91;zmienna_i&#93;)<br />                pkr=ram_kod.x_pomiar&#91;zmienna_i&#93;;<br />                        pkr&gt;&gt;=1;<br />                        for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++){<br />                        if (pkr&lt;ram_kod.x_pomiar&#91;zmienna_i&#93;){<br />                        if(!ram_kod.x_koniec_ramki_1)<br />                        ram_kod.x_koniec_ramki_1=zmienna_i;<br />                        else{<br />                        if (!ram_kod.x_koniec_ramki_2)<br />                        ram_kod.x_koniec_ramki_2=zmienna_i;<br />                                    else{<br />                                    ram_kod.x_koniec_ramki_3=zmienna_i;<br />                                        break;<br />                                    }<br />                        }<br />                        }<br />                        }<br />                        if ((ram_kod.x_koniec_ramki_1&lt;10)){             //ramka zbyt krotka<br />                        ram_kod.x_tryb_wysylania_ramek=pdtcpdtc;<br />                        }<br />                        else{<br />                        if (!ram_kod.x_koniec_ramki_2){         //znaleziona tylko pierwsza ramka<br />                                ram_kod.x_tryb_wysylania_ramek=pppppp;<br />                                }<br />                                else{<br />                                if (!ram_kod.x_koniec_ramki_3){ //znalezione 2 ramki<br />                                ram_kod.x_tryb_wysylania_ramek=pdpdpd;<br />                                }<br />                                else{<br />                                ram_kod.x_tryb_wysylania_ramek=pdtdtdt;                                 //znaleziono wszystkie ramki,<br />                                }<br />                                }<br />                        }<br />                        mrygnij(1); //daj znać, że wczytano ramki<br />                        copy_ram_to_eem();<br />                        tryb_pracy=oczekiwanie;<br />            }<br />            if (oczekiwanie == tryb_pracy){<br />            if (BUTTON){<br />            tryb_pracy=wyslanie;<br />            }<br />                else{<br />                wtrpr=0;<br />                }<br />            }<br />            if (wyslanie==tryb_pracy){<br />            switch(ram_kod.x_tryb_wysylania_ramek){<br />                case pdtdtdt:<br />                if (!wtrpr)<br />                        {<br />                wysylanie_start=0;<br />                            wysylanie_stop=ram_kod.x_koniec_ramki_3;<br />                            wtrpr=1;<br />                        }<br />                        else{<br />                        wysylanie_start=ram_kod.x_koniec_ramki_1+1;<br />                            wysylanie_stop=ram_kod.x_koniec_ramki_3;<br />                        }<br />                        break;<br />                case pdtcpdtc:<br />                        wysylanie_start=0;<br />                        wysylanie_stop=LICZBA_PROBEK-1;<br />                            break;<br />                case pppppp:<br />                          wysylanie_start=0;<br />                          wysylanie_stop=ram_kod.x_koniec_ramki_1;<br />                              break;<br />                case pdpdpd:<br />                wysylanie_start=0;<br />                            wysylanie_stop=ram_kod.x_koniec_ramki_2;<br />                            break;<br />                }<br />            for (zmienna_i=wysylanie_start; zmienna_i&lt;=wysylanie_stop; zmienna_i++){<br />            licznik= 0;<br />                        while (licznik&lt;ram_kod.x_pomiar&#91;zmienna_i&#93;){<br />                        if ((!(zmienna_i&amp;0x0001))&amp;&amp;zegar_ir){<br />                        LED_IR_ON;<br />                                LED_ON;<br />                            }<br />                            else{<br />                            LED_IR_OFF;<br />                                LED_OFF;<br />                            }<br />                        }<br />            }<br />                    LED_IR_OFF;<br />                    LED_OFF;<br />                    tryb_pracy=oczekiwanie;<br />            }<br />    }<br />}<br /><br />void timer2_init(void){<br />// ustawienia TIMER2 w tryb CTC<br />    TCCR2 |= (1&lt;&lt;WGM21);  // tryb  CTC<br />    TCCR2 |= (1&lt;&lt;CS21);  // preskaler = 8<br />    OCR2 = 50;  // dodatkowy podział częstotliwości - 10<br />//  TIMSK |= (1&lt;&lt;OCIE2);  // zezwolenie na przerwanie CompareMatch<br />}<br /><br />ISR( TIMER2_COMP_vect ){<br />if ((!(~licznik))&amp;&amp;(nr_pomiaru&lt;=(LICZBA_PROBEK&gt;&gt;1))&amp;&amp;(wczytywanie == tryb_pracy)){ //jeśli licznik osiągnie wartość max (11...111) i nie będzie to ostatni<br />tryb_pracy=wyzerowanie_przed_wczytaniem;<br />    }<br />    licznik++;<br />}<br /><br />void timer0_init(void){<br />TCCR0 |= (1&lt;&lt;CS00);<br />    TCNT0  = 146;<br />//  TIMSK  |= (1&lt;&lt;TOIE0);<br />}<br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0  = 146;<br /><br />    zegar_ir=1-zegar_ir;<br />}<br /><br />void mrygnij(uint8_t l_d){<br />#define CZAS 10<br />LED_ON;<br />    for (uint8_t i=0;i&lt;l_d;i++)<br />    {<br />    _delay_ms(CZAS);<br />        LED_OFF;<br />        _delay_ms(CZAS);<br />    }<br />}<br /><br />void copy_eem_to_ram(void){<br />eeprom_read_block(&amp;ram_kod,&amp;eem_kod,sizeof(ram_kod));<br />}<br />void copy_ram_to_eem(void){<br /> eeprom_write_block(&amp;ram_kod,&amp;eem_kod,sizeof(ram_kod));<br />}[/syntax] <br />Niestety program nie działa poprawnie: po wgraniu całości do avr dioda LED zaczyna mrugać, gdy zresetuje procka równocześnie naciskając button dioda przestaje mrugać. Następnie po skierowaniu pilota od TV w kierunku odbiornika podczerwieni i naciśnięciu przycisku &quot;wł/wył&quot; dioda raz mruga. Teraz wciskając button TV powinien się włączyć, a dioda na ATB mrugać, nie wiem dlaczego dioda LED nie mruga, tylko świeci przez cały czas gdy mam naciśniętego switch'a, a TV się nie włącza. Dodam jeszcze że na atmega8 wszystko ładnie działało.<br /><br />Co jest nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1526">programek</a> — 31 lip 2014, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2014-07-31T15:16:03+01:00</updated>
<published>2014-07-31T15:16:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89588#p89588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89588#p89588"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89588#p89588"><![CDATA[
Jeszcze jedna drobna poprawka w działaniu, teraz układ nie zawiesza się po włączeniu/wyłączeniu mrygania diodą oraz lekko podrasowany schemat (w diagram designer  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1212/16cc1075b82950512ac74dc09e6428df.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/16cc1075b82950512ac74dc09e6428df.png" alt="Obrazek" /></a><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 30-07-2014<br /> *      Author: Artur<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br /><br /><br /><br />// preprocesor<br />#define LED_IR_ON PORTC&amp;=~(1&lt;&lt;PC4);<br />#define LED_IR_OFF PORTC|=(1&lt;&lt;PC4);<br /><br />#define LED_ON PORTD|=(1&lt;&lt;PD4);<br />#define LED_OFF PORTD&amp;=~(1&lt;&lt;PD4);<br /><br />#define BUTTON (!(PINC&amp;(1&lt;&lt;PC5)))<br /><br />#define NOSNA_START TIMSK  |= (1&lt;&lt;TOIE0)<br />#define NOSNA_STOP TIMSK &amp;= ~(1&lt;&lt;TOIE0)<br /><br />#define TIMER_START TIMSK |= (1&lt;&lt;OCIE2)<br />#define TIMER_STOP TIMSK &amp;= ~(1&lt;&lt;OCIE2)<br /><br />#define LICZBA_PROBEK 149<br /><br /><br />// definicje zmiennych globalnych<br />volatile uint16_t licznik;<br /><br />uint8_t sygnal=1;<br />uint8_t nr_pomiaru;<br />uint16_t pkr; //przypuszczalny koniec ramki<br />uint8_t wysylanie_start;<br />uint8_t wysylanie_stop;<br />uint16_t zmienna_i;<br />uint8_t puszczono_klawisz;<br />enum tryby {oczekiwanie,oczekiwanie_na_akcje, wyslanie,maintenance,szukanie_ramek,sprawdz_czy_w_pamieci_jest_kod,blad};<br />enum wysylane_ramki {empty,pdtdtdt,pdtcpdtc,pppppp,pdpdpd}; //p - pierwsza, d - druga, t - trzecia, c - czwarta<br />volatile uint8_t tryb_pracy;<br />volatile uint8_t zegar_ir;<br />uint8_t wtrpr;// wyslij_tylko_raz_pierwsza_ramke;<br /><br />// typedef<br /><br />typedef struct{<br />uint16_t pomiar&#91;LICZBA_PROBEK&#93;;<br />uint8_t koniec_ramki_1;<br />uint8_t koniec_ramki_2;<br />uint8_t koniec_ramki_3;<br />uint8_t x_tryb_wysylania_ramek;<br />uint8_t mrygaj_diodami;<br />} Tkod_pilota;<br />// deklaracje funkcji<br />void timer2_init(void);<br />void timer0_init(void);<br />void mrygnij(uint8_t l_d);<br />void copy_eem_to_ram(void);<br />void copy_ram_to_eem(void);<br /><br />// inne definicje zmiennych<br /><br />Tkod_pilota ram_kod;<br />Tkod_pilota eem_kod EEMEM;<br /><br />int main(void){<br /><br />// dioda debug<br />DDRD|=(1&lt;&lt;PD4);<br /><br />// button<br />DDRC&amp;=(1&lt;&lt;PC5);<br />PORTC|=(1&lt;&lt;PC5);<br /><br />// dioda nadawcza<br />DDRC|=(1&lt;&lt;PC4);<br />LED_IR_OFF;<br /><br />timer2_init();<br />TIMER_START;<br />timer0_init();<br />NOSNA_START;<br /><br />sei();<br /><br />_delay_ms(10);<br />mrygnij(1);<br />if (BUTTON)<br />tryb_pracy = maintenance;<br />else<br />tryb_pracy = sprawdz_czy_w_pamieci_jest_kod;<br /><br /><br />while(1){<br /><br />if (sprawdz_czy_w_pamieci_jest_kod == tryb_pracy){<br />uint8_t * ram_wsk = (uint8_t*)&amp;ram_kod;<br />copy_eem_to_ram();<br />for (zmienna_i=0;zmienna_i&lt;sizeof(ram_kod);zmienna_i++){<br />if( 0xff == *ram_wsk++) continue;<br />break;<br />}<br /><br />if (zmienna_i == sizeof(ram_kod))<br />tryb_pracy = blad;<br />else<br />tryb_pracy = oczekiwanie;<br />}<br /><br />if (blad == tryb_pracy){<br />while(1){<br />mrygnij(10);<br />}<br /><br />}<br /><br />if (maintenance == tryb_pracy){ //start pomiaru<br />nr_pomiaru=0;<br />licznik=0;<br />sygnal=1;<br />pkr=0;<br />ram_kod.koniec_ramki_1=0;<br />ram_kod.koniec_ramki_2=0;<br />ram_kod.koniec_ramki_3=0;<br />tryb_pracy=oczekiwanie_na_akcje;<br />}<br /><br />if(oczekiwanie_na_akcje == tryb_pracy){<br />while(PINB&amp;(1&lt;&lt;PB0)){ // czekaj aż zaczniesz odczytywać sygnał z diody odbiorczej<br />if(!BUTTON)<br />puszczono_klawisz=1;<br />if (BUTTON&amp;&amp;puszczono_klawisz)<br />{<br />LED_ON;<br />puszczono_klawisz=0;<br />copy_eem_to_ram();<br />ram_kod.mrygaj_diodami=1-ram_kod.mrygaj_diodami;<br />copy_ram_to_eem();<br />LED_OFF;<br />tryb_pracy=oczekiwanie;<br />break;<br />}<br />}<br />licznik=0;<br />sygnal=0;<br />if (tryb_pracy!=oczekiwanie){<br />while(nr_pomiaru&lt;LICZBA_PROBEK){<br />if (maintenance==tryb_pracy){<br />//nastąpiło przepełnienie licznika w przerwaniu<br />break;<br />}<br />if ((PINB&amp;(1&lt;&lt;PB0))!=sygnal){<br />sygnal=1-sygnal;<br />ram_kod.pomiar&#91;nr_pomiaru&#93;=licznik;<br />licznik=0;<br />nr_pomiaru++;<br />}<br />}<br />}<br />if (maintenance!=tryb_pracy){<br />//nastąpiło przepełnienie licznika w przerwaniu<br />if (empty == ram_kod.x_tryb_wysylania_ramek)<br />tryb_pracy=szukanie_ramek;<br />else{<br />tryb_pracy=oczekiwanie;<br />}<br />}<br />}<br /><br />if (szukanie_ramek==tryb_pracy){<br />//obliczenie dlugosci ramek<br />for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++)<br />if(pkr&lt;ram_kod.pomiar&#91;zmienna_i&#93;)<br />pkr=ram_kod.pomiar&#91;zmienna_i&#93;;<br />pkr&gt;&gt;=1;<br />for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++){<br />if (pkr&lt;ram_kod.pomiar&#91;zmienna_i&#93;){<br />if(!ram_kod.koniec_ramki_1)<br />ram_kod.koniec_ramki_1=zmienna_i;<br />else{<br />if (!ram_kod.koniec_ramki_2)<br />ram_kod.koniec_ramki_2=zmienna_i;<br />else{<br />ram_kod.koniec_ramki_3=zmienna_i;<br />break;<br />}<br />}<br />}<br />}<br />if ((ram_kod.koniec_ramki_1&lt;10)){//ramka zbyt krotka<br />ram_kod.x_tryb_wysylania_ramek=pdtcpdtc;<br />}<br />else{<br />if (!ram_kod.koniec_ramki_2){//znaleziona tylko pierwsza ramka<br />ram_kod.x_tryb_wysylania_ramek=pppppp;<br /><br /><br />}<br />else{<br />if (!ram_kod.koniec_ramki_3){//znalezione 2 ramki<br />ram_kod.x_tryb_wysylania_ramek=pdpdpd;<br />}<br />else{<br />ram_kod.x_tryb_wysylania_ramek=pdtdtdt;//znaleziono wszystkie ramki,<br />}<br />}<br />}<br />copy_ram_to_eem();<br />mrygnij(1); //daj znać, że wczytano ramki<br />tryb_pracy=oczekiwanie;<br />}<br /><br />if (oczekiwanie == tryb_pracy){<br />if (BUTTON){<br />tryb_pracy=wyslanie;<br />}<br />else{<br />wtrpr=0;<br />}<br />}<br /><br />if (wyslanie==tryb_pracy){<br />switch(ram_kod.x_tryb_wysylania_ramek){<br />case pdtdtdt:<br />if (!wtrpr)<br />{<br />wysylanie_start=0;<br />wysylanie_stop=ram_kod.koniec_ramki_3;<br />wtrpr=1;<br />}<br />else{<br />wysylanie_start=ram_kod.koniec_ramki_1+1;<br />wysylanie_stop=ram_kod.koniec_ramki_3;<br />}<br />break;<br />case pdtcpdtc:<br />wysylanie_start=0;<br />wysylanie_stop=LICZBA_PROBEK-1;<br />break;<br />case pppppp:<br />wysylanie_start=0;<br />wysylanie_stop=ram_kod.koniec_ramki_1;<br />break;<br />case pdpdpd:<br />wysylanie_start=0;<br />wysylanie_stop=ram_kod.koniec_ramki_2;<br />break;<br />}<br />for (zmienna_i=wysylanie_start; zmienna_i&lt;=wysylanie_stop; zmienna_i++){<br />licznik= 0;<br />while (licznik&lt;ram_kod.pomiar&#91;zmienna_i&#93;){<br />if ((!(zmienna_i&amp;0x0001))&amp;&amp;zegar_ir){<br />LED_IR_ON;<br />if (ram_kod.mrygaj_diodami)<br />LED_ON;<br />}<br />else{<br />LED_IR_OFF;<br />LED_OFF;<br />}<br />}<br />}<br />LED_IR_OFF;<br />LED_OFF;<br />tryb_pracy=oczekiwanie;<br />}<br />}<br />}<br /><br />void timer2_init(void){<br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS21);// preskaler = 8<br />OCR2 = 50;// dodatkowy podział częstotliwości - 10<br />//TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br />}<br /><br />ISR( TIMER2_COMP_vect ){<br />if ((!(~licznik))&amp;&amp;(nr_pomiaru&lt;=(LICZBA_PROBEK&gt;&gt;1))&amp;&amp;(oczekiwanie_na_akcje == tryb_pracy)){ //jeśli licznik osiągnie wartość max (11...111) i nie będzie to ostatni<br />tryb_pracy=maintenance;<br />}<br />licznik++;<br />}<br /><br />void timer0_init(void){<br />TCCR0 |= (1&lt;&lt;CS00);<br />TCNT0  = 146;<br />//TIMSK  |= (1&lt;&lt;TOIE0);<br />}<br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0  = 146;<br /><br />zegar_ir=1-zegar_ir;<br />}<br /><br />void mrygnij(uint8_t l_d){<br />#define CZAS 10<br />LED_ON;<br />for (uint8_t i=0;i&lt;l_d;i++)<br />{<br />_delay_ms(CZAS);<br />LED_OFF;<br />_delay_ms(CZAS);<br />}<br />}<br /><br />void copy_eem_to_ram(void){<br /><br />eeprom_read_block(&amp;ram_kod,&amp;eem_kod,sizeof(ram_kod));<br /><br /><br />}<br />void copy_ram_to_eem(void){<br />eeprom_write_block(&amp;ram_kod,&amp;eem_kod,sizeof(ram_kod));<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 31 lip 2014, o 15:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matrix]]></name></author>
<updated>2014-07-30T18:43:52+01:00</updated>
<published>2014-07-30T18:43:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89538#p89538</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89538#p89538"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89538#p89538"><![CDATA[
Przepraszam autora za offtop.<br />Znalazłem program o nazwie diagram designer.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=689">matrix</a> — 30 lip 2014, o 18:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2014-07-30T18:18:43+01:00</updated>
<published>2014-07-30T18:18:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89536#p89536</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89536#p89536"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89536#p89536"><![CDATA[
A inkscape sie nie nada? <br /><br />Sent from my mobile.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 30 lip 2014, o 18:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matrix]]></name></author>
<updated>2014-07-30T18:03:46+01:00</updated>
<published>2014-07-30T18:03:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89535#p89535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89535#p89535"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89535#p89535"><![CDATA[
A nie ma nic darmowego bez ograniczeń czasowych?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=689">matrix</a> — 30 lip 2014, o 18:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[lukas_]]></name></author>
<updated>2014-07-30T16:26:34+01:00</updated>
<published>2014-07-30T16:26:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89517#p89517</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89517#p89517"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89517#p89517"><![CDATA[
<div class="quotetitle">matrix napisał(a):</div><div class="quotecontent"><br />W czym robiłeś schemat blokowy ?<br /></div><br />Sam o to pytałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <!-- m --><a class="postlink" href="https://www.lucidchart.com/documents/edit/9e151ed9-10ad-44b2-91a1-ff0511822a88/0" >https://www.lucidchart.com/documents/ed ... 11822a88/0</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1060">lukas_</a> — 30 lip 2014, o 16:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matrix]]></name></author>
<updated>2014-07-30T16:01:28+01:00</updated>
<published>2014-07-30T16:01:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89508#p89508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89508#p89508"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89508#p89508"><![CDATA[
W czym robiłeś schemat blokowy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=689">matrix</a> — 30 lip 2014, o 16:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2014-07-30T15:45:52+01:00</updated>
<published>2014-07-30T15:45:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89504#p89504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89504#p89504"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89504#p89504"><![CDATA[
Mały update, do pracy zaprzęgnięto EEPROM <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Schemat blokowy myślę w miarę czytelnie przedstawi działanie algorytmu:<br /><a href="http://forum.atnel.pl/_obrazki/o/1212/53fa951e4c3e845b6e994216eaef6d87.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/53fa951e4c3e845b6e994216eaef6d87.jpg" alt="Obrazek" /></a><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 30-07-2014<br /> *      Author: Artur<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br /><br /><br /><br />// preprocesor<br />#define LED_IR_ON PORTC&amp;=~(1&lt;&lt;PC4);<br />#define LED_IR_OFF PORTC|=(1&lt;&lt;PC4);<br /><br />#define LED_ON PORTD|=(1&lt;&lt;PD4);<br />#define LED_OFF PORTD&amp;=~(1&lt;&lt;PD4);<br /><br />#define BUTTON (!(PINC&amp;(1&lt;&lt;PC5)))<br /><br />#define NOSNA_START TIMSK  |= (1&lt;&lt;TOIE0)<br />#define NOSNA_STOP TIMSK &amp;= ~(1&lt;&lt;TOIE0)<br /><br />#define TIMER_START TIMSK |= (1&lt;&lt;OCIE2)<br />#define TIMER_STOP TIMSK &amp;= ~(1&lt;&lt;OCIE2)<br /><br />#define LICZBA_PROBEK 149<br /><br /><br />// definicje zmiennych globalnych<br />volatile uint16_t licznik;<br /><br />uint8_t sygnal=1;<br />uint8_t nr_pomiaru;<br />uint16_t pkr; //przypuszczalny koniec ramki<br />uint8_t wysylanie_start;<br />uint8_t wysylanie_stop;<br />uint16_t zmienna_i;<br />uint8_t puszczono_klawisz;<br />enum tryby {oczekiwanie,wczytywanie, wyslanie,wyzerowanie_przed_wczytaniem,szukanie_ramek,sprawdz_czy_w_pamieci_jest_kod,blad};<br />enum wysylane_ramki {empty,pdtdtdt,pdtcpdtc,pppppp,pdpdpd}; //p - pierwsza, d - druga, t - trzecia, c - czwarta<br />volatile uint8_t tryb_pracy;<br />volatile uint8_t zegar_ir;<br />uint8_t wtrpr;// wyslij_tylko_raz_pierwsza_ramke;<br /><br />// typedef<br /><br />typedef struct{<br />uint16_t x_pomiar&#91;LICZBA_PROBEK&#93;;<br />uint8_t x_koniec_ramki_1;<br />uint8_t x_koniec_ramki_2;<br />uint8_t x_koniec_ramki_3;<br />uint8_t x_tryb_wysylania_ramek;<br />uint8_t mrygaj_diodami;<br />} Tkod_pilota;<br />// deklaracje funkcji<br />void timer2_init(void);<br />void timer0_init(void);<br />void mrygnij(uint8_t l_d);<br />void copy_eem_to_ram(void);<br />void copy_ram_to_eem(void);<br /><br />// inne definicje zmiennych<br /><br />Tkod_pilota ram_kod;<br />Tkod_pilota eem_kod EEMEM;<br /><br />int main(void){<br /><br />// dioda debug<br />DDRD|=(1&lt;&lt;PD4);<br /><br />// button<br />DDRC&amp;=(1&lt;&lt;PC5);<br />PORTC|=(1&lt;&lt;PC5);<br /><br />// dioda nadawcza<br />DDRC|=(1&lt;&lt;PC4);<br />LED_IR_OFF;<br /><br />timer2_init();<br />TIMER_START;<br />timer0_init();<br />NOSNA_START;<br /><br />sei();<br /><br />_delay_ms(10);<br />mrygnij(1);<br />if (BUTTON)<br />tryb_pracy = wyzerowanie_przed_wczytaniem;<br />else<br />tryb_pracy = sprawdz_czy_w_pamieci_jest_kod;<br /><br /><br />while(1){<br /><br />if (sprawdz_czy_w_pamieci_jest_kod == tryb_pracy){<br />uint8_t * ram_wsk = (uint8_t*)&amp;ram_kod;<br />copy_eem_to_ram();<br />for (zmienna_i=0;zmienna_i&lt;sizeof(ram_kod);zmienna_i++){<br />if( 0xff == *ram_wsk++) continue;<br />break;<br />}<br /><br />if (zmienna_i == sizeof(ram_kod))<br />tryb_pracy = blad;<br />else<br />tryb_pracy = oczekiwanie;<br />}<br /><br />if (blad == tryb_pracy){<br />while(1){<br />mrygnij(10);<br />}<br /><br />}<br /><br />if (wyzerowanie_przed_wczytaniem == tryb_pracy){ //start pomiaru<br />nr_pomiaru=0;<br />licznik=0;<br />sygnal=1;<br />pkr=0;<br />ram_kod.x_koniec_ramki_1=0;<br />ram_kod.x_koniec_ramki_2=0;<br />ram_kod.x_koniec_ramki_3=0;<br />tryb_pracy=wczytywanie;<br />}<br />if(wczytywanie == tryb_pracy){<br />while(PINB&amp;(1&lt;&lt;PB0)){ // czekaj aż zaczniesz odczytywać sygnał z diody odbiorczej<br />if(!BUTTON)<br />puszczono_klawisz=1;<br />if (BUTTON&amp;&amp;puszczono_klawisz)<br />{<br />LED_ON;<br />puszczono_klawisz=0;<br />copy_eem_to_ram();<br />ram_kod.mrygaj_diodami=1-ram_kod.mrygaj_diodami;<br />copy_ram_to_eem();<br />LED_OFF;<br />while(1);<br />}<br />}<br />licznik=0;<br />sygnal=0;<br />while(nr_pomiaru&lt;LICZBA_PROBEK){<br />if (wyzerowanie_przed_wczytaniem==tryb_pracy){<br />//nastąpiło przepełnienie licznika w przerwaniu<br />break;<br />}<br />if ((PINB&amp;(1&lt;&lt;PB0))!=sygnal){<br />sygnal=1-sygnal;<br />ram_kod.x_pomiar&#91;nr_pomiaru&#93;=licznik;<br />licznik=0;<br />nr_pomiaru++;<br />}<br />}<br />if (wyzerowanie_przed_wczytaniem!=tryb_pracy){<br />//nastąpiło przepełnienie licznika w przerwaniu<br />if (empty == ram_kod.x_tryb_wysylania_ramek)<br />tryb_pracy=szukanie_ramek;<br />else{<br />tryb_pracy=oczekiwanie;<br />}<br />}<br />}<br />if (szukanie_ramek==tryb_pracy){<br />//obliczenie dlugosci ramek<br />for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++)<br />if(pkr&lt;ram_kod.x_pomiar&#91;zmienna_i&#93;)<br />pkr=ram_kod.x_pomiar&#91;zmienna_i&#93;;<br />pkr&gt;&gt;=1;<br />for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++){<br />if (pkr&lt;ram_kod.x_pomiar&#91;zmienna_i&#93;){<br />if(!ram_kod.x_koniec_ramki_1)<br />ram_kod.x_koniec_ramki_1=zmienna_i;<br />else{<br />if (!ram_kod.x_koniec_ramki_2)<br />ram_kod.x_koniec_ramki_2=zmienna_i;<br />else{<br />ram_kod.x_koniec_ramki_3=zmienna_i;<br />break;<br />}<br />}<br />}<br />}<br />if ((ram_kod.x_koniec_ramki_1&lt;10)){//ramka zbyt krotka<br />ram_kod.x_tryb_wysylania_ramek=pdtcpdtc;<br />}<br />else{<br />if (!ram_kod.x_koniec_ramki_2){//znaleziona tylko pierwsza ramka<br />ram_kod.x_tryb_wysylania_ramek=pppppp;<br /><br /><br />}<br />else{<br />if (!ram_kod.x_koniec_ramki_3){//znalezione 2 ramki<br />ram_kod.x_tryb_wysylania_ramek=pdpdpd;<br />}<br />else{<br />ram_kod.x_tryb_wysylania_ramek=pdtdtdt;//znaleziono wszystkie ramki,<br />}<br />}<br />}<br />mrygnij(1); //daj znać, że wczytano ramki<br />copy_ram_to_eem();<br />tryb_pracy=oczekiwanie;<br />}<br />if (oczekiwanie == tryb_pracy){<br />if (BUTTON){<br />tryb_pracy=wyslanie;<br />}<br />else{<br />wtrpr=0;<br />}<br />}<br />if (wyslanie==tryb_pracy){<br />switch(ram_kod.x_tryb_wysylania_ramek){<br />case pdtdtdt:<br />if (!wtrpr)<br />{<br />wysylanie_start=0;<br />wysylanie_stop=ram_kod.x_koniec_ramki_3;<br />wtrpr=1;<br />}<br />else{<br />wysylanie_start=ram_kod.x_koniec_ramki_1+1;<br />wysylanie_stop=ram_kod.x_koniec_ramki_3;<br />}<br />break;<br />case pdtcpdtc:<br />wysylanie_start=0;<br />wysylanie_stop=LICZBA_PROBEK-1;<br />break;<br />case pppppp:<br />wysylanie_start=0;<br />wysylanie_stop=ram_kod.x_koniec_ramki_1;<br />break;<br />case pdpdpd:<br />wysylanie_start=0;<br />wysylanie_stop=ram_kod.x_koniec_ramki_2;<br />break;<br />}<br />for (zmienna_i=wysylanie_start; zmienna_i&lt;=wysylanie_stop; zmienna_i++){<br />licznik= 0;<br />while (licznik&lt;ram_kod.x_pomiar&#91;zmienna_i&#93;){<br />if ((!(zmienna_i&amp;0x0001))&amp;&amp;zegar_ir){<br />LED_IR_ON;<br />if (ram_kod.mrygaj_diodami)<br />LED_ON;<br />}<br />else{<br />LED_IR_OFF;<br />LED_OFF;<br />}<br />}<br />}<br />LED_IR_OFF;<br />LED_OFF;<br />tryb_pracy=oczekiwanie;<br />}<br />}<br />}<br /><br />void timer2_init(void){<br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS21);// preskaler = 8<br />OCR2 = 50;// dodatkowy podział częstotliwości - 10<br />//TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br />}<br /><br />ISR( TIMER2_COMP_vect ){<br />if ((!(~licznik))&amp;&amp;(nr_pomiaru&lt;=(LICZBA_PROBEK&gt;&gt;1))&amp;&amp;(wczytywanie == tryb_pracy)){ //jeśli licznik osiągnie wartość max (11...111) i nie będzie to ostatni<br />tryb_pracy=wyzerowanie_przed_wczytaniem;<br />}<br />licznik++;<br />}<br /><br />void timer0_init(void){<br />TCCR0 |= (1&lt;&lt;CS00);<br />TCNT0  = 146;<br />//TIMSK  |= (1&lt;&lt;TOIE0);<br />}<br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0  = 146;<br /><br />zegar_ir=1-zegar_ir;<br />}<br /><br />void mrygnij(uint8_t l_d){<br />#define CZAS 10<br />LED_ON;<br />for (uint8_t i=0;i&lt;l_d;i++)<br />{<br />_delay_ms(CZAS);<br />LED_OFF;<br />_delay_ms(CZAS);<br />}<br />}<br /><br />void copy_eem_to_ram(void){<br /><br />eeprom_read_block(&amp;ram_kod,&amp;eem_kod,sizeof(ram_kod));<br /><br /><br />}<br />void copy_ram_to_eem(void){<br />eeprom_write_block(&amp;ram_kod,&amp;eem_kod,sizeof(ram_kod));<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 30 lip 2014, o 15:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2014-07-29T21:25:04+01:00</updated>
<published>2014-07-29T21:25:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89405#p89405</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89405#p89405"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89405#p89405"><![CDATA[
Kod jest wysyłany dopiero po wciśnięciu klawisza (tact switch 6x6mm). Wtedy też mruga zielona dioda, co widać na filmiku. Na płytce znajduje się też drugi klawisz do resetowania układu (tact switch 3x6mm). Przy każdym uruchomieniu/resecie układu trzeba do urządzenia przystawić pilot i wcisnąć klawisz, który ma być zapamiętany. Mam nadzieję, że coś tam udało mi się rozjaśnić.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1212/02a468b0307b0ee07b05ca08a86c1a50.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/02a468b0307b0ee07b05ca08a86c1a50.jpg" alt="Obrazek" /></a><br /><br />Jeśli chodzi o przetestowanie zabawki w terenie, to pewnie będę musiał poczekać do weekendu, powkurzam kumpla przy piwku <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 29 lip 2014, o 21:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matrix]]></name></author>
<updated>2014-07-29T15:33:38+01:00</updated>
<published>2014-07-29T15:33:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89345#p89345</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89345#p89345"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89345#p89345"><![CDATA[
Ale odtwarza sam z siebie ? Cyklicznie ? Czy jak ktoś naciśnie jakiś przycisk to to urządzenie wyśle inny kod ?<br />To taki pipek dręczyciel w wersji infrared ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=689">matrix</a> — 29 lip 2014, o 15:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2014-07-28T20:26:00+01:00</updated>
<published>2014-07-28T20:26:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89291#p89291</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89291#p89291"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89291#p89291"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Jedno pytanie bo być może nie zrozumiałem. Co to urządzenie robi ?<br /></div> Układ zapamiętuje dowolny kod z pilota a następnie go odtwarza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 28 lip 2014, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matrix]]></name></author>
<updated>2014-07-28T19:59:26+01:00</updated>
<published>2014-07-28T19:59:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89286#p89286</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89286#p89286"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89286#p89286"><![CDATA[
Jedno pytanie bo być może nie zrozumiałem. Co to urządzenie robi ?<br /><br /><br /><br />No i se namazałem z mojego myPhone Cube.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=689">matrix</a> — 28 lip 2014, o 19:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OdeOn]]></name></author>
<updated>2014-07-28T19:31:28+01:00</updated>
<published>2014-07-28T19:31:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89284#p89284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89284#p89284"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89284#p89284"><![CDATA[
Czy ja dobrze widzę, że w momencie 1:13 filmu widać wysyłane dane z pilota w stronę telewizora.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1407">OdeOn</a> — 28 lip 2014, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2014-07-28T19:22:54+01:00</updated>
<published>2014-07-28T19:22:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89283#p89283</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89283#p89283"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89283#p89283"><![CDATA[
<div class="quotetitle">dambo napisał(a):</div><div class="quotecontent"><br />może jakiś filmik z testów na rodzinie/znajomych ?<br /></div><br /><br />Zdjęcie z limem, po testach <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez Gość — 28 lip 2014, o 19:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-07-28T18:17:22+01:00</updated>
<published>2014-07-28T18:17:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89274#p89274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89274#p89274"/>
<title type="html"><![CDATA[Re: Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89274#p89274"><![CDATA[
pierwszy! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />No patrz pan jaki figlarz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... kolega widzę cierpi na przerośniętą formę bakcyla elektroniki i programowania <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ... bakcyla pasji ...<br /><br />tyle ostatnio projektów i to jakich fajnych <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />ten też jest świetny ... z mojej strony GRATULACJE<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 lip 2014, o 18:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2014-07-28T18:38:47+01:00</updated>
<published>2014-07-28T17:15:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89265#p89265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89265#p89265"/>
<title type="html"><![CDATA[Figlarz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7938&amp;p=89265#p89265"><![CDATA[
Zgodnie z tytułem, zabawka służy do płatania figli <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1212/f6a1c9224b66946d7d83682c76a59325.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/f6a1c9224b66946d7d83682c76a59325.jpg" alt="Obrazek" /></a> <a href="http://forum.atnel.pl/_obrazki/o/1212/afe04474bde5075f3086be3813f29b9c.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/afe04474bde5075f3086be3813f29b9c.jpg" alt="Obrazek" /></a> <a href="http://forum.atnel.pl/_obrazki/o/1212/48647b1fe2306c50f0ac743888164180.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/48647b1fe2306c50f0ac743888164180.jpg" alt="Obrazek" /></a><br /><a href="http://forum.atnel.pl/_obrazki/o/1212/a5ea1027be951480d5f209bfd5cf1936.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/a5ea1027be951480d5f209bfd5cf1936.png" alt="Obrazek" /></a> <a href="http://forum.atnel.pl/_obrazki/o/1212/d63c7240e5bc5642a82c8f83eaa01d0c.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/d63c7240e5bc5642a82c8f83eaa01d0c.png" alt="Obrazek" /></a> <a href="http://forum.atnel.pl/_obrazki/o/1212/e4c49b1689b529393e1e1206a2a659de.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/e4c49b1689b529393e1e1206a2a659de.png" alt="Obrazek" /></a><br />Układ działa następująco: przy starcie wita się poprzez mrugnięcie diodą. Następnie czeka na pojawienie się sygnału z pilota. Gdy go zapamięta, mrugnie drugi raz. Teraz po wciśnięciu klawisza będzie wysyłał sklonowany sygnał. Razem z diodą IR będzie mrugała zielona dioda. Można ją jednak wyłączyć (tryb dyskretny  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ) poprzez trzymanie klawisza przy resetowaniu/uruchamianiu układu. <br /><br />Jak na razie testowałem 6 różnych pilotów i za każdym razem udało mi się oszukać odbiorniki. Zasięg pilota zwiększyłem łącząc równolegle dwa rezystory 39Ohm. Za źródło zasilania posłużyła mi nieużywana bateria z telefonu. Procek to atmega8, wewnętrzny oscylator 8MHz.<br /><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 28-07-2014<br /> *      Author: Artur<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />// preprocesor<br />#define LED_IR_ON PORTC&amp;=~(1&lt;&lt;PC4);<br />#define LED_IR_OFF PORTC|=(1&lt;&lt;PC4);<br /><br />#define LED_ON PORTD|=(1&lt;&lt;PD4);<br />#define LED_OFF PORTD&amp;=~(1&lt;&lt;PD4);<br /><br />#define BUTTON (!(PINC&amp;(1&lt;&lt;PC5)))<br /><br />#define NOSNA_START TIMSK  |= (1&lt;&lt;TOIE0)<br />#define NOSNA_STOP TIMSK &amp;= ~(1&lt;&lt;TOIE0)<br /><br />#define TIMER_START TIMSK |= (1&lt;&lt;OCIE2)<br />#define TIMER_STOP TIMSK &amp;= ~(1&lt;&lt;OCIE2)<br /><br />#define LICZBA_PROBEK 149<br /><br /><br />// definicje zmiennych globalnych<br />volatile uint16_t licznik;<br /><br />uint8_t sygnal=1;<br />uint16_t pomiar&#91;LICZBA_PROBEK&#93;;<br />uint8_t nr_pomiaru;<br />uint16_t pkr; //przypuszczalny koniec ramki<br />uint8_t koniec_ramki_1;<br />uint8_t koniec_ramki_2;<br />uint8_t koniec_ramki_3;<br />uint8_t wysylanie_start;<br />uint8_t wysylanie_stop;<br />uint16_t zmienna_i;<br />enum tryby {oczekiwanie,wczytywanie, wyslanie,wyzerowanie_przed_wczytaniem,szukanie_ramek};<br />enum wysylane_ramki {empty,pdtdtdt,pdtcpdtc,pppppp,pdpdpd}; //p - pierwsza, d - druga, t - trzecia, c - czwarta<br />volatile uint8_t tryb_pracy=wyzerowanie_przed_wczytaniem;<br />uint8_t tryb_wysylania_ramek=empty;<br />volatile uint8_t zegar_ir;<br />uint8_t mrygaj_diodami=1;<br />uint8_t wtrpr;// wyslij_tylko_raz_pierwsza_ramke;<br /><br />// deklaracje funkcji<br />void timer2_init(void);<br />void timer0_init(void);<br />void mrygnij(uint8_t l_d);<br /><br />int main(void){<br /><br />// dioda debug<br />DDRD|=(1&lt;&lt;PD4);<br /><br />// button<br />DDRC&amp;=(1&lt;&lt;PC5);<br />PORTC|=(1&lt;&lt;PC5);<br /><br />// dioda nadawcza<br />DDRC|=(1&lt;&lt;PC4);<br />LED_IR_OFF;<br /><br />timer2_init();<br />timer0_init();<br />NOSNA_START;<br /><br />sei();<br /><br />_delay_ms(10);<br />mrygnij(1);<br />if (BUTTON)<br />mrygaj_diodami=0;<br /><br />while(1){<br /><br />if (wyzerowanie_przed_wczytaniem == tryb_pracy){ //start pomiaru<br />nr_pomiaru=0;<br />licznik=0;<br />sygnal=1;<br />pkr=0;<br />koniec_ramki_1=0;<br />koniec_ramki_2=0;<br />koniec_ramki_3=0;<br />tryb_pracy=wczytywanie;<br />}<br />if(wczytywanie == tryb_pracy){<br />while(PINB&amp;(1&lt;&lt;PB0)); // czekaj aż zaczniesz odczytywać sygnał z diody odbiorczej<br />licznik=0;<br />sygnal=0;<br />TIMER_START;<br />while(nr_pomiaru&lt;LICZBA_PROBEK){<br />if (wyzerowanie_przed_wczytaniem==tryb_pracy){<br />//nastąpiło przepełnienie licznika w przerwaniu<br />break;<br />}<br />if ((PINB&amp;(1&lt;&lt;PB0))!=sygnal){<br />sygnal=1-sygnal;<br />pomiar&#91;nr_pomiaru&#93;=licznik;<br />licznik=0;<br />nr_pomiaru++;<br />}<br />}<br />if (wyzerowanie_przed_wczytaniem!=tryb_pracy){<br />//nastąpiło przepełnienie licznika w przerwaniu<br />if (empty == tryb_wysylania_ramek)<br />tryb_pracy=szukanie_ramek;<br />else{<br />tryb_pracy=oczekiwanie;<br />}<br />}<br />}<br />if (szukanie_ramek==tryb_pracy){<br />//obliczenie dlugosci ramek<br />for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++)<br />if(pkr&lt;pomiar&#91;zmienna_i&#93;)<br />pkr=pomiar&#91;zmienna_i&#93;;<br />pkr&gt;&gt;=1;<br />for (zmienna_i=0;zmienna_i&lt;LICZBA_PROBEK;zmienna_i++){<br />if (pkr&lt;pomiar&#91;zmienna_i&#93;){<br />if(!koniec_ramki_1)<br />koniec_ramki_1=zmienna_i;<br />else{<br />if (!koniec_ramki_2)<br />koniec_ramki_2=zmienna_i;<br />else{<br />koniec_ramki_3=zmienna_i;<br />break;<br />}<br />}<br />}<br />}<br />if ((koniec_ramki_1&lt;10)){//ramka zbyt krotka<br />tryb_wysylania_ramek=pdtcpdtc;<br />}<br />else{<br />if (!koniec_ramki_2){//znaleziona tylko pierwsza ramka<br />tryb_wysylania_ramek=pppppp;<br /><br /><br />}<br />else{<br />if (!koniec_ramki_3){//znalezione 2 ramki<br />tryb_wysylania_ramek=pdpdpd;<br />}<br />else{<br />tryb_wysylania_ramek=pdtdtdt;//znaleziono wszystkie ramki,<br />}<br />}<br />}<br />mrygnij(1); //daj znać, że wczytano ramki<br />tryb_pracy=oczekiwanie;<br />}<br />if (oczekiwanie == tryb_pracy){<br />if (BUTTON){<br />tryb_pracy=wyslanie;<br />}<br />else{<br />wtrpr=0;<br />}<br />}<br />if (wyslanie==tryb_pracy){<br />switch(tryb_wysylania_ramek){<br />case pdtdtdt:<br />if (!wtrpr)<br />{<br />wysylanie_start=0;<br />wysylanie_stop=koniec_ramki_3;<br />wtrpr=1;<br />}<br />else{<br />wysylanie_start=koniec_ramki_1+1;<br />wysylanie_stop=koniec_ramki_3;<br />}<br />break;<br />case pdtcpdtc:<br />wysylanie_start=0;<br />wysylanie_stop=LICZBA_PROBEK-1;<br />break;<br />case pppppp:<br />wysylanie_start=0;<br />wysylanie_stop=koniec_ramki_1;<br />break;<br />case pdpdpd:<br />wysylanie_start=0;<br />wysylanie_stop=koniec_ramki_2;<br />break;<br />}<br />for (zmienna_i=wysylanie_start; zmienna_i&lt;=wysylanie_stop; zmienna_i++){<br />licznik= 0;<br />while (licznik&lt;pomiar&#91;zmienna_i&#93;){<br />if ((!(zmienna_i&amp;0x0001))&amp;&amp;zegar_ir){<br />LED_IR_ON;<br />if (mrygaj_diodami)<br />LED_ON;<br />}<br />else{<br />LED_IR_OFF;<br />LED_OFF;<br />}<br />}<br />}<br />LED_IR_OFF;<br />LED_OFF;<br />tryb_pracy=oczekiwanie;<br />}<br />}<br />}<br /><br />void timer2_init(void){<br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS21);// preskaler = 8<br />OCR2 = 50;// dodatkowy podział częstotliwości - 10<br />//TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br />}<br /><br />ISR( TIMER2_COMP_vect ){<br />if ((!(~licznik))&amp;&amp;(nr_pomiaru&lt;=(LICZBA_PROBEK&gt;&gt;1))&amp;&amp;(wczytywanie == tryb_pracy)){ //jeśli licznik osiągnie wartość max (11...111) i nie będzie to ostatni<br />tryb_pracy=wyzerowanie_przed_wczytaniem;<br />}<br />licznik++;<br />}<br /><br />void timer0_init(void){<br />TCCR0 |= (1&lt;&lt;CS00);<br />TCNT0  = 146;<br />//TIMSK  |= (1&lt;&lt;TOIE0);<br />}<br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0  = 146;<br /><br />zegar_ir=1-zegar_ir;<br />}<br /><br />void mrygnij(uint8_t l_d){<br />#define CZAS 10<br />LED_ON;<br />for (uint8_t i=0;i&lt;l_d;i++)<br />{<br />_delay_ms(CZAS);<br />LED_OFF;<br />_delay_ms(CZAS);<br />}<br />}[/syntax]<br /><br /><br />Na koniec prezentacja: <div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 28 lip 2014, o 17:15</p><hr />
]]></content>
</entry>
</feed>