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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-15T23:39:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17619&amp;mode</id>
<entry>
<author><name><![CDATA[Pan_Kracy]]></name></author>
<updated>2017-02-15T23:39:14+01:00</updated>
<published>2017-02-15T23:39:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182766#p182766</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182766#p182766"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182766#p182766"><![CDATA[
Drgania styków można też wyeliminować bez uruchamiania przerwań:<br /><br />[syntax=c]if (!(PINE &amp; (1&lt;&lt;PE2)))        //jeśli wciśnięto przycisk podpięty do PE2<br />{<br />        _delay_ms(20);<br />        while (!(PINE &amp; (1&lt;&lt;PE2)));        //trzymaj w pętli póki przycisk wciśnięty<br />        _delay_ms(20);<br /><br />        //tutaj Twój kod<br /><br />}[/syntax]<br /><br />Do użycia tylko w pętli głównej programu  <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=16479">Pan_Kracy</a> — 15 lut 2017, o 23:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[freedom_street]]></name></author>
<updated>2017-02-15T23:22:04+01:00</updated>
<published>2017-02-15T23:22:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182764#p182764</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182764#p182764"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182764#p182764"><![CDATA[
Ehh... tak teraz widzę co zrobiłem. Dziękuję za radę i pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Pojawił się natomiast inny problem, po cleanowaniu projektu, poleciał .hex .eep .lssi. Coś się z Eclipse stało i po każdym kompilowaniu kasowało te pliki i nie mogłem wgrać nic z projektu, potem uruchomiłem ponownie komputer i został tylko folder Relase, nawet jeśli tworzyłem je sztucznie, lub przerzucałem z projektu Pana Mirka i tak były te pliki kasowane, tak więc muszę zaczynać od nowa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16225">freedom_street</a> — 15 lut 2017, o 23:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michal1210]]></name></author>
<updated>2017-02-15T00:14:04+01:00</updated>
<published>2017-02-15T00:14:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182683#p182683</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182683#p182683"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182683#p182683"><![CDATA[
hmmm no &quot;troszkę&quot; namieszałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />na początku w main ładnie odczytujesz temperaturę i ją nawet wyświetlasz po czym wpadasz w pierwszą pętlę while i tam sprawdzasz przycisk i mrugasz diodą, kolejne sprawdzanie temperatury odbywa się w drugiej pętli while która nigdy się nie wykona. Nie wiem czy to zrobiłeś z niewiedzy czy coś masz na celu ale w taki sposób się nie programuje. skoro masz BB to popatrz przeanalizuj jak wygląda program do np. odczytu temperatury lub inny trochę bardziej rozbudowany  może załapiesz jak powinna wyglądać taka ogólna budowa programu.<br /><br /><div class="quotetitle">freedom_street napisał(a):</div><div class="quotecontent"><br />Termometr zamarł, nie wyświetla ilości czujników a także temperatura nie zmienia się, to znaczy zmienia się ale jak podłączę i odłączę z zasilania. Nie wiem gdzie leży przyczyna :/<br /></div><br /><br />Przyczyna to właśnie to że ta druga pętla while nigdy się nie wykona.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=998">michal1210</a> — 15 lut 2017, o 00:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[freedom_street]]></name></author>
<updated>2017-02-15T00:03:21+01:00</updated>
<published>2017-02-15T00:03:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182681#p182681</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182681#p182681"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182681#p182681"><![CDATA[
Udało mi się uruchomić trzy diody z programu Pana Mirka i włącznik ale chcą zainicjować to termometru posypało się nieco <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Narazie do main a jak będzie działać ładnie podzielę. <br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-13<br /> *       Autor: Mirosław Kardaś<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 />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br /><br /><br /><br />void display_temp(uint8_t x);<br /><br />uint8_t czujniki_cnt; /* ilość czujników na magistrali */<br />volatile uint8_t s1_flag; /* flaga tyknięcia timera co 1 sekundę */<br />volatile uint8_t sekundy; /* licznik sekund 0-59 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />/// PART 1<br /><br />#define LED1 (1&lt;&lt;PA1)<br />#define LED2 (1&lt;&lt;PA2)<br />#define LED3 (1&lt;&lt;PA3)<br />#define KEY1 (1&lt;&lt;PA4)<br /><br />typedef struct {<br /> volatile uint8_t *KPIN;<br /> uint8_t key_mask;<br /> uint8_t wait_time_s;<br /> void (*kfun1)(void);<br /> void (*kfun2)(void);<br /> uint8_t klock;<br /> uint8_t flag;<br />} TBUTTON;<br /><br />// timery programowe<br />volatile uint16_t Timer1, Timer2;<br /><br />// własne funkcje użytkownika<br />void change_led1(void) {<br /> PORTA ^= LED1;<br />}<br /><br />void change_led2(void) {<br /> PORTA ^= LED2;<br />}<br /><br />// funkcja obsługi pojedynczych klawiszy<br />void key_press( TBUTTON * btn );<br /><br /><br />TBUTTON button; // definicja KLAWISZA<br /><br />//------------------------------------------------------------------<br /><br />/// PART 1 KONIEC<br /><br />int main(void) {<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 = 107; /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />TIMSK |= (1 &lt;&lt; OCIE0); /* zezwolenie na przerwanie CompareMatch */<br />/* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 10ms */<br /><br />lcd_init(); /* inicjalizacja LCD */<br /><br />/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />czujniki_cnt = search_sensors();<br /><br />/* wysyłamy rozkaz wykonania pomiaru temperatury<br /> * do wszystkich czujników na magistrali 1Wire<br /> * zakładając, że zasilane są w trybie NORMAL,<br /> * gdyby był to tryb Parasite, należałoby użyć<br /> * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br /><br />/* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br />_delay_ms(750);<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty */<br />/* wyświetlamy temperaturę gdy czujnik wykryty */<br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits))<br />display_temp(0);<br />else {<br />lcd_locate(1, 0);<br />lcd_str(&quot; error &quot;); /* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />}<br /><br />/* dokonujemy odczytu temperatury z drugiego czujnika o ile został wykryty */<br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits))<br />display_temp(9);<br />else {<br />lcd_locate(1, 9);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />sei();<br />/* włączamy globalne przerwania */<br /><br />// inicjacja stanu wysokiego podświetlenia LCD<br />DDRD = 0xff;<br />PORTD = 0xff;<br /><br />DDRB |= (1 &lt;&lt; PB0);<br /><br />lcd_locate(0, 0);<br />lcd_str_P(PSTR(&quot; TERMOMETR  LCD &quot;));<br />_delay_ms(5000);<br /><br />lcd_locate(0, 0);<br />lcd_str_P(PSTR(&quot;   TEXT     &quot;));<br />_delay_ms(5000);<br /><br />lcd_locate(0, 0);<br />lcd_str_P(PSTR(&quot;DDDDD     &quot;));<br />_delay_ms(5000);<br /><br />lcd_locate(0, 0);<br />lcd_str_P(PSTR(&quot;  Wew.     Zew. &quot;)); /* wyświetl napisy w zerowej linii LCD */<br /><br /><br /><br />/// PART 2<br /><br /> PORTA |= KEY1;  // podciągamy linie klawiszy do VCC<br /> DDRA |= LED1|LED2|LED3;  // piny LED jako WYjścia  DDRA |= LED1|LED2|LED3;<br /><br /> /* Timer2 – konfigurcajca silnika timerów programowych */<br /> TCCR2  |= (1&lt;&lt;WGM21);   // tryb pracy CTC<br /> TCCR2  |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); // preskaler = 1024<br /> OCR2  = 108;   // przerwanie porównania co 10ms (100Hz)<br /> TIMSK  = (1&lt;&lt;OCIE2); // Odblokowanie przerwania CompareMatch<br /><br /> button.KPIN = &amp;PINA;<br /> button.key_mask = KEY1;<br /> button.wait_time_s = 3;<br /> button.kfun1 = change_led1;<br /> button.kfun2 = change_led2;<br /><br /> sei();<br /><br /> while(1) {<br /><br />  key_press( &amp;button );<br /><br />  // przykładowy niezależny i nieblokujący proces<br />  if( !Timer2 ) {<br />   Timer2=50;<br />   PORTA ^= LED3;<br />  }<br /><br /> }<br /><br /><br />/// PART 2 KONIEC<br /><br />/* pętla nieskończona */<br />while (1) {<br /><br /><br />if (s1_flag) { /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */<br />if (0 == (sekundy % 3)) {<br /><br />uint8_t *cl = (uint8_t*) gSensorIDs;// pobieramy wskaźnik do tablicy adresów czujników<br />for (uint8_t i = 0; i &lt; MAXSENSORS * OW_ROMCODE_SIZE; i++)<br />*cl++ = 0; // kasujemy całą tablicę<br />czujniki_cnt = search_sensors(); // ponownie wykrywamy ile jest czujników i zapełniamy tablicę<br />lcd_locate(0, 8);<br />lcd_int(czujniki_cnt); // wyświetlamy ilość czujników na magistrali<br />}<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */<br />if (1 == (sekundy % 3))<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedną sekundę po rozkazie konwersji<br /> *  dokonuj odczytu i wyświetlania temperatur z 2 czujników jeśli są podłączone, jeśli nie<br /> *  to pokaż komunikat o błędzie<br /> */<br />if (2 == (sekundy % 3)) {<br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits))<br />display_temp(0);<br />else {<br />lcd_locate(1, 0);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits))<br />display_temp(9);<br />else {<br />lcd_locate(1, 9);<br />lcd_str(&quot; error &quot;);<br />}<br />}<br /><br />/* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */<br />s1_flag = 0;<br />} /* koniec sprawdzania flagi */<br /><br />}<br />/* koniec pętli nieskończonej */<br />}<br />/* wyświetlanie temperatury na pozycji X w drugiej linii LCD */<br />void display_temp(uint8_t x) {<br />lcd_locate(1, x);<br />if (subzero)<br />lcd_str(&quot;-&quot;); /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />else<br />lcd_str(&quot; &quot;); /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />lcd_int(cel); /* wyświetl dziesiętne części temperatury  */<br />lcd_str(&quot;.&quot;); /* wyświetl kropkę */<br />lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />lcd_str(&quot; C&quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) 0xdf*/<br />}<br /><br />/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />ISR(TIMER0_COMP_vect) {<br />static uint8_t cnt = 0; /* statyczna zmienna cnt do odliczania setnych ms */<br /><br />if (++cnt &gt; 99) { /* gdy licznik ms &gt; 99 (minęła 1 sekunda) */<br />s1_flag = 1; /* ustaw flagę tyknięcia sekundy */<br />sekundy++; /* zwiększ licznik sekund */<br />if (sekundy &gt; 59)<br />sekundy = 0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />cnt = 0; /* wyzeru licznik setnych ms */<br />}<br />}<br /><br />//// PART 3<br /><br />void key_press( TBUTTON * btn ) {<br /><br /> register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);<br /><br /> if( !btn-&gt;klock &amp;&amp; !key_press ) {<br />  btn-&gt;klock=1;<br /><br />  // reakcja na PRESS krótkie wcinięcie klawisza<br />  if(btn-&gt;kfun1) btn-&gt;kfun1();<br />  btn-&gt;flag=1;<br />  Timer1 = (btn-&gt;wait_time_s*1000)/10;<br /><br /> }<br /> else if( btn-&gt;klock &amp;&amp; key_press ) {<br />  (btn-&gt;klock)++;<br />  if( !btn-&gt;klock ) {<br />   Timer1=0;<br />   btn-&gt;flag=0;<br />  }<br /> } else if( btn-&gt;flag &amp;&amp; !Timer1 ) {<br />  // reakcja na dłuższe wcinięcie klawisza<br />  if(btn-&gt;kfun2) btn-&gt;kfun2();<br />  btn-&gt;flag=0;<br /> }<br /><br />}<br /><br />//*** przerwanie Timer2 CompareM<br />ISR(TIMER2_COMP_vect) {<br /><br /> uint16_t n;<br /><br /> n = Timer1;  /* 100Hz Timer1 */<br /> if (n) Timer1 = --n;<br /> n = Timer2;  /* 100Hz Timer2 */<br /> if (n) Timer2 = --n;<br />}<br /><br /><br /><br />//<br /><br />//// PART 3 KONIEC[/syntax]<br /><br />Termometr zamarł, nie wyświetla ilości czujników a także temperatura nie zmienia się, to znaczy zmienia się ale jak podłączę i odłączę z zasilania. Nie wiem gdzie leży przyczyna :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16225">freedom_street</a> — 15 lut 2017, o 00:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[freedom_street]]></name></author>
<updated>2017-02-14T19:49:32+01:00</updated>
<published>2017-02-14T19:49:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182651#p182651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182651#p182651"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182651#p182651"><![CDATA[
<div class="quotetitle">mczarny napisał(a):</div><div class="quotecontent"><br />O drganiach styków i obsłudze klawisza poczytaj na blogu P.Mirka.<br />Powiedz jeszcze co to jest?<br />[syntax=c]_delay_ms(55000);[/syntax]<br /><br />chcesz 55sek. opóźnienia ? funkcja delay z takim czasem po prostu ci nie zadziała<br /></div><br /><br />Koncepcja jest taka, żeby włączyć podświetlenie LCD i po 55 sek. sobie gaśnie a gdyby gasło stopniowo było by pięknie., idąc dalej jak podświetlenie LCD zgaśnie to zapala się dioda standBy, która sobie spokojnie mruga. Takie dodatkowe ćwiczenia, które mi wpadło do głowy apropo LCD i biblioteki termometru z książki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><div class="quotetitle">zoom napisał(a):</div><div class="quotecontent"><br />Poczytaj na blogu - trzyczęściowy artykuł o przewrotnym tytule. Ale patent działa rewelacyjnie.<br />Spokojnie poczytaj i przeanalizuj. Poza tym jest podany gotowy kod obsługi przycisku, musisz tylko umieć odpalić przerwanie od timera.<br />W razie problemów pomożemy.<br /></div><br /><br />Dużo tego, książka blog ale nic, nie poddaję się <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=16225">freedom_street</a> — 14 lut 2017, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2017-02-14T08:19:53+01:00</updated>
<published>2017-02-14T08:19:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182603#p182603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182603#p182603"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182603#p182603"><![CDATA[
Poczytaj na blogu - trzyczęściowy artykuł o przewrotnym tytule. Ale patent działa rewelacyjnie.<br />Spokojnie poczytaj i przeanalizuj. Poza tym jest podany gotowy kod obsługi przycisku, musisz tylko umieć odpalić przerwanie od timera.<br />W razie problemów pomożemy.<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 --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 14 lut 2017, o 08:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-02-13T22:52:20+01:00</updated>
<published>2017-02-13T22:52:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182591#p182591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182591#p182591"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182591#p182591"><![CDATA[
O drganiach styków i obsłudze klawisza poczytaj na blogu P.Mirka.<br />Powiedz jeszcze co to jest?<br />[syntax=c]_delay_ms(55000);[/syntax]<br /><br />chcesz 55sek. opóźnienia ? funkcja delay z takim czasem po prostu ci nie zadziała<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 13 lut 2017, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2017-02-13T22:50:50+01:00</updated>
<published>2017-02-13T22:50:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182590#p182590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182590#p182590"/>
<title type="html"><![CDATA[Re: Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182590#p182590"><![CDATA[
Delaje to zły pomysł, bo blokujesz wszystko - również sprawdzanie stanu klawisza.<br /><br />Użyj timerów a guzikiem tylko ustawiaj flagi i potem już w samej pętli głównej zaswiecaj gaś lub migaj diodą<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 13 lut 2017, o 22:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[freedom_street]]></name></author>
<updated>2017-02-13T22:34:43+01:00</updated>
<published>2017-02-13T22:34:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182589#p182589</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182589#p182589"/>
<title type="html"><![CDATA[Coś nie tak z włącznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17619&amp;p=182589#p182589"><![CDATA[
Witajcie ponownie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Dla ćwiczeń zrobiłem dwie diody, jedna to z wyświetlacza a druga podłączona + włącznik i teraz tak chcę zrobić coś takiego : <br /><br />[syntax=c]if (klawisz_wcisniety()) {<br />PORTB ^= (1 &lt;&lt; PB0);<br />LED_TOG;<br />_delay_ms(55000);<br />LED_TOG_OFF<br />} else {<br />PORTB |= (1 &lt;&lt; PB0);<br />}[/syntax]<br /><br />Czyli jeśli włączam klawisz to zapala się dioda LCD a jeśli nie to pali się ta druga. Jestem w kłopocie, bo to rozwiązanie raz działa a raz nie. Ustawiając _delay_ms() w drugiej diodzie trzeba kilka razy nacisnąć przycisk albo dłużej go trzymać żeby dioda LCD się zapaliła z powrotem, natomiast usuwając _delay_ms() wszystko działa i dwie diody się przełączają. Chciałbym żeby ta druga mrugała. Jak za to się zabrać ? Chodzi to o drgania styków ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16225">freedom_street</a> — 13 lut 2017, o 22:34</p><hr />
]]></content>
</entry>
</feed>