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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-10-20T18:34:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1673&amp;mode</id>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-20T18:34:15+01:00</updated>
<published>2012-10-20T18:34:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17196#p17196</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17196#p17196"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17196#p17196"><![CDATA[
Spokojnie już dawno poznałem te timery programowe<br /><br />Program napisałem i działa tylko no niestety tranzystory w mostach się strasznie grzeją. Musze jeszcze inną koncepcję zrobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 20 paź 2012, o 18:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-20T07:52:23+01:00</updated>
<published>2012-10-20T07:52:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17165#p17165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17165#p17165"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17165#p17165"><![CDATA[
Dzięki za odp.<br /><br />Co do podzielenia pliku na .c .h to w tym przypadku nie ma to sensu bo oprócz tego programu dojdzie tylko funkcja która okręca albo w prawo silnik albo w lewo.(W zależności od stanu portu) I oto cały program na Atmega32 nic więcej nigdy nie będzie dodawane. Oczywiście można podzielić na .c .h ale jest tak krótki że nie potrzeba moim zdaniem.<br /><br />Malutki_27- licznik krok resetuje się tam gdzie odbywa się ostatni krok. <br />mirekk36- to prawda są w 1 książce takie kody ale one się nie nadają bo trzeba by było wszystko przerobić. A czemu? Bo u mnie to <br />jeden impuls to ma być 1 krok silnika a w twoim przykładzie jeśli by się dodało sterowanie impulsem to 1impuls = 4kroki silnika.<br />Wszędzie gdzie ktoś wrzucił program na silnik krokowy to jest że minimum silnik robi 4 kroki. A u mnie musi być 1 krok minimum.<br />GwynBleidD- Hmmm... niezły pomysł dałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />A co do tego kto ma dawać te impulsy na INT to ja pisałem wcześniej że inna Atmega32.<br /><br />Przemyślę te propozycję,uwagi i napisze program od nowa.<br />Jednak co do użycia timerów to jeśli na tak mało skomplikowany przypadek użyć timer to co dopiero na bardzo skomplikowany? Timerów może braknąć <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=288">Janadamis</a> — 20 paź 2012, o 07:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-10-19T22:34:58+01:00</updated>
<published>2012-10-19T22:34:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17156#p17156</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17156#p17156"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17156#p17156"><![CDATA[
No, ale kolega postęp poczynił moim skromnym zdaniem. Chciałem mu doradzić, aby silnik krokowy chwilowo przerobił na diody led. Mógłby łatwo obserwować, co się dzieje z jego programem. I doszedł do tego samodzielnie, brawo, ale niestety dalej poległ, bo nie zrobił analizy tego, gdzie występują błędy w działaniu programu, nie błędy kodu. A są to dwie różne sprawy, prawda?<br />I tu się ujawniła zawiłość jednego ciągu kodu, obsługa przerwań w pliku głównym i inne błędy, które moi koledzy wymieniają. Więc moja rada jest prosta: trzeba zacząć od początku, ale trzymając się reguł i zasad. Pójdzie szybciej, prościej i nie będzie tak bolało.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 19 paź 2012, o 22:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-19T22:12:17+01:00</updated>
<published>2012-10-19T22:12:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17151#p17151</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17151#p17151"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17151#p17151"><![CDATA[
Tym bardziej, że w pierwszej książce są przykłady w jaki sposób można o wiele prościej realizować to uruchamianie kroków ... zamiast tak jak tutaj rozbudowywać pod niebiosa setkami IF'ów pętlę główną programu. Wiem wiem, że to na razie tylko testy - ale zebrać potem coś takiego do tzw &quot;kupy&quot; będzie ciężko ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 paź 2012, o 22:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2012-10-19T22:05:04+01:00</updated>
<published>2012-10-19T22:05:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17150#p17150</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17150#p17150"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17150#p17150"><![CDATA[
no dobra ......... a gdzie resetujesz licznik krok, przecie on sobie przy 5-ciu wartosciach dziala , a pózniej przez 250 kolejnych nic nie robi.<br /><br />Druga sprawa ja bym sobie poszczególne kroki wrzucił do jednej tablicy i na niej realizował przełączanie cewek .........<br />zresztą dzięki temu kod by się troszkę uprościł <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />To tak luźno przyszło mi do głowy <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=225">Malutki_27</a> — 19 paź 2012, o 22:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-19T21:59:58+01:00</updated>
<published>2012-10-19T21:59:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17149#p17149</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17149#p17149"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17149#p17149"><![CDATA[
Więcej - to fakt - ale nie przesadzaj, że powtarzacie moje słowa. Ja tam może w jakiś mały sposób gdzieś coś komuś pomogłem, tym co piszę tu i tam - ale teraz sam patrzę z ogromną przyjemnością na to co panowie wyprawiacie tworząc swoje projekty, kody <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> itp<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 paź 2012, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-10-19T21:56:07+01:00</updated>
<published>2012-10-19T21:56:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17147#p17147</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17147#p17147"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17147#p17147"><![CDATA[
Mirku dziękuję za uznanie, ale swoimi ustami powtarzamy Twoje słowa. Tyle, że jest nas już coraz więcej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 19 paź 2012, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-19T21:39:58+01:00</updated>
<published>2012-10-19T21:39:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17143#p17143</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17143#p17143"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17143#p17143"><![CDATA[
<div class="quotetitle">worner napisał(a):</div><div class="quotecontent"><br />....., to mimo, że relatywnie rzecz biorąc kod programu nie jest długi, to ja bym podzielił go na pliki *.c i *.h. Naprawdę, mimo, że wielu osobom wydaję się to skomplikowane, to jednak porządkuje to każdy projekt, nawet dość mały. Potem wystarczy śledzić zapisy kodu w każdym pliku osobno i bardzo szybko można go zdebugować nie używając nawet diody, że o kolegach z forum nie wspomnę.<br /></div><br /><br />Bardzo bardzo cenna garść uwag <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... zresztą wystarczy spojrzeć na konkursowe kody kolegi worner.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 paź 2012, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-10-19T21:34:13+01:00</updated>
<published>2012-10-19T21:34:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17141#p17141</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17141#p17141"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17141#p17141"><![CDATA[
Być może nie pomogę, ale może nie zaszkodzę. <br />Do rzeczy: Jak ja robiłem inicjalizację INT0, to raczej nie konfigurowałem PD2 jako wejścia (linia 25 i 28). O ile dobrze pamiętam, to procek i tak prawidłowo zinterpretuje przerwanie, mimo takich deklaracji, ale chyba te linie są nie potrzebne.<br /><br />To jest rzecz w zasadzie druga. Bo pierwsza, to mimo, że relatywnie rzecz biorąc kod programu nie jest długi, to ja bym podzielił go na pliki *.c i *.h. Naprawdę, mimo, że wielu osobom wydaję się to skomplikowane, to jednak porządkuje to każdy projekt, nawet dość mały. Potem wystarczy śledzić zapisy kodu w każdym pliku osobno i bardzo szybko można go zdebugować nie używając nawet diody, że o kolegach z forum nie wspomnę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 19 paź 2012, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-19T20:04:02+01:00</updated>
<published>2012-10-19T20:04:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17130#p17130</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17130#p17130"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17130#p17130"><![CDATA[
Dzięki.<br />Ale musiałem jeszcze no połowę programu zmienić i teraz działa o wiele lepiej ale nie tak jak powinno.<br />Dziś jest już późno jutro dam znać czy działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />Zrobiłem jeszcze jedna próbę i działa lepiej ale nie tak jak powinno na początku liczy pięknie do 4 potem już ostatnia sie zaświeca świeci i po tym od nowa idzie raz szaleje nawet. Co może być przyczyną? Czy to jest oznaka ze procesor się wysłużył? Ja nigdy go nie resetowałem przyciskiem na płytce.<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-10-18<br /> *      Author: Janadamis<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define Krok_1 (1&lt;&lt;PA0)<br />#define Krok_2 (1&lt;&lt;PA1)<br />#define Krok_3 (1&lt;&lt;PA2)<br />#define Krok_4 (1&lt;&lt;PA3)<br /><br />volatile uint8_t krok;<br />volatile uint8_t stan;<br />int main(void)<br />{<br /><br />//---------------------------------------------------------------------------------------<br />// Przerwanie INT0<br />DDRD &amp;= ~(1&lt;&lt;PD2);  //INT0 jako wejscie<br />MCUCR |= (1&lt;&lt;ISC01);   // wyzwalanie zboczem opadajacym<br />GICR |= (1&lt;&lt;INT0);      // odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);      // podciągnięcie pinu INT0 do VCC<br /><br />sei();<br />//---------------------------------------------------------------------------------------<br /><br /><br /><br /><br />//---------------------------------------------------------------------------------------<br />// Konfiguracja wyjść sygnałów do mostka H<br />DDRA |= (Krok_1 | Krok_2 | Krok_3 | Krok_4);<br />PORTA &amp;= ~(Krok_1 | Krok_2 | Krok_2 | Krok_4);<br />//---------------------------------------------------------------------------------------<br /><br /><br />while(1)<br />{<br /><br /><br /><br /><br />if(krok==1)<br />{<br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_1;  //stan niski<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_1;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br /><br />}<br /><br /><br />if(krok==2)<br />{<br /><br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_2;  //stan niski<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_2;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br />}<br /><br />if(krok==3)<br />{<br /><br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_3;  //stan niski<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_3;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br />}<br /><br />if(krok==4)<br />{<br /><br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_4;  //stan niski<br />krok=0;<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_4;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br />}<br /><br /><br />}//while<br />}//main<br /><br /><br />//---------------------------------------------------------------------------------------<br />//Przerwanie od INT0<br />ISR( INT0_vect )<br />{<br /> krok++;<br /> stan=1;<br /><br />}<br />//---------------------------------------------------------------------------------------<br />[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />Zrobiłem w programie kolejną zmianę i działa tak jak ma działać tyle że co jakiś czas co 8kroków chyba ostatni krok ciągle świeci(zamiast silnika zamontowałem 4 diody LED które imitują silnik krokowy bipolarny) po chwili gaśnie albo zapala się kolejny, w skrócie program zaczyna szaleć po tym ustępuje i znów podziała dobrze na 8kroków i znów się knoci. <br />Nie mam już pojęcia co może być nie tak.<br />Proszę o pomoc.<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-10-18<br /> *      Author: Janadamis<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define Krok_1 (1&lt;&lt;PA0)<br />#define Krok_2 (1&lt;&lt;PA1)<br />#define Krok_3 (1&lt;&lt;PA2)<br />#define Krok_4 (1&lt;&lt;PA3)<br /><br />volatile uint8_t krok;<br />volatile uint8_t stan;<br />int main(void)<br />{<br /><br />//---------------------------------------------------------------------------------------<br />// Przerwanie INT0<br />DDRD &amp;= ~(1&lt;&lt;PD2);  //INT0 jako wejscie<br />MCUCR |= (1&lt;&lt;ISC01);   // wyzwalanie zboczem opadajacym<br />GICR |= (1&lt;&lt;INT0);      // odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);      // podciągnięcie pinu INT0 do VCC<br /><br />sei();<br />//---------------------------------------------------------------------------------------<br /><br /><br /><br /><br />//---------------------------------------------------------------------------------------<br />// Konfiguracja wyjść sygnałów do mostka H<br />DDRA |= (Krok_1 | Krok_2 | Krok_3 | Krok_4);<br />PORTA &amp;= ~(Krok_1 | Krok_2 | Krok_2 | Krok_4);<br />//---------------------------------------------------------------------------------------<br /><br /><br />while(1)<br />{<br /><br />if(krok==0)<br />{<br />PORTA &amp;= ~Krok_1;  //stan niski<br />PORTA &amp;= ~Krok_2;  //stan niski<br />PORTA &amp;= ~Krok_3;  //stan niski<br />PORTA &amp;= ~Krok_4;  //stan niski<br />stan=1;<br />}<br /><br /><br />if(krok==1)<br />{<br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_1;  //stan niski<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_1;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br /><br />}<br /><br /><br />if(krok==2)<br />{<br /><br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_2;  //stan niski<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_2;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br />}<br /><br />if(krok==3)<br />{<br /><br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_3;  //stan niski<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_3;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br />}<br /><br />if(krok==4)<br />{<br /><br />if(stan==0)<br />{<br />PORTA &amp;= ~Krok_4;  //stan niski<br />krok=0;<br />}<br /><br />if(stan==1)<br />{<br />PORTA |= Krok_4;   //stan wysoki<br />_delay_ms(3);   //czekaj<br />stan=0;<br />}<br /><br />}<br /><br /><br />}//while<br />}//main<br /><br /><br />//---------------------------------------------------------------------------------------<br />//Przerwanie od INT0<br />ISR( INT0_vect )<br />{<br /> krok++;<br /> stan=1;<br /><br />}<br />//---------------------------------------------------------------------------------------<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 19 paź 2012, o 20:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-10-19T19:54:06+01:00</updated>
<published>2012-10-19T19:54:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17127#p17127</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17127#p17127"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17127#p17127"><![CDATA[
Źle ustawiasz bit. Można powiedzieć, że zerujesz wyzerowany na starcie bit ISC01, czyli masz wyzwalanie poziomem niskim. Tak powinno być:<br />[syntax=c]MCUCR |= (1&lt;&lt;ISC01);   // wyzwalanie zboczem opadającym[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 19 paź 2012, o 19:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-19T19:15:15+01:00</updated>
<published>2012-10-19T19:15:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17124#p17124</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17124#p17124"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17124#p17124"><![CDATA[
AAA to teraz lepiej to rozumie.<br />No to dam na początek1ms potem zmniejszę .<br />A czy ten program będzie chodził? czy coś jeszcze w nim jest nie tak?<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-10-18<br /> *      Author: Janadamis<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define Krok_1 (1&lt;&lt;PA0)<br />#define Krok_2 (1&lt;&lt;PA1)<br />#define Krok_3 (1&lt;&lt;PA2)<br />#define Krok_4 (1&lt;&lt;PA3)<br /><br />volatile uint8_t krok;<br /><br />int main(void)<br />{<br /><br />//---------------------------------------------------------------------------------------<br />// Przerwanie INT0<br />DDRD &amp;= ~(1&lt;&lt;PD2);  //INT0 jako wejscie<br />MCUCR &amp;= ~(1&lt;&lt;ISC01);   // wyzwalanie zboczem opadajacym<br />GICR |= (1&lt;&lt;INT0);      // odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);      // podciągnięcie pinu INT0 do VCC<br /><br />sei();<br />//---------------------------------------------------------------------------------------<br /><br /><br /><br /><br />//---------------------------------------------------------------------------------------<br />// Konfiguracja wyjść sygnałów do mostka H<br />DDRA |= (Krok_1 | Krok_2 | Krok_3 | Krok_4);<br />PORTA &amp;= ~(Krok_1 | Krok_2 | Krok_2 | Krok_4);<br />//---------------------------------------------------------------------------------------<br /><br /><br />while(1)<br />{<br /><br /><br />if(krok==0)<br />{<br />PORTA &amp;= ~Krok_1;  //stan niski<br />PORTA &amp;= ~Krok_2;  //stan niski<br />PORTA &amp;= ~Krok_3;  //stan niski<br />PORTA &amp;= ~Krok_4;  //stan niski<br />}<br /><br />if(krok==1)<br />{<br />PORTA |= Krok_1;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br />if(krok==2)<br />{<br />PORTA |= Krok_2;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br />if(krok==3)<br />{<br />PORTA |= Krok_3;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br />if(krok==4)<br />{<br />PORTA |= Krok_4;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br /><br />}//while<br />}//main<br /><br /><br />//---------------------------------------------------------------------------------------<br />//Przerwanie od INT0<br />ISR( INT0_vect )<br />{<br /> krok++;<br /><br /> if(krok==5)<br />{<br />krok=1;<br />}<br />}<br />//---------------------------------------------------------------------------------------<br />[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />Wgrałem ten program lecz nie działa tak jak powinno. Robi np kilka razy każdy z kroków(nie po kolei) a jeden omija całkiem.<br />W czym może tkwić kłopot?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 19 paź 2012, o 19:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-19T19:10:32+01:00</updated>
<published>2012-10-19T19:10:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17123#p17123</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17123#p17123"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17123#p17123"><![CDATA[
Ok - zakładając że tam ma nie być klawisza to jeszcze raz<br /><br />czy nie rozumiesz jak działa wyzwalanie zboczem ????<br /><br />Po co ci myśleć o tym ile ma trwać impuls - ile ms itp żeby drugi je zliczał ..... ???<br /><br />Tzn pewnie że nie może być krótszy niż (bodajże 4 takty zegara), trzeba zajrzeć do noty PDF, ale możesz być dowolny np od 1us nawet do 10 sekund - co za różnica jeśli będzie wyzwalany zboczem np opadającym ???<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 paź 2012, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-19T18:59:36+01:00</updated>
<published>2012-10-19T18:59:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17122#p17122</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17122#p17122"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17122#p17122"><![CDATA[
Czytałem te artykuły.<br />Hmmm...<br />Źle to opisałem. Przez co źle zrozumiałeś. Zacznę od początku <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Mam procesor który jest zaprogramowany żeby co 1s dawał impuls do drugiego procesora który odbiera to poprzez INT i jeśli nadleci 1impuls to ten procek okręci silnikiem o 1krok. To wszystko tylko jak to ustawić.<br />Napisałeś ze ma się reagować zboczem opadającym ok zmienię na to (już wcześniej tak robiłem)<br />Teraz mama pytanie jak długo ma trwać ten impuls z pierwszego procesora by ten drugi każdy impuls zliczał? Ile us? jak najmniej? Np.1us? ale czy wtedy ten 2 procesor wykryje ten impuls? bo w nocie pisze że jak szybko będą impulsy to może ominąć? Czy to prawda?<br />I czy oprócz tego zbocza opadającego to INT jest dobrze ustawiony?<br />Teraz powinieneś dobrze zrozumieć <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=288">Janadamis</a> — 19 paź 2012, o 18:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-10-19T18:45:33+01:00</updated>
<published>2012-10-19T18:45:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17121#p17121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17121#p17121"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17121#p17121"><![CDATA[
Pewnie, że wina ustawienia przerwania - ale w zasadzie to wina w ogóle pomysłu aby obsługę klawisza robić w ten sposób na przerwaniu ....<br /><br />Powiedz mi czy nie czytasz czasem tych artykułów na moim blogu ? .... toż akurat ten:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/drgania-stykow-to-bajki-wiec-jak-to.html" >http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html</a><!-- m --><br /><br />który jest aż w 3 częściach byłby wręcz IDEALNY dla ciebie i twoich zastosowań ....<br /><br />Tymczasem ty ustawiasz sobie wyzwalanie przerwania NISKIM POZIOMEM logicznym i robisz sobie tym dodatkowo masakrę amerykańską piłą tarczową <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Pomyśl sobie, biorę swojego palucha i klikam na taki klawisz, który ty zrobiłeś - jak go wcisnę, to jak myślisz (nawet jeśli postaram się to krótko zrobić) ..... ile czasu będzie trwało to WCIŚNIĘCIE ????<br /><br />na pewno kilkadziesiąt do KILKUSET milisekund !!!<br /><br />a skoro tak, to twoje przerwanie - nawet GDYBY w ogóle na świecie nie było drgań styków - wykona się SETKI TYSIĘCY razy w trakcie tego mojego krótkiego niby kliknięcia paluchem w ten klawisz ....<br /><br />dodatkowo co nie DZIWNE - dojdą jeszcze drgania styków po wciśnięciu (co przy obsłudze klawiszy jaką proponuję w tych artykułach nie ma akurat żadnego znaczenia praktycznie) .....<br /><br />Ktoś mi niedawno na blogu w tym właśnie temacie zarzucił że ja źle uczę przyszłych inżynierów że opowiadam bzdury - o tych drganiach styków i że one są - i właśnie w takich procedurach m.in jak ty teraz sobie zrobiłeś - ujawnią się ..... Więc jak mogę mówić takie bluźnierstwa w tym artykule ????<br /><br />Tymczasem ja - nie twierdzę że drgań styków nie ma - tylko po prostu mnóstwo ludzi (więc się nie martw że tobie teraz się nie udało) .... wybiera tragiczne sposoby programistyczne - które niestety są narażone na te drgania. A po co ????? skoro można inaczej ...<br /><br />reasumując poczytaj uważnie te artykuły, daj sobie SPOKÓJ z tą obsługą klawisza na przerwaniu INTx bo to wręcz kuriozalny pomysł .... i zastosuj pomysły zaczerpnięte z tych artykułów....<br /><br />zresztą zobacz inni uczestnicy tego forum już dawno to poczytali i możesz zobaczyć że z powodzeniem korzystają z tych sposobów nie tylko do obsługi klawiszy mechanicznych - nie zaglądasz do naszych forumowych konkursów ??? a szkoda - bo to też kopalnia wiedzy, szczególnie że teraz forumowicze prezentują w pełni swoje kody źródłowe na konkursach - zobacz sam:<br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic1509.html" >topic1509.html</a><!-- l --><br /><br />poczytaj ten wątek i obejrzyj prezentację prac w nim zrobionych ok ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> myślę że da to tobie dużo do myślenia, da ci inspirację i szybko sobie poradzisz z tak błahymi problemami jak obsługa NIEBLOKUJĄCA klawiszy w swoich przeróżnych programach OK ?<br /><br />-----------------<br /><br />PS .... a na przyszłość - jeśli już do czegoś innego będziesz używał przerwań INTx - to miej na uwadze, że w 90% przypadków wykorzystuje się wyzwalanie ich ZBOCZEM - opadającym albo narastającym a nie poziomem logicznym. Bo żeby wykorzystać wyzwalanie poziomem logicznym to jeszcze trzeba umieć dobrze napisać do tego obsługę ..... Ale o tym kiedy indziej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 paź 2012, o 18:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-19T18:27:40+01:00</updated>
<published>2012-10-19T18:27:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17119#p17119</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17119#p17119"/>
<title type="html"><![CDATA[Re: Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17119#p17119"><![CDATA[
I jeszcze jedno pytanie.<br />W pdf Atmega32 pisze że krótkie impulsy nie będą uznawane do przerwania lecz nie mogę znaleźć ile to ms czy us ma być. Czy w tym przypadku to jest kłopot czy nie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 19 paź 2012, o 18:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Janadamis]]></name></author>
<updated>2012-10-19T17:02:32+01:00</updated>
<published>2012-10-19T17:02:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17117#p17117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17117#p17117"/>
<title type="html"><![CDATA[Przerwanie zewnętrzne INT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1673&amp;p=17117#p17117"><![CDATA[
Witam<br />Mam taki problem z przerwaniem zewnętrznym INT0<br />Napisałem program na procesor Atmega32 że jeśli dostanie stan niski na INT0 to program zrobi jeden krok silnika krokowego.<br />Czyli że ile jest impulsów tyle kroków silnika krokowego. Jednak to mi nie działa jak powinno. Wiem o tym że jeśli INT0 podłącze pod przycisk to będzie źle działać bo są drgania styków i INT0 szaleje (sprawdziłem).<br /><br />Więc na próbę na innym scalku napisałem program który co sekundę na 1 ms daje stan niski na porcie A0 potem podłączyłem ten port z portem INT tego pierwszego scalka. Program chodzi trochę lepiej jednak nie tak jak powinien ciągle tylko włącza raz jedną cewkę raz drugą ale w zły sposób.<br />Być może jest to wina źle ustawionego INT0. Proszę o pomoc w czym tkwi kłopot.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-10-18<br /> *      Author: Janadamis<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define Krok_1 (1&lt;&lt;PA0)<br />#define Krok_2 (1&lt;&lt;PA1)<br />#define Krok_3 (1&lt;&lt;PA2)<br />#define Krok_4 (1&lt;&lt;PA3)<br /><br />volatile uint8_t krok;<br /><br />int main(void)<br />{<br /><br />//---------------------------------------------------------------------------------------<br />// Przerwanie INT0<br />DDRD &amp;= ~(1&lt;&lt;PD2);  //INT0 jako wejscie<br />MCUCR &amp;= ~(1&lt;&lt;ISC01)|(1&lt;&lt;ISC01);    // wyzwalanie stanem niskim<br />GICR |= (1&lt;&lt;INT0);      // odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);      // podciągnięcie pinu INT0 do VCC<br /><br />sei();<br />//---------------------------------------------------------------------------------------<br /><br /><br /><br /><br />//---------------------------------------------------------------------------------------<br />// Konfiguracja wyjść sygnałów do mostka H<br />DDRA |= (Krok_1 | Krok_2 | Krok_3 | Krok_4);<br />PORTA &amp;= ~(Krok_1 | Krok_2 | Krok_2 | Krok_4);<br />//---------------------------------------------------------------------------------------<br /><br /><br />while(1)<br />{<br /><br /><br />if(krok==0)<br />{<br />PORTA &amp;= ~Krok_1;  //stan niski<br />PORTA &amp;= ~Krok_2;  //stan niski<br />PORTA &amp;= ~Krok_3;  //stan niski<br />PORTA &amp;= ~Krok_4;  //stan niski<br />}<br /><br />if(krok==1)<br />{<br />PORTA |= Krok_1;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br />if(krok==2)<br />{<br />PORTA |= Krok_2;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br />if(krok==3)<br />{<br />PORTA |= Krok_3;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br />if(krok==4)<br />{<br />PORTA |= Krok_4;   //stan wysoki<br />_delay_ms(1);   //czekaj<br />krok=0;<br />}<br /><br /><br />}//while<br />}//main<br /><br /><br />//---------------------------------------------------------------------------------------<br />//Przerwanie od INT0<br />ISR( INT0_vect )<br />{<br /> krok++;<br /><br /> if(krok==5)<br />{<br />krok=1;<br />}<br />}<br />//---------------------------------------------------------------------------------------<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=288">Janadamis</a> — 19 paź 2012, o 17:02</p><hr />
]]></content>
</entry>
</feed>