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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-08-06T20:00:05+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12551&amp;mode</id>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2015-08-06T20:00:05+01:00</updated>
<published>2015-08-06T20:00:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136615#p136615</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136615#p136615"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136615#p136615"><![CDATA[
Coś nie działa, chyba nie do końca zrozumiałem albo mam coś źle skonfigurowane. Używam atmegi 32 8Mhz. Używam do tego PWM i ADC może jakiś konflikt?<br />Oto co wymyśliłem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//#include &quot;MYUART/myuart.h&quot;<br />//#include &quot;MK_TERMINAL/mk_term.h&quot;<br />//atmega32 8MHz<br />volatile uint16_t wynik;<br /><br />#define tyl (1&lt;&lt;PD4)                    // definicja pinu tyl<br />#define tyl_off PORTD &amp;= ~tyl   // makrodefinicja – załączenie tyl<br />#define tyl_on PORTD |= tyl     //wyloaczenie tyl<br />#define przod (1&lt;&lt;PD7)                  // definicja pinu przod<br />#define przod_off PORTD &amp;= ~przod       // makrodefinicja – załączenie przod<br />#define przod_on PORTD |= przod                 //wylaczenie przod<br />//uint8_t klawisz_wcisniety(void); // deklaracja funkcji<br />#define PRZYCISK (1&lt;&lt;PD4) // Przycisk podpięty do PD0<br />#define PRZYCISK2 (1&lt;&lt;PD5)<br />//uint8_t klawisz_wcisniety2(void); // deklaracja funkcji<br /><br />#define LED_PIN (1&lt;&lt;PC7)                        // definicja pinu do którego podłączona jest dioda<br />#define LED_OFF PORTC &amp;= ~LED_PIN       // makrodefinicja – załączenie diody<br />#define LED_ON PORTC |= LED_PIN<br />#define LED_TOG PORTC ^= LED_PIN        // makrodefinicja – zmiana stanu diody<br /><br />volatile int flaga_10ms;<br /><br />volatile int tyk;<br />int main(void) {<br />LED_OFF;<br />DDRD &amp;= ~PRZYCISK; // kierunek pinu PC6 - wejściowy<br />DDRD &amp;= ~PRZYCISK;<br />PORTD |= PRZYCISK; // podciągnięcie pinu do VCC<br />//##########################<br /><br />DDRD &amp;= ~PRZYCISK2; // kierunek pinu PC6 - wejściowy<br />DDRD &amp;= ~PRZYCISK2;<br />PORTD |= PRZYCISK2; // podciągnięcie pinu do VCC<br /><br />DDRD |= tyl; // kierunek pinu PC7 – wyjściowy<br />PORTD |= tyl; // wyłączenie diody LED<br /><br />DDRD |= przod; // kierunek pinu PC7 – wyjściowy<br />PORTD |= przod; // wyłączenie diody LED<br /><br />DDRC |= LED_PIN; // kierunek pinu PC7 – wyjściowy<br /><br />////**********************************************************************************************************************<br />/*  Inicjalizacja ADC  */ADCSRA |= (1 &lt;&lt; ADEN) | // uruchomienie przetwornika)<br />(1 &lt;&lt; ADIE) | // uruchomienie zgłaszania przerwań<br />(1 &lt;&lt; ADSC) | // rozpoczęcie konwersji<br />(1 &lt;&lt; ADATE) | //  FREE runing mode                                                                                             Sprzetowy ADC<br />(1 &lt;&lt; ADPS2) | (1 &lt;&lt; ADPS1) | (1 &lt;&lt; ADPS0); //ustawienie preskalera preskaler= 128<br /><br />ADMUX |= (1 &lt;&lt; REFS1) | (1 &lt;&lt; REFS0) | //2,5 jako napięcie referencyjne<br />(1 &lt;&lt; MUX1); //Wybór wejścia (ADC2 - Pin A2 )<br />////**********************************************************************************************************************<br />DDRA &amp;= ~(1 &lt;&lt; PA2); // - dla jasności :)<br /><br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br />DDRB |= (1 &lt;&lt; PB3);<br />// ustawienia TIMER2 w Fast PWM                                                                                         //sprzetowy PWM<br />TCCR0 |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00); // tryb Fast PWM<br />TCCR0 |= (1 &lt;&lt; COM01); // clear at TOP<br />TCCR0 |= (1 &lt;&lt; CS00); // preskaler = 1<br />OCR0 = 0; // wygaszenie diody w kanale PWM<br />////**********************************************************************************************************************<br />//######## konfiguracja timera ##############<br />TCCR0 |= (1 &lt;&lt; CS02) | (1 &lt;&lt; CS00); // źródłem CLK, preskaler 1024<br />TIMSK |= (1 &lt;&lt; TOIE0);          //Przerwanie overflow (przepełnienie timera)<br />//###########################################<br /><br />uint32_t srednia = 0;<br />uint32_t wynik_sredniej = 0;<br />uint8_t dt = 4;<br /><br />sei();<br />while (1) {<br /><br />////**********************************************************************************************************************<br />srednia = srednia * dt;<br />srednia = srednia + wynik; //Srednia ADC<br />srednia = srednia / (dt + 1);<br />wynik_sredniej = srednia / 4;<br />////**********************************************************************************************************************<br />if (flaga_10ms) {<br />if (!(PIND &amp; (1 &lt;&lt; PD4))) {<br />LED_ON;<br />OCR0 = wynik_sredniej + 1;<br />}<br />if (PIND &amp; (1 &lt;&lt; PD4)) {<br />LED_OFF;<br />OCR0=0;<br />}<br /><br />if (!(PIND &amp; (1 &lt;&lt; PD5))) {<br />LED_ON;<br />OCR0 = wynik_sredniej + 1;<br />}<br />if (PIND &amp; (1 &lt;&lt; PD5)) {<br />LED_OFF;<br />OCR0=0;<br />}<br /><br />flaga_10ms = 0;<br />}<br /><br />// OCR0 = wynik_sredniej + 1;<br /><br />}<br /><br />}<br /><br />ISR(ADC_vect) {<br />wynik = ADC;<br />}<br />ISR(TIMER0_COMP_vect) {    // przerwanie od timera0<br />flaga_10ms = 1;<br />// programowe timery<br />if (!(tyk % 1)) {<br /> if (!(tyk%1))flaga_10ms=1;// odmierza odcinik 10ms dziel przez 1<br />//if (!(tyk%5))flaga_50ms=1;<br />//if (!(tyk%10))flaga_100ms=1;// odcinek 100ms modulo reszta z dzielenia wyznacznikiem<br />// if (!(tyk%50))flaga_500ms=1;<br />// if (!(tyk%20))flaga_200ms=1;<br />// if (!(tyk%100)){flaga_1s=1;<br />tyk = 0;<br />}<br />tyk++;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 6 sie 2015, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2015-08-06T18:55:51+01:00</updated>
<published>2015-08-06T18:55:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136605#p136605</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136605#p136605"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136605#p136605"><![CDATA[
Kolego ja robię sobie tak ustawiam tak przerwanie żeby wykonywało się co 10ms<br />Następnie robię sobie takie flagi w przerwaniu:<br />[syntax=c]ISR(TIMER0_COMPA_vect){    // przerwanie od timera0<br />flaga_10ms=1;<br />// programowe timery<br />//if (!(tyk%1))flaga_10ms=1;// odmierza odcinik 10ms dziel przez 1<br />if (!(tyk%5))flaga_50ms=1;<br />if (!(tyk%10))flaga_100ms=1;// odcinek 100ms modulo reszta z dzielenia wyznacznikiem<br />if (!(tyk%50))flaga_500ms=1;<br />if (!(tyk%20))flaga_200ms=1;<br />if (!(tyk%100)){flaga_1s=1;<br />tyk=0;<br />}<br /> tyk++;<br />}[/syntax]<br /><br />Następnie głównym programie  robię tak:<br />[syntax=c]while (1) {<br />               <br />if(flaga_100ms)<br />{<br />//jakiś kod do wykonania<br /><br />flaga_100ms=0;<br /> }<br /><br /><br />if (flaga_1s){<br />// kod który wykonuje się co 1s<br /><br />flaga_1s=0;<br />        }[/syntax]<br /><br />I ten system u mnie działa Czy coś ci się rozjaśniło?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 6 sie 2015, o 18:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2015-08-06T18:43:26+01:00</updated>
<published>2015-08-06T18:43:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136603#p136603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136603#p136603"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136603#p136603"><![CDATA[
Teraz mam tylko tyle, specjalnie utworzyłem nowy projekt:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /> <br />#define LED_PIN (1&lt;&lt;PC3)                        // definicja pinu do którego podłączona jest dioda<br /> <br />#define LED_ON PORTC &amp;= ~LED_PIN        // makrodefinicja – załączenie diody<br />#define LED_OFF PORTC |= LED_PIN        // makrodefinicja – wyłączenie diody<br />#define LED_TOG PORTC ^= LED_PIN        // makrodefinicja – zmiana stanu diody<br /> <br />#define PRZYCISK (1&lt;&lt;PD0) // Przycisk podpięty do PD0<br />#define PRZYCISK_ON !(PIND &amp; PRZYCISK)  // Definicja wcisnietego przycisku<br />#define PRZYCISK_OFF (PIND &amp; PRZYCISK)  // Definicja wyłączonego przycisku<br /> <br /> <br />int main(void) {<br />        //########### I/O ###########<br />        DDRC |= LED_PIN;<br />        DDRD &amp;= ~PRZYCISK; // kierunek pinu PC6 - wejściowy<br />        DDRD &amp;= ~PRZYCISK;<br />        PORTD |= PRZYCISK; // podciągnięcie pinu do VCC<br />        //##########################<br /> <br />        //######## konfiguracja timera ##############<br />        TCCR0 |= (1 &lt;&lt; CS02) | (1 &lt;&lt; CS00); // źródłem CLK, preskaler 1024<br />        TIMSK |= (1 &lt;&lt; TOIE0);          //Przerwanie overflow (przepełnienie timera)<br />        //###########################################<br /> <br />        sei();<br />        //Globalne uruchomienie przerwań<br />       <br /> <br />        while (1) {<br />               <br /> <br />        }<br /> <br />}<br />a<br />//############ Procedura obsługi przerwania od przepełnienia timera ############<br />ISR(TIMER0_OVF_vect) {<br />        LED_TOG;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 6 sie 2015, o 18:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2015-08-06T18:34:35+01:00</updated>
<published>2015-08-06T18:34:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136600#p136600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136600#p136600"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136600#p136600"><![CDATA[
Pokaż wypociny to ci podpowiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 6 sie 2015, o 18:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2015-08-06T15:11:09+01:00</updated>
<published>2015-08-06T15:11:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136582#p136582</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136582#p136582"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136582#p136582"><![CDATA[
Może koledzy mają gotowe rozwiązanie, siedzę nad tym i nie mogę zrobić tych przycisków w przerwaniach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 6 sie 2015, o 15:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2015-08-06T11:36:17+01:00</updated>
<published>2015-08-06T11:36:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136553#p136553</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136553#p136553"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136553#p136553"><![CDATA[
Kolego chodzi o to że ten delay zatrzymuje ci program i nic nie wykonuje. Jeśli zrobisz go na timerze program będzie pracowac dalej tylko będzie wykonywać co innego.Jeśli za pomocą timera wyznaczysz sobie odcinek czasu np 30ms  to co 30 ms będzie sprawdzany twój warunek z przyciskami a w pozostałym czasie czyli od 0-30 będzie wykonywany warunek ze 129lini <br /><br />Dziwisz się że jak usuniesz delaya to ci dioda nie świeci z pełną mocą. Bo jak byś ten kod przeanalizował w zwolnionym tempie to najpierw ją zaświecasz a potem ją gasisz gdy masz wcisnięty klawisz. Teraz wyobraź sobie co sie dzieje jak cały program wykonuje się z prędkością twojego kwarcu To nie jesteś w stanie zobaczyć tego zapalania i gaszenia  w efekcie widzisz nie pełną moc świecenia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 6 sie 2015, o 11:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2015-08-06T10:20:44+01:00</updated>
<published>2015-08-06T10:20:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136543#p136543</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136543#p136543"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136543#p136543"><![CDATA[
Jak wywalę delay z 111 linijki to dioda led nie zapla się w pełni. Timer mnie nie ratuje bo chcę aby funkcja działała dopóki trzymam przycisk jeden lub drugi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 6 sie 2015, o 10:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2015-08-06T06:57:58+01:00</updated>
<published>2015-08-06T06:57:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136533#p136533</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136533#p136533"/>
<title type="html"><![CDATA[Re: Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136533#p136533"><![CDATA[
Kolego wywal delay bo one tylko wstrzymują  całkowicie program. Zrób sobie odmierzanie czasu na timerze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 6 sie 2015, o 06:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2015-08-06T03:00:36+01:00</updated>
<published>2015-08-06T03:00:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136530#p136530</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136530#p136530"/>
<title type="html"><![CDATA[Trzymanie przycisku(wykonywanie funkcji),.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12551&amp;p=136530#p136530"><![CDATA[
Witam.<br />Chcę wykonać urządzenie które steruje silnikiem poprzez pwm. Regulacja poprzez potencjometr działa fajnie tylko problemy zaczęły się od obsługi przycisków.<br />Silnik ma kręcić się w w lewo lub w prawo w zależności który z przycisków jest wciśnięty a jeżeli nie jest wciśnięty to ma się wyłączyć.<br />Problem polega na tym że jak nie dodam delaya w 111 linijce to jak wciskam przycisk KEY_PIN2 to dioda nie zapala się pełną jasnością i silnik szarpie, z KEY_PIN1 nie ma takiego problemu. Dodatkowo nie wychodzi mi napisanie funkcji powoli rozpędzającej silnik do wartości ADC, problem tkwi w tym że silnik nie może się ustabilizować jak i wyłączyć po puszczeniu przycisku. Napisałem funkcję:<br />[syntax=c]while(OCR0&lt;wynik_sredniej)<br />{ OCR0=OCR+10;<br />_delay_ms(30);[/syntax]<br />Oto cały kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//#include &quot;MYUART/myuart.h&quot;<br />//#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />volatile uint16_t wynik;<br /><br />#define tyl (1&lt;&lt;PD4)// definicja pinu tyl<br />#define tyl_off PORTD &amp;= ~tyl// makrodefinicja – załączenie tyl<br />#define tyl_on PORTD |= tyl//wyloaczenie tyl<br />#define przod (1&lt;&lt;PD7)// definicja pinu przod<br />#define przod_off PORTD &amp;= ~przod// makrodefinicja – załączenie przod<br />#define przod_on PORTD |= przod//wylaczenie przod<br />//uint8_t klawisz_wcisniety(void); // deklaracja funkcji<br />#define KEY_PIN1 (1&lt;&lt;PC0)<br />#define KEY_PIN2 (1&lt;&lt;PC1)<br /><br />//uint8_t klawisz_wcisniety2(void); // deklaracja funkcji<br /><br />#define LED_PIN (1&lt;&lt;PC7)// definicja pinu do którego podłączona jest dioda<br />#define LED_OFF PORTC &amp;= ~LED_PIN// makrodefinicja – załączenie diody<br />#define LED_ON PORTC |= LED_PIN<br />#define LED_TOG PORTC ^= LED_PIN// makrodefinicja – zmiana stanu diody<br />uint8_t klawisz_wcisniety(uint8_t klawisz); // deklaracja funkcji<br /><br />int main(void) {<br />LED_OFF;<br />DDRC &amp;= ~KEY_PIN1; // kierunek pinu PC6 - wejściowy<br />DDRC &amp;= ~KEY_PIN2;<br />PORTC |= KEY_PIN1 | KEY_PIN2; // podciągnięcie pinu do VCC<br /><br />DDRD |= tyl; // kierunek pinu PC7 – wyjściowy<br />PORTD |= tyl; // wyłączenie diody LED<br /><br />DDRD |= przod; // kierunek pinu PC7 – wyjściowy<br />PORTD |= przod; // wyłączenie diody LED<br /><br /><br />DDRC |= LED_PIN; // kierunek pinu PC7 – wyjściowy<br /><br />////**********************************************************************************************************************<br />/*  Inicjalizacja ADC  */ADCSRA |= (1 &lt;&lt; ADEN) | // uruchomienie przetwornika)<br />(1 &lt;&lt; ADIE) | // uruchomienie zgłaszania przerwań<br />(1 &lt;&lt; ADSC) | // rozpoczęcie konwersji<br />(1 &lt;&lt; ADATE) | //  FREE runing modeSprzetowy ADC<br />(1 &lt;&lt; ADPS2) | (1 &lt;&lt; ADPS1) | (1 &lt;&lt; ADPS0); //ustawienie preskalera preskaler= 128<br /><br />ADMUX |= (1 &lt;&lt; REFS1) | (1 &lt;&lt; REFS0) | //2,5 jako napięcie referencyjne<br />(1 &lt;&lt; MUX1); //Wybór wejścia (ADC2 - Pin A2 )<br />////**********************************************************************************************************************<br />DDRA &amp;= ~(1 &lt;&lt; PA2); // - dla jasności :)<br /><br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br />DDRB |= (1 &lt;&lt; PB3);<br />// ustawienia TIMER2 w Fast PWM//sprzetowy PWM<br />TCCR0 |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00); // tryb Fast PWM<br />TCCR0 |= (1 &lt;&lt; COM01); // clear at TOP<br />TCCR0 |= (1 &lt;&lt; CS00); // preskaler = 1<br />OCR0 = 0; // wygaszenie diody w kanale PWM<br />////**********************************************************************************************************************<br />uint32_t srednia = 0;<br />uint32_t wynik_sredniej = 0;<br />uint8_t dt = 4;<br />int x=0, z=0;<br />sei();<br />while (1) {<br /><br />////**********************************************************************************************************************<br />srednia = srednia * dt;<br />srednia = srednia + wynik; //Srednia ADC<br />srednia = srednia / (dt + 1);<br />wynik_sredniej = srednia / 4;<br />////**********************************************************************************************************************<br /><br />if (klawisz_wcisniety(KEY_PIN1)) {<br />LED_ON;<br />tyl_on;<br />przod_on;<br />//_delay_ms(30);<br />//x=0;<br /><br /><br />OCR0 = wynik_sredniej;<br />}<br /><br />if (!(klawisz_wcisniety(KEY_PIN1))) {<br />LED_OFF;<br />OCR0 = 0;<br />//_delay_ms(30);<br /><br />tyl_off;<br />przod_off;<br />//x=0;<br />}<br /><br />//**************************************************************************************************<br />if (klawisz_wcisniety(KEY_PIN2)) {<br />LED_ON;<br />przod_on;<br />//x=0;<br />//_delay_ms(30);<br />//OCR0=0;<br /><br /><br />OCR0 = wynik_sredniej;<br /><br />}<br />_delay_ms(30);<br />if (!(klawisz_wcisniety(KEY_PIN2))) {<br />LED_OFF;<br />OCR0 = 5;<br />//_delay_ms(30);<br />przod_off;<br />//x=0;<br /><br />}<br />//if(x==10)x=0;<br />//_delay_ms(20);<br /><br />//OCR0 = wynik_sredniej + 1;<br /><br />}<br /><br />}<br />// definicja funkcji<br />uint8_t klawisz_wcisniety(uint8_t klawisz) {<br />if (!(PINC &amp; klawisz)) // klawisz wciśnięty ?<br />{<br />_delay_ms(80);// czas drgań styków<br />if (!(PINC &amp; klawisz))<br />return 1; // jeśli wciśnięty?  zakończ funkcję - rezultat = 1<br />}<br /><br />return 0; // jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}<br /><br />ISR(ADC_vect) {<br />wynik = ADC;<br />}[/syntax]<br />Myślę że problem polega na tym że źle jest napisana funkcja obsługi przycisku względem moich wymagań że funkcja ma się wykonywać jak klawisz jest wciśnięty w przeciwnym razie inna. Jeżeli koledzy mają pomysł jak to napisać to proszę o pomoc.<br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 6 sie 2015, o 03:00</p><hr />
]]></content>
</entry>
</feed>