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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-11-15T00:10:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=19609&amp;mode</id>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2017-11-15T00:10:50+01:00</updated>
<published>2017-11-15T00:10:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198968#p198968</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198968#p198968"/>
<title type="html"><![CDATA[Re: Zegar nastawianie przyciskami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198968#p198968"><![CDATA[
Timery programowe inkrementacja sekund w przerwaniu tylko jak to zrobić przerwanie obsługuje już wyświetlacz led  , co się tyczy reszty dzięki za słuszne uwagi pierwsza  keylock1 za pierwszym razem właśnie ta zrobiłem w drugim przycisku ale program nie działał więc zmieniłem na  keylock ale teraz wiem gdzie tkwi błąd  .<br /><br />Poz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 15 lis 2017, o 00:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-11-14T01:49:30+01:00</updated>
<published>2017-11-14T01:49:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198896#p198896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198896#p198896"/>
<title type="html"><![CDATA[Re: Zegar nastawianie przyciskami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198896#p198896"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;MULTIPLEKS/multipleks.h&quot;<br /><br />#define KEY_MIN (1&lt;&lt;PC1)<br />#define KEY_GODZ (1&lt;&lt;PC2)<br /><br />int main (void){<br /><br />PORTC |= KEY_MIN | KEY_GODZ;  // podciągamy linie klawiszy do VCC<br />multipleks_init();<br /><br />uint8_t cy1=0,cy2=0,cy3=0,cy4=0;<br />uint8_t sek=0, min=59, godz=23;<br /><br />sei(); //zezwolenie na przerwanie<br /><br />while(1)<br />{<br />cy1 = godz / 10;<br />if(cy1) cyfra&#91;0&#93;= cy1;<br />else cyfra&#91;0&#93;= 0;<br /><br />cy2=godz%10;<br />if(cy2) cyfra&#91;1&#93;= cy2;<br />else cyfra&#91;1&#93;= 0;<br /><br />cy3 = min / 10;<br />if(cy3) cyfra&#91;2&#93;= cy3;<br />else cyfra&#91;2&#93;= 0;<br /><br />cy4 = min % 10;<br />cyfra&#91;3&#93;= cy4;<br /><br />//*********************<br /><br />if(sek&lt;59) sek++;<br />else<br />{<br />sek = 0;<br />if(min&lt;59)<br />{<br />min++;<br />}<br />else<br />{<br />min = 0;<br />if(godz&lt;23)<br />{<br />godz++;<br />}<br />else<br />{<br />godz = 0;<br />}<br />}<br />}<br /><br />_delay_ms(1000);<br /><br />// ************ obsługa klawiszy**********<br /><br />//if( !(PINC &amp; KEY_MIN ) )<br />//{<br />//_delay_ms(80);// czas drgań styków<br />if( !(PINC &amp; KEY_MIN ) )<br />{<br />min++;// reakcja na wcinięcie przycisku<br />if(min&gt;59) min=0;<br />}<br />//}<br /><br />//if( !(PINC &amp; KEY_GODZ ) )<br />//{<br />//_delay_ms(80);// czas drgań styków<br />if( !(PINC &amp; KEY_GODZ ) )<br />{<br />godz++;// reakcja na wcinięcie przycisku<br />if(godz&gt;23) godz=0;<br />}<br />//}<br />}<br />}[/syntax]<br /><br />Problem polega na tym, że w pętli głównej wykorzystujesz delay 1000ms czyli jak wciśniesz i będziesz trzymał wciśnięty klawisz godzinowy to zmiana godzin (ustawianie godzin) będzie następowała co 1 sekundę. To samo tyczy się ustawiania minut. Tak czy inaczej, godziny i minuty są ustawiane prawidłowo.<br />Wyżej napisałem Ci uproszczoną wersję twojego programu, zobacz, że przy takim opóźnieniu 1s nawet nie trzeba się martwić o drgania styków.<br />Pomyśl nad timerem programowym, który będzie inkrementował sekundy w przerwaniu. Wtedy warto wykorzystać obsługę przycisków taką jak masz w swoim kodzie. Teraz napisałeś w sposób bardzo blokujący, uC nie robi nic przez 1s. Nie tędy droga.<br /><br />Dodatkowo powołałeś zmienną keylock1, której nigdzie nie używasz w kodzie, a powinieneś w obsłudze drugiego przycisku. Obecnie korzystasz z keylock dla obu.<br /><br />Powołujesz zmienne, które znajdują się w funkcji int main(void), więc są to zmienne lokalne. Zmienne lokalne muszą być zainicjowane, na przykład uint8_t cy1 = 0;<br /><br />A cóż to za zapis?  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br />[syntax=c]PORTC |= KEY_MIN , KEY_GODZ;[/syntax]<br /><br />Jak zrobisz clean projektu to zobaczysz ile masz warningów. Staraj się pisać tak, by po cleanowaniu, nie było ani jednego.  <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=7157">anshar</a> — 14 lis 2017, o 01:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2017-11-14T00:45:55+01:00</updated>
<published>2017-11-14T00:45:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198895#p198895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198895#p198895"/>
<title type="html"><![CDATA[Zegar nastawianie przyciskami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19609&amp;p=198895#p198895"><![CDATA[
Na początku chciałbym zaznaczyć że nie ma to być dokładny zegar tylko kolejny etap w mojej nauce teraz do rzeczy zegar działa poprawnie z pomocą na forum więc postanowiłem dodać dwa przyciski jeden do ustawienia godziny drugi minut gdy dodałem pierwszy przycisk ustawienie minut program działa poprawnie kłopoty zaczęły się po dodaniu drugiego przycisku do ustawiania godzin godziny zaczęły odliczać sekundy nie mam pojęcia w czym tkwi problem [syntax=c]#include&lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include&quot;MULTIPLEKS/multipleks.h&quot;<br /><br />#define KEY_MIN (1&lt;&lt;PC1)<br />#define KEY_GODZ (1&lt;&lt;PC2)<br /><br />int main (void){<br /><br />PORTC |= KEY_MIN , KEY_GODZ;  // podciągamy linie klawiszy do VCC<br />//_delay_ms(10);<br /><br />multipleks_init();<br /><br />sei(); //zezwolenie na przerwanie<br /><br /> uint8_t cy1,cy2,cy3,cy4;<br />         uint8_t sek, min, godz ;<br /> uint8_t key_lock,key_lock1;<br /><br />while(1){<br /><br />   cy1 = godz / 10;<br />   if(cy1)cyfra&#91;0&#93;= cy1;<br /><br />   else cyfra&#91;0&#93;= 0;<br />   cy2=godz%10;<br /><br />   if(cy2) cyfra&#91;1&#93;= cy2;<br /><br />   else cyfra&#91;1&#93;= 0;<br />   cy3 = min / 10;<br /><br />   if(cy3) cyfra&#91;2&#93;= cy3;<br /><br />   else cyfra&#91;2&#93;= 0;<br />   cy4 = min % 10;<br /><br />   cyfra&#91;3&#93;= cy4;<br /><br />//*********************<br /><br />   if(sek&lt;59){sek++; }<br />      else  {<br />      sek = 0;<br />    if(min&lt;59){ min++;}<br />    else{<br />      min = 0;<br />    if(godz&lt;23){godz++;}<br />    else{<br />     godz = 0;<br />        }<br />      }<br />    }<br />    _delay_ms(1000);<br /><br />// ************ obsługa klawiszy**********<br /><br /> if( !key_lock &amp;&amp; !(PINC &amp; KEY_MIN ) ) {<br />  key_lock = 1;<br />  min++;         // reakcja na wcinięcie przycisku<br />  if(min&gt;59) min =0;<br /><br />  } else if( key_lock &amp;&amp; (PINC &amp; KEY_MIN ) ) key_lock=0;<br /><br /><br /> if( !key_lock &amp;&amp; !(PINC &amp; KEY_GODZ ) ) {<br />  key_lock=1;<br />  godz++;    // reakcja na wcinięcie przycisku<br />  if(godz&gt;23) godz =0;<br /><br />  } else if( key_lock &amp;&amp; (PINC &amp; KEY_GODZ ) ) key_lock=0;<br /><br />}<br />}[/syntax] Poz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 14 lis 2017, o 00:45</p><hr />
]]></content>
</entry>
</feed>