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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-05-18T08:20:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15405&amp;mode</id>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2016-05-18T08:20:35+01:00</updated>
<published>2016-05-18T08:20:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160848#p160848</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160848#p160848"/>
<title type="html"><![CDATA[Re: Problem z nastawą czasu i uruchomieniem timera.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160848#p160848"><![CDATA[
Kolego dziwisz się że dzieją się różne rzeczy w kodzie. Jak w funkcji wprowadź masz delay-ów co nie miara. Korzystasz już z timera to czemu nie wprowadzisz do kodu flagi przerwania od timera. W tedy funkcja &quot;wprowadź&quot; nie będzie ci wstrzymywać całego programu bo nie będziesz używał już delay-ów<br /><br />Każde wejście w funkcję &quot;wprowadź&quot; wstrzymuje twój program na 800ms<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 18 maja 2016, o 08:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-05-17T21:19:06+01:00</updated>
<published>2016-05-17T21:19:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160831#p160831</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160831#p160831"/>
<title type="html"><![CDATA[Re: Problem z nastawą czasu i uruchomieniem timera.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160831#p160831"><![CDATA[
Może skomentuj w funkcji &quot;wprowadz&quot;, czego się spodziewasz od kodu w linijkach, to rozjaśni trochę sytuację.<br />Łatwiej będzie coś podpowiedzieć.<br />Jak na razie, to ja bym to napisał zupełnie inaczej, jak zapewne większość kolegów.<br />No ale nie o to chodzi żeby napisać gotowca. <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=11549">Daro69</a> — 17 maja 2016, o 21:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vitt]]></name></author>
<updated>2016-05-17T19:59:46+01:00</updated>
<published>2016-05-17T19:59:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160825#p160825</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160825#p160825"/>
<title type="html"><![CDATA[Problem z nastawą czasu i uruchomieniem timera.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15405&amp;p=160825#p160825"><![CDATA[
Witam!<br /><br />Projektuję zegar na uczelnię i mam problem z nastawą czasu a później uruchomieniem zegara. <br />Zegar ma działać tak, że najpierw ustawiam godzinę klawiszami (&quot;up&quot; inkrementuje dany segment zegara, klawisz &quot;ok&quot; przesuwa segment zegara) a później uruchamiam go klawiszem &quot;ustaw&quot;<br />Chodzi o to, że gdy zmienną start wprowadzam w pętlę while funkcji głównej programu w postaci:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">if (!start) wprowadz();</div><br />czas bez problemu mogę ustawić za pomocą klawiszy, natomiast gdy nacisnę przycisk &quot;ustaw&quot;, zegar nie startuje, a w zasadzie to dostaje zwiechy i po &quot;wariackim&quot; klikaniu w klawisze &quot;up&quot; i &quot;ok&quot; wystartuje z opóźnieniem. Natomiast gdy w pętli while funkcji głównej programu nie wpiszę tego warunku, to zegar startuje po naciśnięciu przycisku &quot;ustaw&quot; od zera. Znajdzie się ktoś kto podpowie jak prawidłowo powinien wyglądać kod?<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br />#define F_CPU 16000000<br /><br />// zmienne czasu<br />volatile unsigned char dz_godz=0;<br />volatile unsigned char jed_godz=0;<br />volatile unsigned char dz_minut=0;<br />volatile unsigned char jed_minut=0;<br />volatile unsigned char dz_sek=0;<br />volatile unsigned char jed_sek=0;<br />volatile int stala0 = 0;<br />volatile int stala1 = 0;<br />volatile int start=0;<br /><br />// zmienna eliminacji drgan stykow<br />uint8_t key_lock;<br /><br />// bufor funkcji itoa<br />char buffer&#91;10&#93;;<br /><br />// definicje klawiszy<br />#define up (1&lt;&lt;PC5)// wybór wartosci pozycji<br />#define ok (1&lt;&lt;PC4)// wybór pozycji<br />#define ustaw(1&lt;&lt;PD3)// uruchomienie timera od przerwania INT1<br /><br />//deklaracje funkcji<br />void wprowadz();<br /><br /><br />int main (void){<br /><br />PORTC |= up | ok;// podciągniecie rezystora pod vcc<br />PORTD |= ustaw;//<br />DDRD &amp;= ~ustaw;// ustawienie portu PD3 jako wejscia<br /><br />// ustawienia timera<br />TCCR0 = (1&lt;&lt;CS01)|(1&lt;&lt;CS00);// preskaler 64<br />TIMSK |= (1 &lt;&lt; TOIE0);<br />// aktywne przerwanie od przepełnienia<br />MCUCR |= (1&lt;&lt;ISC11)|(1&lt;&lt;ISC10);// ustawienie zbocza opadającego<br />GICR |= (1&lt;&lt;INT1);// ustawienie przerwania na porcie PD3<br /><br />LCD_Initalize();<br /><br />sei();// włączenie przerwań globalnych<br /><br />while(1){<br /><br />LCD_GoTo(0,0);<br />LCD_WriteText(&quot;WPROWADZ CZAS&quot;);<br />LCD_GoTo(0,1);<br />LCD_WriteText(itoa(dz_godz,buffer,10));<br />LCD_WriteText(itoa(jed_godz,buffer,10));<br />LCD_WriteText(&quot;:&quot;);<br />LCD_WriteText(itoa(dz_minut,buffer,10));<br />LCD_WriteText(itoa(jed_minut,buffer,10));<br />LCD_WriteText(&quot;:&quot;);<br />LCD_WriteText(itoa(dz_sek,buffer,10));<br />LCD_WriteText(itoa(jed_sek,buffer,10));<br />if (!start) wprowadz();<br /><br />}<br /><br />}<br /><br />ISR (TIMER0_OVF_vect)<br />{<br />TCNT0=0;<br />if(start){<br />stala0++;// preskaler z dokładnoscią co do sekundy<br />if(stala0 == 4){<br />stala0=0;<br />stala1++;<br />if(stala1 == 16){<br />stala1=0;<br />jed_sek++;<br />}<br />}<br />if(jed_sek == 10){// inkrementacja kolejnych segmentow zegara<br />jed_sek = 0;<br />dz_sek++;<br />if(dz_sek == 6){<br />dz_sek=0;<br />jed_minut++;<br />if(jed_minut == 10){<br />jed_minut = 0;<br />dz_minut++;<br />if(dz_minut == 6){<br />dz_minut=0;<br />jed_godz++;<br />if(jed_godz == 10){<br />jed_godz=0;<br />dz_godz++;<br />if(dz_godz == 3)<br />dz_godz=0;<br />}<br />}<br />}<br />}<br />}<br />}<br />}<br /><br />// uruchomienie przerwania z przycisku ustaw<br />ISR (INT1_vect){<br />start=1;<br />}<br /><br />void wprowadz(){<br />//////////////////////// ustawienie godziny<br /><br />////// DZIESIATKI GODZIN<br />while(PINC &amp; ok){<br />if (!key_lock &amp;&amp; !(PINC &amp; up)){<br />_delay_ms(200);<br />dz_godz++;<br />if (dz_godz == 3)<br />dz_godz = 0;<br />}else if(key_lock &amp;&amp; (PINC &amp; up)) key_lock++;<br />LCD_GoTo(0,1);<br />LCD_WriteText(itoa(dz_godz,buffer,10));<br />}<br />_delay_ms(200);<br /><br />////// JEDNOSCI GODZIN<br />while(PINC &amp; ok){<br />if (!key_lock &amp;&amp; !(PINC &amp; up)){<br />_delay_ms(200);<br />jed_godz++;<br />if (jed_godz == 10 )<br />jed_godz = 0;<br />}else if(key_lock &amp;&amp; (PINC &amp; up)) key_lock++;<br />LCD_GoTo(1,1);<br />LCD_WriteText(itoa(jed_godz,buffer,10));<br />}<br />_delay_ms(200);<br /><br /><br />////// DZIESIATKI MINUT<br />while(PINC &amp; ok){<br />if (!key_lock &amp;&amp; !(PINC &amp; up)){<br />_delay_ms(200);<br />dz_minut++;<br />if (dz_minut == 6)<br />dz_minut = 0;<br />}else if(key_lock &amp;&amp; (PINC &amp; up)) key_lock++;<br />LCD_GoTo(3,1);<br />LCD_WriteText(itoa(dz_minut,buffer,10));<br />}<br />_delay_ms(200);<br /><br /><br />////// JEDNOSCI MINUT<br />while(PINC &amp; ok){<br />if (!key_lock &amp;&amp; !(PINC &amp; up)){<br />_delay_ms(200);<br />jed_minut++;<br />if (jed_minut == 10)<br />jed_minut = 0;<br />}else if(key_lock &amp;&amp; (PINC &amp; up)) key_lock++;<br />LCD_GoTo(4,1);<br />LCD_WriteText(itoa(jed_minut,buffer,10));<br />}<br />_delay_ms(200);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13803">vitt</a> — 17 maja 2016, o 19:59</p><hr />
]]></content>
</entry>
</feed>