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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-12-14T18:52:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=24060&amp;mode</id>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2021-12-14T18:52:57+01:00</updated>
<published>2021-12-14T18:52:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234535#p234535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234535#p234535"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234535#p234535"><![CDATA[
Napisz sobie swoją funkcję delay (Mirek gdzieś taką pokazał).<br />W funkcji wywołujesz _delay_ms(1) w pętli, a ilość obiegów pętli (czyli czas opóźnienia) podajesz jako argument tej funkcji.<br /><br />Bo Twój program działa tak, jak jest napisany <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br />Jeżeli nie naciskasz przycisku, to wywołujesz CZAS1.<br /><br />Spróbuj sam, jak nie dasz rady, ktoś pomoże <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=12752">Marhef</a> — 14 gru 2021, o 18:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-14T18:44:05+01:00</updated>
<published>2021-12-14T18:44:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234534#p234534</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234534#p234534"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234534#p234534"><![CDATA[
Myślałem żeby to zrobić za pomocą pętli do...while ale nie wiem czy to dobry pomysł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 14 gru 2021, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-14T15:02:11+01:00</updated>
<published>2021-12-14T15:02:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234533#p234533</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234533#p234533"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234533#p234533"><![CDATA[
Faktycznie pomogło. Wielkie dzięki. Teraz program działa jednak nie tak jak chciałem. To znaczy diody płyną co 100 ms jak nacisnę i trzymam przycisk 2 to zwalniają, jak naciśnę przycisk i trzymam to zwalniają jeszcze bardziej. Chciałem jednak osiągnąć efekt trwały, żebym nacisnieciem przycisku zmieniał czas i nie musiał go trzymać. Ale to chyba wyższa szkoła jazdy i nie zrealizuję tego w ten sposób. Jak można to najłatwiej rozwiązać ?<br />Oto obecny kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br />#define KEY1_PIN (1&lt;&lt;PA0) //definicja pinu przycisku1<br />#define KEY2_PIN (1&lt;&lt;PA1) //definicja pinu przycisku2<br />#define KEY3_PIN (1&lt;&lt;PA2) // definicja pinu przycisku3<br /><br /><br />#define CZAS1 (_delay_ms (100))<br />#define CZAS2 (_delay_ms (250))<br />#define CZAS3 (_delay_ms (500))<br /><br />uint8_t przesuniecie=1; //zmienna zapalajaca kolejne bity portu C<br />uint8_t kierunek; //zmienna kierunku zapalanie sie LED<br />uint8_t klawisz_wcisniety(uint8_t klawisz); //deklaracja funkcji<br /><br /><br />int main(void)<br />{<br /><br />DDRA &amp;= ~(KEY1_PIN | KEY2_PIN | KEY3_PIN); //piny przyciskow - wejscia<br />PORTA |= KEY1_PIN | KEY2_PIN | KEY3_PIN;//podciagniecie pinow do vcc<br /><br /><br />DDRC =0xff;<br />PORTC = 0xff;<br /><br /><br />while(1)<br />{<br /><br />if (klawisz_wcisniety (KEY1_PIN)) CZAS1;<br />if (klawisz_wcisniety (KEY2_PIN)) CZAS2;<br />if (klawisz_wcisniety (KEY3_PIN)) CZAS3;<br />else CZAS1;<br /><br /><br /><br /><br />PORTC =~przesuniecie;<br /><br />if (kierunek == 0) przesuniecie &lt;&lt;= 1;<br />if (kierunek == 1) przesuniecie &gt;&gt;= 1;<br /><br /><br />if (przesuniecie == 128) kierunek = 1;<br />if (przesuniecie == 1) kierunek = 0;<br /><br /><br /><br /><br />}<br /><br /><br />}<br /><br /><br />//definicja funkcji<br />uint8_t klawisz_wcisniety(uint8_t klawisz)<br /><br />{<br />if (!(PINA &amp; klawisz)) return 1;<br />return 0;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 14 gru 2021, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2021-12-13T18:00:32+01:00</updated>
<published>2021-12-13T18:00:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234528#p234528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234528#p234528"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234528#p234528"><![CDATA[
Masz funkcję klawisz_wcisniety wewnątrz funkcji main.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 13 gru 2021, o 18:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-13T16:47:47+01:00</updated>
<published>2021-12-13T16:47:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234527#p234527</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234527#p234527"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234527#p234527"><![CDATA[
Teraz postanowiłem wzbogacić mój program o obsługę 3 przycisków...Przycisk 1 ma ustawiać czas na 100ms drugi na 250 a trzeci na 500. Kod wygląda tak:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br />#define KEY1_PIN (1&lt;&lt;PA0) //definicja pinu przycisku1<br />#define KEY2_PIN (1&lt;&lt;PA1) //definicja pinu przycisku2<br />#define KEY3_PIN (1&lt;&lt;PA2) // definicja pinu przycisku3<br /><br /><br />#define CZAS1 (_delay_ms (100))<br />#define CZAS2 (_delay_ms (250))<br />#define CZAS3 (_delay_ms (500))<br /><br />uint8_t przesuniecie=1; //zmienna zapalajaca kolejne bity portu C<br />uint8_t kierunek; //zmienna kierunku zapalanie sie LED<br />uint8_t klawisz_wcisniety(uint8_t klawisz); //deklaracja funkcji<br /><br /><br />int main(void)<br />{<br /><br />DDRA &amp;= ~(KEY1_PIN | KEY2_PIN | KEY3_PIN); //piny przyciskow - wejscia<br />PORTA |= KEY1_PIN | KEY2_PIN | KEY3_PIN;//podciagniecie pinow do vcc<br /><br /><br />DDRC =0xff;<br />PORTC = 0xff;<br /><br /><br />while(1)<br />{<br /><br />if (klawisz_wcisniety (KEY1_PIN)) CZAS1;<br />if (klawisz_wcisniety (KEY2_PIN)) CZAS2;<br />if (klawisz_wcisniety (KEY3_PIN)) CZAS3;<br /><br /><br /><br /><br />PORTC =~przesuniecie;<br /><br />if (kierunek == 0) przesuniecie &lt;&lt;= 1;<br />if (kierunek == 1) przesuniecie &gt;&gt;= 1;<br /><br /><br />if (przesuniecie == 128) kierunek = 1;<br />if (przesuniecie == 1) kierunek = 0;<br /><br /><br /><br /><br />CZAS1;<br />}<br /><br />//definicja funkcji<br />uint8_t klawisz_wcisniety(uint8_t klawisz)<br /><br />{<br />if (!(PINA &amp; klawisz)) return 1;<br />return 0;<br /><br />}<br />}[/syntax]<br /><br />Niestety mam 3 błędy kompilacji:<br /><br />main.c:(.text.startup.main+0x14): undefined reference to `klawisz_wcisniety'<br />main.c:(.text.startup.main+0x30): undefined reference to `klawisz_wcisniety'<br />main.c:(.text.startup.main+0x4c): undefined reference to `klawisz_wcisniety'<br /><br />Co robię źle i jak ewentualnie to naprawić ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 13 gru 2021, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2021-12-12T19:21:39+01:00</updated>
<published>2021-12-12T19:21:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234524#p234524</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234524#p234524"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234524#p234524"><![CDATA[
Rób po kolei jak w blue booku. Na pewno ogarniesz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />A co do pomagania... po to jest forum. Kiedyś ja potrzebowałem pomocy w podstawach, teraz sam mogę pomóc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 12 gru 2021, o 19:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-12T18:06:42+01:00</updated>
<published>2021-12-12T18:06:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234523#p234523</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234523#p234523"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234523#p234523"><![CDATA[
Teraz wszystko działa jak chciałem. Jeszcze raz bardzo dziękuję. Teraz spróbuję dodać obsługę przycisków. Wkleję później kod z moimi wypocinami<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 12 gru 2021, o 18:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2021-12-12T14:35:06+01:00</updated>
<published>2021-12-12T14:35:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234522#p234522</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234522#p234522"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234522#p234522"><![CDATA[
Pierwszy problem rozwiążesz, jeśli najpierw wyślesz wartość na port, a później przesuniesz (czyli linijkę 30 przesuń przed 23).<br />A drugi... spróbuj w linijce 28 zmienić 0 na 1.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 12 gru 2021, o 14:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-12T14:30:20+01:00</updated>
<published>2021-12-12T14:30:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234521#p234521</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234521#p234521"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234521#p234521"><![CDATA[
Bardzo dziękuję....niby proste a jednak wymaga doświadczenia....kod wygląda teraz tak...lecz jeszcze są jeszcze 2 małe problemy<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define CZAS (_delay_ms (200))<br /><br /><br />uint16_t przesuniecie =1;<br />uint8_t kierunek;<br /><br />int main(void)<br />{<br /><br />DDRC =0xff;<br />PORTC = 0xff;<br /><br /><br /><br />while(1)<br />{<br /><br /><br /><br />if (kierunek == 0) przesuniecie &lt;&lt;= 1;<br />if (kierunek == 1) przesuniecie &gt;&gt;= 1;<br /><br /><br />if (przesuniecie == 128) kierunek = 1;<br />if (przesuniecie == 0) kierunek = 0;<br /><br />PORTC =~przesuniecie;<br />CZAS;<br /><br /><br />}<br />}[/syntax]<br /><br />a mianowicie....<br />po załączeniu diody &quot;płyną&quot; od lewej do prawej lecz zaczynając od drugiej diody (pierwsza się nie zapala), a drugi problem że diody &quot;płyną w lewo później w prawo i gasną a ja bym chciał żeby ta pętla pracowała w nieskonczoność ? Bardzo dziękuję koledze za poświęconą uwagę i czas (to w dzisiejszych czasach trudne do przecenienia)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 12 gru 2021, o 14:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2021-12-12T13:29:28+01:00</updated>
<published>2021-12-12T13:29:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234520#p234520</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234520#p234520"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234520#p234520"><![CDATA[
Prawie dobrze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Tylko teraz tak: w każdym kroku przesuwasz w lewo (linijka 22). A jak przesuniecie będzie &gt;128 dodatkowo w prawo <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br />Linijki od 22 do 24 zamień na:[syntax=c]if (kierunek == 0) przesunięcie &lt;&lt;= 1;<br />if (kierunek == 1) przesuniecie &gt;&gt;= 1;[/syntax]<br />i w dowolnym miejscu w pętli while:[syntax=c]if (przesuniecie == 128) kierunek = 1;<br />if (przesuniecie == 0) kierunek = 0;[/syntax]Piszę z głowy, więc może trzeba będzie lekko zmienić <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=12752">Marhef</a> — 12 gru 2021, o 13:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-12T10:02:01+01:00</updated>
<published>2021-12-12T10:02:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234519#p234519</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234519#p234519"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234519#p234519"><![CDATA[
Bardzo dziękuję za podpowiedź, jednak nie za bardzo rozumiem jak ma to działać. Mógłbyś wkleić kawałek kodu jak powinno to wyglądać ? Z góry dziękuję<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 32 minutach ]</span></strong><br /><br />Zmieniłem warunek i teraz diody płyną od lewej do prawej po czym ostatnia dioda zapala się i tak zostaje. Kolejne diody nie zapalają się<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define CZAS (_delay_ms (200))<br /><br /><br />uint16_t przesuniecie =1;<br />uint8_t kierunek;<br /><br />int main(void)<br />{<br /><br />DDRC =0xff;<br />PORTC = 0xff;<br /><br /><br /><br />while(1)<br />{<br /><br /><br />przesuniecie &lt;&lt;=1;<br /><br />if(przesuniecie&gt;128)przesuniecie &gt;&gt;=1;<br /><br /><br /><br /><br />PORTC =~przesuniecie;<br />CZAS;<br /><br /><br />}<br />}[/syntax]<br /><br />Niestety nie wiem jak uzyć zmiennej kierunek w tym przypadku<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 12 gru 2021, o 10:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2021-12-11T20:04:49+01:00</updated>
<published>2021-12-11T20:04:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234506#p234506</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234506#p234506"/>
<title type="html"><![CDATA[Re: Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234506#p234506"><![CDATA[
Dodajesz zmienną kierunek. Jeśli kierunek ==0 to przesuwasz w lewo, jeśli 1 to w prawo.<br />I dodajesz dwa warunki zamiast tego, który masz. Jeżeli przesuniecie = 128, to kierunek = 1, jeśli przesuniecie = 0, to kierunek = 0 (albo warunki odwrotnie).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 11 gru 2021, o 20:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rafael_ch]]></name></author>
<updated>2021-12-11T17:56:37+01:00</updated>
<published>2021-12-11T17:56:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234504#p234504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234504#p234504"/>
<title type="html"><![CDATA[Pytanie początkującego - Operacje na portach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24060&amp;p=234504#p234504"><![CDATA[
Witam serdecznie. Jestem początkujący i wiem że pytanie jest pewnie banalne jednak proszę o pomoc. Napisałem w celach treningowo-edukacyjnych krotki kod ktory w pętli ma zaswiecac kolejno diodyod 1 do 8 podłączone do portu C Atmegi32. Wszystko działa chociaż pewnie dałoby się to lepiej zrobić. Chciałbym jednak żeby po zapaleniu ostatniej diody, diody zmieniły kierunek,to znaczy żeby &quot;płynęły&quot; od lewej do prawej i znów od prawej do lewej i tak w nieskonczonosc. Proszę o zerknąć na kod i podpowiedzieć mi jak to zrobić. Będę bardzo wdzięczny za pomoc i sugestie<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define CZAS (_delay_ms (200))<br /><br /><br />uint16_t przesuniecie =1;<br /><br />int main(void)<br />{<br /><br />DDRC =0xff;<br />PORTC = 0xff;<br /><br /><br /><br />while(1)<br />{<br /><br /><br />przesuniecie &lt;&lt;=1;<br /><br />if(przesuniecie&gt;128)przesuniecie =1;<br /><br /><br /><br />PORTC =~przesuniecie;<br />CZAS;<br /><br /><br />}<br />}[/syntax]<br /><br />chodzi mi żeby przesuniecie bitów na porcie C zadziałało w drugą stronę po zaleniu ostaniej 8 diody<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21849">rafael_ch</a> — 11 gru 2021, o 17:56</p><hr />
]]></content>
</entry>
</feed>