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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-28T13:13:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=12&amp;t=8941&amp;mode</id>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-10-28T13:13:01+01:00</updated>
<published>2014-10-28T13:13:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=101177#p101177</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=101177#p101177"/>
<title type="html"><![CDATA[Re: on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=101177#p101177"><![CDATA[
Do obliczania parametrów Timer'a polecam także te stronę<br /><!-- m --><a class="postlink" href="http://impuls.elektroda.eu/joomla/index.php/mikroprocesory-avr/programowanie/kalkulatory-avr/avr-timer-kalkulator" >http://impuls.elektroda.eu/joomla/index ... kalkulator</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 28 paź 2014, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michał6201]]></name></author>
<updated>2014-10-28T13:03:22+01:00</updated>
<published>2014-10-28T13:03:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=101172#p101172</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=101172#p101172"/>
<title type="html"><![CDATA[Re: on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=101172#p101172"><![CDATA[
Dziękuję Wam za pomoc:)<br />Będę bawił się dalej. <br />MKavrCalculator mam także potrenuję też obliczanie parametrów do timerów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2765">michał6201</a> — 28 paź 2014, o 13:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-10-25T16:14:12+01:00</updated>
<published>2014-10-25T16:14:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100668#p100668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100668#p100668"/>
<title type="html"><![CDATA[Re: on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100668#p100668"><![CDATA[
Pozwólcie moi drodzy, że się wtrącę w wątek...<br />Kolego <strong>@Niveasoft</strong>, a co się stanie kiedy w Twoim programie po 2s nadal będę trzymał przycisk?  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br /><br />No dobra, żeby nie być tylko krytykiem to wrzucam moją wersję tego problemu i nieco zmieniłem Twój kod.<br />Przede wszystkim oczyściłem przerwania, bo dobrym nawykiem jest aby od początku robić tam porządek i umieszczać tylko niezbędne rzeczy (o czym zresztą sam wspominałeś). Dodałem za to timer programowy. Zmieniłem nieco interwał przerwań - teraz jest 10ms co łatwiej się liczy. Program jest oczywiście nieblokujący czyli nie zatrzymuje pętli głównej na czas swojego wykonywania. Pozmieniałem też kolejność instrukcji - tu również dobrym nawykiem jest aby włączać przerwania jak już wszystko się skonfiguruje i poustawia, bo o ile w tak prostym programie zgrzytu nie będzie o tyle w czymś bardziej skomplikowanym może być niezły zonk nawet ze zjaraniem peryferiów dołączonych do procka włącznie(!)...<br /><br /><strong>@michał6201</strong> przeanalizuj dokładnie moją wersję programu, a zobaczysz jakie cuda można wyprawiać z badaniem przycisku w ten sposób napisanym  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  O tym, że wyszło przy okazji gotowe debounce (nawiasem mówiąc tu niepotrzebne, ale przy dalszej rozbudowie niezbędne) nawet już nie wspominam...  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /> <br /><br />[syntax=basic4gl]$regfile = &quot;m8adef.dat&quot;<br />$crystal = 1000000            ' taktowanie wewnętrzne 1MHz<br /><br />' Konfiguracja Timera<br /><br />Config Timer0 = Timer , Prescale = 256<br />On Timer0 Timer0_isr<br />Timer0 = 217                  '1000000/256/39 = około 100Hz (10ms)  256-39=217<br />Enable Timer0                 'odblokowanie przerwania od przepełnienia timer0<br />'<br />Config Portd.0 = Input : Portd.0 = 1 : Switch Alias Pind.0       ' konfiguracja przycisku on/off<br />Config Portc.0 = Output : Portc.0 = 1 : Led Alias Portc.0       ' konfiguracja led (zgaszona)<br />'<br /><br />Dim Licz As Byte              'zmienna pomocnicza do odlczania dla przycisku<br />Dim Ti1 As Byte               'timer programowy<br />Enable Interrupts             'dobrym nawykiem jest odblokowanie przerwań jak już wszystko jest poustawiane<br /><br />'*** Start ***<br />'---------------------<br />Do<br />'<br />'<br />'<br />If Switch = 0 Then<br />   If Ti1 = 0 Then<br />      Ti1 = 10                'interwał 100ms, bo 10x10ms=100ms<br />      If Licz &lt; 255 Then Incr Licz       'granica bezpieczeństwa dla użytej zmiennej BYTE<br />      If Licz = 20 Then Toggle Led       '2s (20x100ms=2000ms) maksymalny czas może być 255x100ms=25,5s<br />   End If<br />Else<br />   Licz = 0<br />End If<br />'<br />'<br />'<br />Loop<br />End<br />'---------------------<br /><br /><br />Timer0_isr:<br />Timer0 = 217                  'odświerzenie wartości dla timera<br />'<br />If Ti1 &gt; 0 Then Decr Ti1      'licznik programowy<br />Return[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 25 paź 2014, o 16:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michał6201]]></name></author>
<updated>2014-10-25T01:49:37+01:00</updated>
<published>2014-10-25T01:49:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100577#p100577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100577#p100577"/>
<title type="html"><![CDATA[Re: on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100577#p100577"><![CDATA[
Teraz działa super.<br />A czemu dałeś wszystko do podprogramu obsługi przerwania? Dlaczego tak się robi?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2765">michał6201</a> — 25 paź 2014, o 01:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michał6201]]></name></author>
<updated>2014-10-25T01:35:57+01:00</updated>
<published>2014-10-25T01:35:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100575#p100575</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100575#p100575"/>
<title type="html"><![CDATA[Re: on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100575#p100575"><![CDATA[
Dziękuję Ci za kod.<br />Zmniejszyłem wartość zmiennej z 1000 do 125 żeby szybciej zmieniał się stan led, ale działa po puszczeniu przycisku, czyli nie wiemy kiedy doliczył do 125, póki nie puścimy przycisku. Można to jakoś odwrócić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2765">michał6201</a> — 25 paź 2014, o 01:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michał6201]]></name></author>
<updated>2014-10-25T01:17:16+01:00</updated>
<published>2014-10-25T00:57:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100573#p100573</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100573#p100573"/>
<title type="html"><![CDATA[Re: on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100573#p100573"><![CDATA[
Nie rozumiem tego.<br /><br />Jak puszczony przycisk to nie będzie inkrementowana zmienna word.<br />Jak przycisk wciśnięty to ma się inkrementować, a jak nie to nie.<br /><br />Ja zrobiłem to jeszcze tak jak ja to rozumuję a jak już wiesz ze mnie programista żaden, ale działa.<br />Ile czasu trzeba trzymać wciśnięty to tylko mógłbym zmierzyć stoperem, bo tego przeliczania też nie rozumiem, mimo że Panowie Górecki i Wiązania tłumaczyli to w swoich książkach.<br />[syntax=basic4gl]$regfile = &quot;m8adef.dat&quot;<br /><br />    $crystal = 1000000   ' taktowanie wewnętrzne 1MHz<br /><br />    ' ===========WŁĄCZNIK ON/OFF===============<br /><br />  Config Portd.0 = Input : Portd.0 = 1 : S Alias Pind.0       ' konfiguracja przycisku on/off<br />     Config Portc.0 = Output : Portc.0 = 1 : Led Alias Portc.0       ' konfiguracja led (zgaszona)<br /><br />  ' Konfiguracja Timera<br />  Config Timer0 = Timer , Prescale = 256<br /><br />       Enable Interrupts ' odblokowanie globalnego systemu przerwań<br />       Enable Timer0     ' odblokowanie przerwania od przepełnienia timer0<br />       Load Timer0 = 250 ' wartość początkowa timera = 250<br /><br /><br />         On Timer0 Odmierz_3s       ' przerwanie od przepełnienia etykieta Odmierz_3s<br />       Dim Licz As Byte  ' zmienna pomocnicza do odlczania czasu<br /><br />      Dim Flaga As Bit      ' zmienna pomocnicza<br />   Flaga = 1             ' stan spoczynkowy zmiennej pomocniczej 1<br />   Dim Flaga2 As Bit<br />   Flaga2 = 1<br /><br />   Do                       ' główna pętla<br /><br />   Debounce S , 0 , Odmierz_3s , Sub       ' jeśłi przycisk zwaty to idź odmierz 3 sekundy i wróć<br />   Led = Flaga2<br /><br />   Loop<br />   End<br /><br />        Odmierz_3s:      ' odmierzenie czasu 3 sekundy<br /><br /><br />       Load Timer0 = 250<br />       Incr Licz<br />       If Licz = 200 Then<br />       Licz = 0<br /><br />       If Licz = 0 Then<br />       If S = 0 Then<br />       Toggle Flaga2<br />        End If<br />       End If<br />       End If<br />       Return[/syntax]<br /><br />A tak zrozumiałem to co mi napisałeś, ale nie wiem czy dobrze.<br />Jeśli możesz to wytłumacz mi z tym timerem jak to się przelicza i o co w tym chodzi bo z tych książek nic nie rozumiem, a niby napisane dla początkujących. Teraz muszę bardzo długo trzymać przycisk żeby się zaświeciła led.<br /><br /> [syntax=basic4gl]$regfile = &quot;m8adef.dat&quot;<br /><br />    $crystal = 1000000   ' taktowanie wewnętrzne 1MHz<br /><br />    ' ===========WŁĄCZNIK ON/OFF===============<br /><br />  Config Portd.0 = Input : Portd.0 = 1 : S Alias Pind.0       ' konfiguracja przycisku on/off<br />     Config Portc.0 = Output : Portc.0 = 1 : Led Alias Portc.0       ' konfiguracja led (zgaszona)<br /><br />  ' Konfiguracja Timera<br />  Config Timer0 = Timer , Prescale = 256 , Const Timer0reload = 15<br /><br />Enable Interrupts ' odblokowanie globalnego systemu przerwań<br />       Enable Timer0     ' odblokowanie przerwania od przepełnienia timer0<br />       Load Timer0 = 250 ' wartość początkowa timera = 250<br /><br /><br />         On Timer0 Odmierz_3s       ' przerwanie od przepełnienia etykieta Odmierz_3s<br /><br />       Dim Licz As Byte  ' zmienna pomocnicza do odlczania czasu<br /><br />      Dim Flaga As Bit      ' zmienna pomocnicza<br />   Flaga = 1             ' stan spoczynkowy zmiennej pomocniczej 1<br />Dim Zmienna As Word<br /><br /><br />   Do                       ' główna pętla<br /><br />    If S = 0 Then Flaga = 0<br />    If S = 1 Then Gosub Odmierz_3s<br />    If Zmienna &gt; 1000 Then<br />    Toggle Led<br />    Flaga = 1<br />    If Zmienna &lt; 1000 Then<br />    Zmienna = 0<br />    Flaga = 0<br />    End If<br />    End If<br /><br /><br /><br />   Loop<br />   End<br /><br />   Odmierz_3s:<br />     Load Timer0 = 250<br /><br />     If S = 0 Then<br />     Incr Zmienna<br />    End If<br />    Return[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2765">michał6201</a> — 25 paź 2014, o 00:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michał6201]]></name></author>
<updated>2014-10-24T23:36:48+01:00</updated>
<published>2014-10-24T23:36:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100568#p100568</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100568#p100568"/>
<title type="html"><![CDATA[on/off z timerem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8941&amp;p=100568#p100568"><![CDATA[
Witam<br /><br />Napisałem kiedyś mały programik służący do załączania i wyłączania led za pomocą jednego przycisku z opóźnieniem, ale zrobiłem to używając &quot;waitms&quot;. Chodziło mi o to aby led nie zaświecała się odrazu po naciśnięciu przycisku,tylko trzeba było go chwilę przytrzymać i dopiero się led zaświeciła. I to samo przy zgaszeniu led.<br /><br />[syntax=basic4gl]$regfile = &quot;m8adef.dat&quot;<br /><br />    $crystal = 1000000   ' taktowanie wewnętrzne 1MHz<br /><br />    ' ===========WŁĄCZNIK ON/OFF===============<br /><br />     Config Portd.0 = Input : Portd.0 = 1 : S Alias Pind.0       ' konfiguracja przycisku on/off<br />     Config Portc.0 = Output : Portc.0 = 1 : Led Alias Portc.0       ' konfiguracja led (zgaszona)<br /><br />   Dim Flaga As Bit      ' zmienna pomocnicza<br />   Flaga = 1             ' stan spoczynkowy zmiennej pomocniczej 1<br /><br /><br />Do                       ' główna pętla<br /><br />If S = 0 Then            ' jeśli przycisk jest zwarty<br />Waitms 900               ' odczekaj 900ms<br />If S = 0 Then            ' sprawdź ponownie czy jest zwarty<br />If Flaga = 1 Then        ' i czy zmienna pomocnicza ustawiona na 1<br />Toggle Led               ' to zmień stan led i zaświeć ją<br />Flaga = 0                ' i zablokuj możliwość zmiany<br />End If<br />End If<br />Else                     ' jeżeli przycisk nie jest zwarty<br />Flaga = 1                ' to umożliw zmiany<br />End If<br /><br />Loop<br />End                      ' koniec głównej pętli[/syntax]<br /><br />Chciałbym to zrobić teraz bez użycia waitms, ale za to z użyciem timera0 do odmierzenia czasu, ale coś mi nie wychodzi i nie odmierza czasu. Po naciśnięciu przycisku program miałby przeskoczyć do procedury odmierzającej czas, np. 3s, powrócić do pętli głównej, sprawdzić czy nadal przycisk wciśnięty i zaświecić led. To samo na odwrót.<br /><br />[syntax=basic4gl]$regfile = &quot;m8adef.dat&quot;<br /><br />    $crystal = 1000000   ' taktowanie wewnętrzne 1MHz<br /><br />    ' ===========WŁĄCZNIK ON/OFF===============<br /><br />  Config Portd.0 = Input : Portd.0 = 1 : S Alias Pind.0       ' konfiguracja przycisku on/off<br />     Config Portc.0 = Output : Portc.0 = 1 : Led Alias Portc.0       ' konfiguracja led (zgaszona)<br /><br />  ' Konfiguracja Timera<br />  Config Timer0 = Timer , Prescale = 256<br /><br />       Enable Interrupts ' odblokowanie globalnego systemu przerwań<br />       Enable Timer0     ' odblokowanie przerwania od przepełnienia timer0<br />       Load Timer0 = 250 ' wartość początkowa timera = 250<br /><br /><br />         On Timer0 Odmierz_3s       ' przerwanie od przepełnienia etykieta Odmierz_3s<br />       Dim Licz As Byte  ' zmienna pomocnicza do odlczania czasu<br /><br />      Dim Flaga As Bit      ' zmienna pomocnicza<br />   Flaga = 1             ' stan spoczynkowy zmiennej pomocniczej 1<br /><br /><br />   Do                       ' główna pętla<br /><br />   If S = 0 Then Gosub Odmierz_3s       ' jeśłi przycisk zwaty to idź odmierz 3 sekundy i wróć<br />   If S = 0 Then         ' sprawdź czy nadal zwarty<br />   If Flaga = 1 Then     'i czy zmienna pomocnicza ustawiona na 1<br />   Toggle Led               ' to zmień stan led i zaświeć ją<br />Flaga = 0                ' i zablokuj możliwość zmiany<br />End If<br /><br />Else                     ' jeżeli przycisk nie jest zwarty<br />Flaga = 1                ' to umożliw zmiany<br />End If<br /><br />   Loop<br />   End<br /><br />        Odmierz_3s:      ' odmierzenie czasu 3 sekundy<br />       Load Timer0 = 250<br />       Incr Licz<br />       If Licz = 125 Then<br />       Licz = 0<br /><br />       End If<br />       Return[/syntax]<br /><br />Pomożecie mi to jakoś poprawić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2765">michał6201</a> — 24 paź 2014, o 23:36</p><hr />
]]></content>
</entry>
</feed>