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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-17T21:22:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5999&amp;mode</id>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-17T21:22:42+01:00</updated>
<published>2014-02-17T21:22:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70902#p70902</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70902#p70902"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70902#p70902"><![CDATA[
Czy silnik kręci się przez krótką chwilę czy przez czas 5s albo 15s?<br /><br />Wgraj ten programik. Dodałem w nim dwa LED-y które zaświecają się na 500ms po każdym wciśnięciu klawiszy. Będzie widać czy program dostaję lewe sygnały z klawiszy i czy wchodzi w funkcje obsługi klawiszy<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 />/* przydatne definicje pinów sterujących */<br />#define B1 (1&lt;&lt;PD0)<br />#define A1 (1&lt;&lt;PD1)<br />#define A2 (1&lt;&lt;PD2)<br />#define B2 (1&lt;&lt;PD3)<br /><br />/* definicje kroków sterujących pracą silnika */<br />#define KROK1 PORTD |= A1|B1; PORTD &amp;= ~(A2|B2)<br />#define KROK2 PORTD |= A2|B1; PORTD &amp;= ~(A1|B2)<br />#define KROK3 PORTD |= A2|B2; PORTD &amp;= ~(A1|B1)<br />#define KROK4 PORTD |= A1|B2; PORTD &amp;= ~(A2|B1)<br /><br />#define KEY1(1&lt;&lt;PD6)<br />#define KEY2(1&lt;&lt;PD7)<br /><br />static void silnik_stop(void);<br />static void kroki_lewo(void);<br />static void kroki_prawo(void);<br /><br />void key_press( uint16_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) ;<br /><br />void wlacz_lewo(void);<br />void wlacz_prawo(void);<br /><br />volatile uint8_t ms2_flag;<br />volatile uint16_t Timer1, Timer2;<br /><br />uint16_t key_lock1, key_lock2;              //zmienna na potrzeby obsługi klawisza<br /><br />enum edir {lewo, prawo, stop};<br />enum edir dir = stop;<br /><br />uint8_t l;<br /><br />int main(void) {<br /><br />/* ustawiamy piny sterujące L293D jako wyjścia */<br />DDRD |= A1|A2|B1|B2;<br /><br />//diody LED - mignięcie po wciśnięciu klawiszy<br />DDRC |= (1&lt;&lt;PC0) | (1&lt;&lt;PC1) ;<br />PORTC |= (1&lt;&lt;PC0) | (1&lt;&lt;PC1);<br /><br />DDRD &amp;=~( KEY1 | KEY2 );//wejścia<br />PORTD |= KEY1 | KEY2;//podciągnięcie do Vcc<br /><br />silnik_stop();<br /><br /><br />/* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0 = 22;/* dodatkowy podział przez 22 (rej. przepełnienia) */<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br />/* przerwanie wykonywane z częstotliwością ok 2ms (500 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 2ms */<br /><br />sei();/* włączamy globalne przerwania */<br /><br /><br />while(1)<br />{<br /><br />if(ms2_flag)/* sprawdzamy flagę, rozdzielczość 2ms */<br />{<br />/* jeśli zmienna dir==lewo (0) - obracaj w lewo */<br />if(lewo==dir) kroki_lewo();<br />/* jeśli zmienna dir==prawo (1) - obracaj w prawo */<br />if(prawo==dir) kroki_prawo();<br /><br />ms2_flag = 0;/* zerujemy flagę */<br />}<br /><br />key_press(&amp;key_lock1, &amp;PIND, KEY1, wlacz_prawo);<br />key_press(&amp;key_lock2, &amp;PIND, KEY2, wlacz_lewo);<br /><br />//jeśli Timer1 odliczył zadany czas to wyłącz silnik<br />if(!Timer1)<br />{<br />dir = stop;<br />silnik_stop();<br />}<br /><br />if(!Timer2)<br />{<br />PORTC = (1&lt;&lt;PC0) | (1&lt;&lt;PC1);//wyłącz diody LED<br />}<br /><br />}<br />}<br /><br />void wlacz_lewo(void)<br />{<br />Timer2 = 250;<br />PORTC &amp;=~(1&lt;&lt;PC0);<br /><br />//jeśli przycisk 1 wciśnięty<br />if(stop == dir)//jeśli silnik stoi<br />{<br />dir = lewo;//silnik lewo<br />Timer1 = 2500;//ustaw timer aby odliczył czas 5s (2500 * 2ms)<br />}<br />}<br /><br />void wlacz_prawo(void)<br />{<br />Timer2 = 250;<br />PORTC &amp;=~(1&lt;&lt;PC1);<br /><br />//jeśli przycisk 2 wciśnięty<br />if(stop == dir)//jeśli silnik stoi<br />{<br />dir = prawo;//silnik prawo<br />Timer1 = 7500;//ustaw timer aby odliczył czas 15s (7500 * 2ms)<br />}<br />}<br /><br />static void silnik_stop(void) {<br />PORTD &amp;= ~(A1|A2|B1|B2);<br />}<br /><br />/* funkcja wykonująca cyklicznie kroki (obrót w lewo) */<br />static void kroki_lewo(void) {<br />static uint8_t kr;<br /><br />if( kr == 0 ) { KROK1; }<br />if( kr == 1 ) { KROK2; }<br />if( kr == 2 ) { KROK3; }<br />if( kr == 3 ) { KROK4; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br />}<br /><br />/* funkcja wykonująca cyklicznie kroki (obrót w prawo) */<br />static void kroki_prawo(void) {<br />static uint8_t kr;<br /><br />if( kr == 0 ) { KROK4; }<br />if( kr == 1 ) { KROK3; }<br />if( kr == 2 ) { KROK2; }<br />if( kr == 3 ) { KROK1; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br />}<br /><br /><br />/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 2ms oraz 1s */<br />ISR(TIMER0_COMP_vect)<br />{<br />uint16_t n;<br /><br />ms2_flag = 1;<br /><br />n = Timer1;<br />if(n) Timer1 = --n;<br /><br />n = Timer2;<br />if(n) Timer2 = --n;<br />}<br /><br />void key_press(uint16_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) )<br />{<br />        register uint8_t key_press = (*KPIN &amp; key_mask);<br /><br />        if( !*klock &amp;&amp; !key_press )<br />        {<br />                *klock=50000;<br /><br />                // reakcja na PRESS (wcinięcie przycisku)<br />                if(kfun) kfun();<br /><br />        } else if( *klock &amp;&amp; key_press ) (*klock)++;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 17 lut 2014, o 21:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysiek.el]]></name></author>
<updated>2014-02-17T08:39:54+01:00</updated>
<published>2014-02-17T08:39:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70763#p70763</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70763#p70763"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70763#p70763"><![CDATA[
Program działa. Wielkie dzięki za pomoc.<br />Ale jest jakiś drobny szczegół i nie wiem z czego może wynikać, a mianowicie:<br />co jakis czas silnik sam zaczyna się obracać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> przez krótką chwile, czyli tak jakby atmega dostawałą sygnał z klawisza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=238">krzysiek.el</a> — 17 lut 2014, o 08:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-16T16:53:30+01:00</updated>
<published>2014-02-16T16:53:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70680#p70680</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70680#p70680"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70680#p70680"><![CDATA[
Sprawdź ten programik i napisz czy o to ci chodziło<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 />/* przydatne definicje pinów sterujących */<br />#define B1 (1&lt;&lt;PD0)<br />#define A1 (1&lt;&lt;PD1)<br />#define A2 (1&lt;&lt;PD2)<br />#define B2 (1&lt;&lt;PD3)<br /><br />/* definicje kroków sterujących pracą silnika */<br />#define KROK1 PORTD |= A1|B1; PORTD &amp;= ~(A2|B2)<br />#define KROK2 PORTD |= A2|B1; PORTD &amp;= ~(A1|B2)<br />#define KROK3 PORTD |= A2|B2; PORTD &amp;= ~(A1|B1)<br />#define KROK4 PORTD |= A1|B2; PORTD &amp;= ~(A2|B1)<br /><br />#define KEY1(1&lt;&lt;PD6)<br />#define KEY2(1&lt;&lt;PD7)<br /><br />static void silnik_stop(void);<br />static void kroki_lewo(void);<br />static void kroki_prawo(void);<br /><br />void key_press( uint16_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) ;<br /><br />void wlacz_lewo(void);<br />void wlacz_prawo(void);<br /><br />volatile uint8_t ms2_flag;<br />volatile uint16_t Timer1;<br /><br />uint16_t key_lock1, key_lock2;              //zmienna na potrzeby obsługi klawisza<br /><br />enum edir {lewo, prawo, stop};<br />enum edir dir = stop;<br /><br />uint8_t l;<br /><br />int main(void) {<br /><br />/* ustawiamy piny sterujące L293D jako wyjścia */<br />DDRD |= A1|A2|B1|B2;<br /><br />//diody LED - zamiast silnika<br />//DDRC |= (1&lt;&lt;PC0) | (1&lt;&lt;PC1) ;<br />//PORTC |= (1&lt;&lt;PC0) | (1&lt;&lt;PC1);<br /><br />DDRD &amp;=~( KEY1 | KEY2 );//wejścia<br />PORTD |= KEY1 | KEY2;//podciągnięcie do Vcc<br /><br />silnik_stop();<br /><br /><br />/* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0 = 22;/* dodatkowy podział przez 22 (rej. przepełnienia) */<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br />/* przerwanie wykonywane z częstotliwością ok 2ms (500 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 2ms */<br /><br />sei();/* włączamy globalne przerwania */<br /><br /><br />while(1)<br />{<br /><br />if(ms2_flag)/* sprawdzamy flagę, rozdzielczość 2ms */<br />{<br />/* jeśli zmienna dir==lewo (0) - obracaj w lewo */<br />if(lewo==dir) kroki_lewo();<br />/* jeśli zmienna dir==prawo (1) - obracaj w prawo */<br />if(prawo==dir) kroki_prawo();<br /><br />ms2_flag = 0;/* zerujemy flagę */<br />}<br /><br />key_press(&amp;key_lock1, &amp;PIND, KEY1, wlacz_prawo);<br />key_press(&amp;key_lock2, &amp;PIND, KEY2, wlacz_lewo);<br /><br />//jeśli Timer1 odliczył zadany czas to wyłącz silnik<br />if(!Timer1)<br />{<br />dir = stop;<br />silnik_stop();<br />}<br /><br />}<br />}<br /><br />void wlacz_lewo(void)<br />{<br />//jeśli przycisk 1 wciśnięty<br />if(stop == dir)//jeśli silnik stoi<br />{<br />dir = lewo;//silnik lewo<br />Timer1 = 2500;//ustaw timer aby odliczył czas 5s (2500 * 2ms)<br />}<br />}<br /><br />void wlacz_prawo(void)<br />{<br />//jeśli przycisk 2 wciśnięty<br />if(stop == dir)//jeśli silnik stoi<br />{<br />dir = prawo;//silnik prawo<br />Timer1 = 7500;//ustaw timer aby odliczył czas 15s (7500 * 2ms)<br />}<br />}<br /><br />static void silnik_stop(void) {<br />PORTD &amp;= ~(A1|A2|B1|B2);<br /><br />//LED-y do testu zamiast silnika<br />//PORTC |=(1&lt;&lt;PC0);<br />//PORTC |=(1&lt;&lt;PC1);<br />}<br /><br />/* funkcja wykonująca cyklicznie kroki (obrót w lewo) */<br />static void kroki_lewo(void) {<br />static uint8_t kr;<br /><br />if( kr == 0 ) { KROK1; }<br />if( kr == 1 ) { KROK2; }<br />if( kr == 2 ) { KROK3; }<br />if( kr == 3 ) { KROK4; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br /><br />//LED-y do testu zamiast silnika<br />//PORTC &amp;=~(1&lt;&lt;PC0);<br />//PORTC |=(1&lt;&lt;PC1);<br />}<br /><br />/* funkcja wykonująca cyklicznie kroki (obrót w prawo) */<br />static void kroki_prawo(void) {<br />static uint8_t kr;<br /><br />if( kr == 0 ) { KROK4; }<br />if( kr == 1 ) { KROK3; }<br />if( kr == 2 ) { KROK2; }<br />if( kr == 3 ) { KROK1; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br /><br />//LED-y do testu zamiast silnika<br />//PORTC |=(1&lt;&lt;PC0);<br />//PORTC &amp;=~(1&lt;&lt;PC1);<br />}<br /><br /><br />/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 2ms oraz 1s */<br />ISR(TIMER0_COMP_vect)<br />{<br />uint16_t n;<br /><br />ms2_flag = 1;<br /><br />n = Timer1;<br />if(n) Timer1 = --n;<br /><br />}<br /><br />void key_press(uint16_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) )<br />{<br />        register uint8_t key_press = (*KPIN &amp; key_mask);<br /><br />        if( !*klock &amp;&amp; !key_press )<br />        {<br />                *klock=50000;<br /><br />                // reakcja na PRESS (wcinięcie przycisku)<br />                if(kfun) kfun();<br /><br />        } else if( *klock &amp;&amp; key_press ) (*klock)++;<br />}[/syntax]<br /><br />W programie wykorzystałem funkcję do obsługi klawiszy z Mirkowego bloga. A timer programowy z Bluebooka z rozdziałów &quot;Wstęp do systemów czasu rzeczywistego&quot; i &quot;Superdebounce&quot;. <br /><br />To tak na zachętę <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=204">jacekk232</a> — 16 lut 2014, o 16:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysiek.el]]></name></author>
<updated>2014-02-16T14:32:14+01:00</updated>
<published>2014-02-16T14:32:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70673#p70673</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70673#p70673"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70673#p70673"><![CDATA[
tylko jak nacisne.<br /> cały kod:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-14<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;pcb.h&quot;<br /><br />/* przydatne definicje pinów sterujących */<br />#define B1 (1&lt;&lt;PA4)<br />#define A1 (1&lt;&lt;PA1)<br />#define A2 (1&lt;&lt;PA2)<br />#define B2 (1&lt;&lt;PA3)<br /><br />/* definicje kroków sterujących pracą silnika */<br />#define KROK1 PORTA |= A1|B1; PORTA &amp;= ~(A2|B2)<br />#define KROK2 PORTA |= A2|B1; PORTA &amp;= ~(A1|B2)<br />#define KROK3 PORTA |= A2|B2; PORTA &amp;= ~(A1|B1)<br />#define KROK4 PORTA |= A1|B2; PORTA &amp;= ~(A2|B1)<br /><br />static void silnik_stop(void);<br />static void kroki_lewo(void);<br />//static void kroki_prawo(void);<br /><br /><br />volatile uint8_t s1_flag;/* flaga tyknięcia timera co 1 sekundę */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />volatile uint8_t ms2_flag;<br />volatile uint16_t ms2_cnt;<br /><br />enum edir {lewo, prawo, stop};<br />enum edir dir = lewo;<br /><br />unsigned char key (unsigned char klawisz)<br /><br />{<br />if( ! (PIND &amp; klawisz))<br />{<br />_delay_ms(50);<br />if( ! (PIND &amp; klawisz)) return 1;<br />}<br />return 0;<br />}<br /><br />int main(void) {<br /><br />DDRD &amp;= ~KEY1;// kierunek - wejściowy<br />DDRD &amp;= ~KEY2;<br />DDRD &amp;= ~KEY3;<br />DDRD &amp;= ~KEY4;<br />DDRD &amp;= ~KEY5;<br />DDRD &amp;= ~KEY6;<br />PORTD |= KEY1 | KEY2 | KEY3 | KEY4 |KEY5|KEY6;<br /><br />DDRC |= LED0;// kierunek – wyjściowy<br />DDRC |= LED1;<br />DDRC |= LED2;<br />DDRC |= LED3;<br /><br />LED_OFF;<br /><br />/* ustawiamy piny sterujące L293D jako wyjścia */<br />DDRA |= A1|A2|B1|B2;<br /><br />silnik_stop();<br /><br /><br />/* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0 = 22;/* dodatkowy podział przez 22 (rej. przepełnienia) */<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br />/* przerwanie wykonywane z częstotliwością ok 2ms (500 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 2ms */<br /><br />sei();/* włączamy globalne przerwania */<br /><br />while(1)<br /><br />{<br />if(OK)<br />{<br /> PORTC &amp;=~LED1;<br />if(ms2_flag) {<br /><br />/* jeśli zmienna dir==lewo (0) - obracaj w lewo */<br />if (dir==lewo) kroki_lewo();<br /><br />ms2_flag = 0;/* zerujemy flagę */<br />}<br /><br /><br />if(s1_flag)<br />{<br /><br />if (0==sekundy) dir = lewo;<br />if (5==sekundy)<br /><br />{<br />dir = stop;<br />silnik_stop();<br />}<br /><br />s1_flag = 0;<br />}<br />}<br />}<br />}<br /><br />static void silnik_stop(void) {<br />PORTA &amp;= ~(A1|A2|B1|B2);<br />}<br /><br />static void kroki_lewo(void)<br />{<br /><br />static uint8_t kr;<br /><br />if( kr == 0 ) { KROK1; }<br />if( kr == 1 ) { KROK2; }<br />if( kr == 2 ) { KROK3; }<br />if( kr == 3 ) { KROK4; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br /><br /><br />}<br /><br />/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 2ms oraz 1s */<br />ISR(TIMER0_COMP_vect)<br />{<br />ms2_flag = 1;/* ustawiamy flagę co 2ms */<br /><br />if(++ms2_cnt&gt;499) {/* gdy licznik ms &gt; 499 (minęła 1 sekunda) */<br />s1_flag=1;/* ustaw flagę tyknięcia sekundy */<br />sekundy++;/* zwiększ licznik sekund */<br />if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />ms2_cnt=0;/* wyzeruj licznik setnych ms */<br />}<br />}[/syntax]<br /><br /><br />[syntax=c]#ifndef PCB_H_<br />#define PCB_H_<br /><br />#define EEMEM __attribute__((section(&quot;.eeprom&quot;)))<br /><br />// diody LED<br />#define LED0 (1&lt;&lt;PC2)<br />#define LED1 (1&lt;&lt;PC3)<br />#define LED2 (1&lt;&lt;PC4)<br />#define LED3 (1&lt;&lt;PC5)<br /><br /><br /><br />#define LED_TOG PORTC ^= (LED0 | LED1 | LED2 | LED3 )<br />#define LED_ON PORTC &amp;= ~(LED0 | LED1 | LED2 | LED3 )<br />#define LED_OFF PORTC |= (LED0 | LED1 | LED2 | LED3 )<br /><br /><br />// klawisze<br />#define KEY1 (1&lt;&lt;PD7)<br />#define OK !(PIND &amp; KEY1)<br /><br />#define KEY2 (1&lt;&lt;PD6)<br />#define MINUS !(PIND &amp; KEY2)<br /><br />#define KEY3 (1&lt;&lt;PD5)<br />#define PLUS !(PIND &amp; KEY3)<br /><br />#define KEY4 (1&lt;&lt;PD4)<br />#define ESC !(PIND &amp; KEY4)<br /><br />#define KEY5 (1&lt;&lt;PD3)<br />#define PRAWO !(PIND &amp; KEY5)<br /><br />#define KEY6 (1&lt;&lt;PD2)<br />#define LEWO !(PIND &amp; KEY6)<br /><br />#endif /* PCB_H_ */[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Różowy J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=238">krzysiek.el</a> — 16 lut 2014, o 14:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-16T14:12:00+01:00</updated>
<published>2014-02-16T14:12:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70668#p70668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70668#p70668"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70668#p70668"><![CDATA[
Czy ten silnik ma się kręcić w czasie gdy przycisk jest wciąż wciśnięty czy po jednorazowym wciśnięciu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 16 lut 2014, o 14:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysiek.el]]></name></author>
<updated>2014-02-16T13:47:28+01:00</updated>
<published>2014-02-16T13:47:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70665#p70665</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70665#p70665"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70665#p70665"><![CDATA[
if (0==sekundy) dir = lewo;<br />if (5==sekundy)<br /><br />??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=238">krzysiek.el</a> — 16 lut 2014, o 13:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-02-16T13:18:57+01:00</updated>
<published>2014-02-16T13:18:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70660#p70660</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70660#p70660"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70660#p70660"><![CDATA[
Co ci daje 0==sekundy z % modulo 5?<br /><br />Wysłane z telefonu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 16 lut 2014, o 13:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysiek.el]]></name></author>
<updated>2014-02-16T13:14:01+01:00</updated>
<published>2014-02-16T13:14:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70659#p70659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70659#p70659"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70659#p70659"><![CDATA[
Jest ktoś w stanie podać dokładniejsze wskazówki?<br />Może na priv? Mam projekt do zrobienia a zatrzymałem się przy tym silniku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=238">krzysiek.el</a> — 16 lut 2014, o 13:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysiek.el]]></name></author>
<updated>2014-02-15T10:53:21+01:00</updated>
<published>2014-02-15T10:53:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70535#p70535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70535#p70535"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70535#p70535"><![CDATA[
<div class="codetitle"><b>Code:</b></div><div class="codecontent">   while(1)<br /><br />      {<br />      if(OK)<br />      {<br />      if(ms2_flag) {<br /><br />         if (dir==lewo) kroki_lewo();<br /><br />         ms2_flag = 0;<br />      }<br /><br /><br />      if(s1_flag)<br />      {<br /><br />         if (0==sekundy%5) dir = lewo;<br />         if (5==sekundy%6)<br /><br />         {<br />            dir = stop;<br />            silnik_stop();<br />         }<br /><br />         s1_flag = 0;<br />      }<br />      }<br />   }<br />}</div><br /><br />Koledzy, co robie źle? Czytałem o tym w ksiązce ale trochę tego nie kapuje (ale to pewnie widać)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=238">krzysiek.el</a> — 15 lut 2014, o 10:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-02-14T08:31:37+01:00</updated>
<published>2014-02-14T08:31:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70395#p70395</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70395#p70395"/>
<title type="html"><![CDATA[Re: zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70395#p70395"><![CDATA[
<div class="quotetitle">krzysiek.el napisał(a):</div><div class="quotecontent"><br />Witam,<br />korzystam z kodu Pana Mirka dołączonego do zestawu.<br />Już mam wszytsko podłączone, uruchomione i działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Teraz mam inny problem... siedze już dłuższa chwile i nie mogę wymyślić jak zrobić, żeby np. :<br />po naciśnięciu klawisza &quot;1&quot; kręcił sie w lewo przez 5s, a po naciśnięciu klawisz &quot;2&quot; 15s w prawo.<br />Gdy żaden nie wciśniety to silnik stoi.<br /><br />Pozdrawiam i prosze o jakies podpowiedzi<br /></div><br />A czy czutałeś o timerach programowych?<br />W najprostszej wersji:<br />odpalasz timer.<br />w pętli głównej badasz czy naciśnięto któryś przycisk<br />jeśli naciśnieto &quot;1&quot; ustawiasz flagę lewo i czas na 5 sek<br />piszesz if'a w którym sprawdzasz flagę lewo i jeśli jest ustawiona sterujesz silnikiem<br />zmniejszasz czas aż do zera i gdy czas zero gasisz flagę lewo<br />Tak samo postępujesz dla klawisza &quot;2&quot;<br />To taki najprostszy z najprostszych i na szybko napisanych algorytmów. <br />A można to zrealizować na dziesiątki innych sposobów<br /><br />Ps. co ten temat ma wspólnego z DIY???<br />Może któryś zielony albo różowy albo jakiś inny kolorek przeniesie <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=189">MirkoT</a> — 14 lut 2014, o 08:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysiek.el]]></name></author>
<updated>2014-02-14T00:09:27+01:00</updated>
<published>2014-02-14T00:09:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70385#p70385</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70385#p70385"/>
<title type="html"><![CDATA[zmiana w programie silnika krokowego bipolarnego.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5999&amp;p=70385#p70385"><![CDATA[
Witam,<br />korzystam z kodu Pana Mirka dołączonego do zestawu.<br />Już mam wszytsko podłączone, uruchomione i działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Teraz mam inny problem... siedze już dłuższa chwile i nie mogę wymyślić jak zrobić, żeby np. :<br />po naciśnięciu klawisza &quot;1&quot; kręcił sie w lewo przez 5s, a po naciśnięciu klawisz &quot;2&quot; 15s w prawo.<br />Gdy żaden nie wciśniety to silnik stoi.<br /><br />Pozdrawiam i prosze o jakies podpowiedzi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=238">krzysiek.el</a> — 14 lut 2014, o 00:09</p><hr />
]]></content>
</entry>
</feed>