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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-15T20:33:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7438&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-15T20:33:17+01:00</updated>
<published>2014-06-15T20:33:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84615#p84615</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84615#p84615"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84615#p84615"><![CDATA[
<div class="quotetitle">xpower napisał(a):</div><div class="quotecontent"><br />i myślę, że Mirek nie miał jej na myśli <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Dokładnie ... na pierwszym filmiku widać że zanim zaczniesz klikać klawiszami to ta dioda z lewej sobie sama miga <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=54">mirekk36</a> — 15 cze 2014, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DC2002]]></name></author>
<updated>2014-06-15T20:24:28+01:00</updated>
<published>2014-06-15T20:24:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84610#p84610</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84610#p84610"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84610#p84610"><![CDATA[
Już kilka postów wyżej pytałem: &quot; Czy odpowiedni pin portu B jest podciągnięty do 5V&quot;, mam tu na myśli pomiar miernikiem!? Drugi testy czy przyciskając przycisk ściągamy go do masy? <br />Kolejny prosty test, za pomocą IF (przyciśnięto przycisk) zapal led, sprawdzam sprzęt <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Wszystko będzie jasne...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=286">DC2002</a> — 15 cze 2014, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpower]]></name></author>
<updated>2014-06-15T19:48:47+01:00</updated>
<published>2014-06-15T19:48:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84598#p84598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84598#p84598"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84598#p84598"><![CDATA[
@majster ale o co Ci chodzi ? :P<br /><br />Dioda kontrolna działa dobrze, tak jak ma działać i myślę, że Mirek nie miał jej na myśli ;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=607">xpower</a> — 15 cze 2014, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-06-15T18:44:17+01:00</updated>
<published>2014-06-15T18:44:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84590#p84590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84590#p84590"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84590#p84590"><![CDATA[
<div class="quotetitle">xpower napisał(a):</div><div class="quotecontent"><br />Dioda led podpięta pod PD1 zastosowana została jako kontrolka działania programu w mikrokontrolerze (czy czasem uC gdzieś nie zabłądzi  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> ) i nie ma nic wspólnego z UARTem, którego obsługi w tym kodzie nie ma. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />no ale dokładnie przez o że została kontrolką to sobie mryga ? ot tak ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 15 cze 2014, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpower]]></name></author>
<updated>2014-06-15T18:33:23+01:00</updated>
<published>2014-06-15T18:33:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84588#p84588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84588#p84588"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84588#p84588"><![CDATA[
Dioda led podpięta pod PD1 zastosowana została jako kontrolka działania programu w mikrokontrolerze (czy czasem uC gdzieś nie zabłądzi  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> ) i nie ma nic wspólnego z UARTem, którego obsługi w tym kodzie nie ma. <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=607">xpower</a> — 15 cze 2014, o 18:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-06-15T17:29:56+01:00</updated>
<published>2014-06-15T17:29:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84579#p84579</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84579#p84579"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84579#p84579"><![CDATA[
Mirku ale to że led sam mruga to przyczyna jest znana <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zobacz na film kolega  ostatniego leda podpiął pod PD0 i może w kodzie ma UARTA i dlatego sama mruga ? <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=1628">majster</a> — 15 cze 2014, o 17:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-15T13:49:46+01:00</updated>
<published>2014-06-15T13:49:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84537#p84537</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84537#p84537"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84537#p84537"><![CDATA[
<div class="quotetitle">xpower napisał(a):</div><div class="quotecontent"><br />teoretycznie eliminuję błędy w programie i podejrzenie uwalonego portu a dioda, która powinna być wygaszona, zaświeca się...<br /></div><br /><br />No tak - ale już w tym momencie właśnie odpuszczam sobie inne testy i koncentruję się tylko na jak najprostszym sprawdzeniu pinu ... o to mi chodziło <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=54">mirekk36</a> — 15 cze 2014, o 13:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpower]]></name></author>
<updated>2014-06-15T13:00:11+01:00</updated>
<published>2014-06-15T13:00:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84528#p84528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84528#p84528"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84528#p84528"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Wiesz czego ja NAJBARDZIEJ nie rozumiem ?<br />dioda LED sama ci miga ....<br />a ty z UPOREM godnym podziwu - dokonujesz jakichś przepastnych dalszych prób z klawiszami, superdebounce, ba! z wieloma klawiszami naraz z timerami programowymi, konfigurowaniem przerwań .... matko jedyna - panie kolego ... halo halo<br /></div><br /><br />Mirku to nie jest pierwszy raz kiedy rozwiązuję jakiś tego typu problem, albo debuguję kod.<br />Te &quot;dalsze próby&quot; jak to nazwałeś wniknęły z podmiany kodu SuperDebounce... w ostatnim przypadku już zgłupiałem czy to od kodu czy od części sprzętowej. <br />Skoro podmieniam debounce, zmieniam port czyli teoretycznie eliminuję błędy w programie i podejrzenie uwalonego portu a dioda, która powinna być wygaszona, zaświeca się...  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><br /><div class="quotetitle">majster napisał(a):</div><div class="quotecontent"><br />Jtag wylaczony?<br /></div><br />Tak.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=607">xpower</a> — 15 cze 2014, o 13:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-06-15T12:35:11+01:00</updated>
<published>2014-06-15T12:35:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84525#p84525</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84525#p84525"/>
<title type="html"><![CDATA[Re: Odp: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84525#p84525"><![CDATA[
Jtag wylaczony?<br /><br />Wysłane z telefonu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 15 cze 2014, o 12:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-15T12:30:46+01:00</updated>
<published>2014-06-15T12:30:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84523#p84523</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84523#p84523"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84523#p84523"><![CDATA[
Wiesz czego ja NAJBARDZIEJ nie rozumiem ?<br /><br />w pierwszym przypadku - ten pierwszy filmik gdzie masz podpięte pod PORTB<br /><br />dioda LED sama ci miga ....<br /><br />a ty z UPOREM godnym podziwu - dokonujesz jakichś przepastnych dalszych prób z klawiszami, superdebounce, ba! z wieloma klawiszami naraz z timerami programowymi, konfigurowaniem przerwań .... matko jedyna - panie kolego ... halo halo<br /><br />jakby mi się coś takiego zdarzyło to powiem ci co ja bym zrobił - a ty przemyśl sobie na przyszłość jak warto podchodzić do problemów właśnie w ten sposób ... bo inaczej będziesz tracił nie tylko dni ale miesiące nad rozwiązaniem takich problemów - hmmmm błahych problemów. Jak zawsze mówię - trzeba sobie zawsze dzielić problem na DWA etapy i połówkami eliminować - a nie siedzieć z tym samym kodem albo go przekonfigurowywać i po chwili mieć wszystkiego dosyć<br /><br /><br />1. pomyślałbym sobie .... OOOO! dioda LED sama miga - a przecież w programie tego nie robię<br /><br />2. muszę więc sobie odpowiedzieć na DWA PODSTAWOWE PYTANIA.<br /><br />  a.) czy to problem sprzętowy (obojętnie co to dalej miałoby znaczyć)<br />  b.) czy to problem programowy<br /><br />/* czyli już mam pierwszy podział problemu na DWA - rozumiesz? */<br /><br />3. wybór sprawdzania pierwszej połówki czy drugiej jest dowolny - ok sprawdźmy najpierw czy to problem programowy<br /><br />4. odpalę to samo na innych całkiem pinach najlepiej na innym porcie<br /><br />5. DZIAŁA NA INNYM porcie i pinach .... więc WYWALAM z głowy myślenie że coś z programem nie tak - po co dalej tym sobie głowę zawracać .... od razu mam PODPOWIEDŹ .... problem leży po stronie sprzętowej<br /><br /><br />6. No dobra - skoro po stronie sprzętowej to znowu trzeba go podzielić na DWA !!! jak ? prosto ....<br /><br />  a.) albo to coś z prockiem<br />  b.) albo to coś z połączeniami<br /><br />/* zgodzisz się ? */<br /><br /><br />7. no to sobie patrzę i myślę ... hmmm łatwiej będzie sprawdzić najpierw połączenia - czyli np wyjmuję procka, odpinam wszystko od pinów PORTB i sprawdzam piszczykiem czy nie są np zwarte przez przypadek co czegoś innego - innego sygnału - no cokolwiek .... powinny być nie podłączone do niczego .... po sprawdzeniu - JUŻ MAM PROBLEM Z GŁOWY tzn tą jedną połówkę<br /><br />8. no to teraz czy to wina procka ? ..... hmmm jak to sprawdzić ? i znowu dzielę problem na DWA !!!<br /><br />  a.) albo mam inny procek pod ręką to wymieniam i sprawdzam - jak działa to już doszedłem do prawdy<br />  b.) jeśli nie mam innego procka to jeszcze nie tragedia - mogę przecież każdy PIN z osobna sprawdzić programowo ale nie na żadnym tam takim moim rozbudowanym programie bo bym KOTA DOSTAŁ ... więc piszę prosty projekt TEST w eclipse i ustawiam po kolei każdy pin na WYJŚCIE i włączam miganie diodą LED co 1 sekundę - sprawdzam czy działa .... Jeśli któryś nie działa - no to też już jesteśmy w domu - pomimo że to smutna wiadomość że pin jest uwalony<br /><br />  jeśli KAŻDY PIN działa i dioda MIGA - hmm dziwne - bo w moim programie jest inaczej ... no to jeszcze sprawdzę jak pin reaguje jako WEJŚCIE np na klawisz i też byle prostym testem sprawdzam - jeden klawisz i jedna dioda bez żadnego superdebounce<br /><br />hmmm jeśli nie działa ? to też po tym wszystkim mogę podejrzewać procka<br /><br />no ale co zrobić gdy KAŻDY PIN z OSOBNA działa jako WE i jako WY a w moim programie nie działa to TYLKO NA PORTB ?<br /><br />no to też już mam podpowiedź ..... kurza melodia - to nie jest więc związane z obsługą klawiszy bo na innych portach działa - tylko być może gdzieś zostawiam jakiś czeski błąd i migam wciąż diodą na jakimś PINB ale chyba dalej dość to już pownien być pryszcz co ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 cze 2014, o 12:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpower]]></name></author>
<updated>2014-06-15T09:52:46+01:00</updated>
<published>2014-06-15T09:52:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84510#p84510</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84510#p84510"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84510#p84510"><![CDATA[
Dokładnie tak Mirku.<br /><br />Zaraz będę to testował z SuperDebounce z lekcji 17.<br /><br />No to tak od początku, wraz z materiałem dowodowym.  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong>Przyciski podpięte pod PORT B PB0-PB3<br />SuperDebounce z lekcji 19</strong><br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED_DDRDDRB<br />#define LED_PORTPORTB<br /><br />#define LED1(1&lt;&lt;PB4)<br />#define LED2(1&lt;&lt;PB5)<br />#define LED3(1&lt;&lt;PB6)<br />#define LED4(1&lt;&lt;PB7)<br /><br />#define KONTROL_DDRDDRD<br />#define KONTROL_PORTPORTD<br />#define KONTROL_LED(1&lt;&lt;PD1)<br /><br />//KONFIGURACJA PRZYCISKÓW<br />//zmieniam tu jedynie port z B na A<br />#define KEY_DDRDDRB<br />#define KEY_PORTPORTB<br />#define KEY_PINPINB<br /><br />#define KEY1(1&lt;&lt;PB0)<br />#define KEY2(1&lt;&lt;PB1)<br />#define KEY3(1&lt;&lt;PB2)<br />#define KEY4(1&lt;&lt;PB3)<br /><br />volatile uint16_t Timer1, Timer2;<br />void SuperDebounce(volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) );<br /><br /><br />void klawisz1(void);<br />void klawisz2(void);<br />void klawisz3(void);<br />void klawisz4(void);<br /><br />int main()<br />{<br />LED_DDR |= (LED1 | LED2 | LED3 | LED4);//kierunek LED przyciskow wyjsciowy<br />LED_PORT |= (LED1 | LED2 | LED3 | LED4);//podciagniecie do Vcc - wylaczenie LED przyciskow<br /><br />KONTROL_DDR |= KONTROL_LED;//kierunek kontrolki LED wyjsciowy<br />KONTROL_PORT |= KONTROL_LED;//podciagnięcie do vcc<br /><br />KEY_DDR &amp;= ~(KEY1 | KEY2 | KEY3 | KEY4);//kierunek klawiszy wejsciowy<br />KEY_PORT |= (KEY1 | KEY2 | KEY3 | KEY4);//podciagniecie do Vcc<br /><br />TCCR0 |= (1&lt;&lt;WGM01);            // tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);      // preskaler = 1024<br />OCR0 = 156;                     // dodatkowy podział przez 156 (rej. przepełnienia)16 000 000 / 1024 / 100Hz = 156,25<br />TIMSK |= (1&lt;&lt;OCIE0);            // zezwolenie na przerwanie CompareMatch<br /><br /><br />sei();<br />while(1)<br />{<br />SuperDebounce(&amp;KEY_PIN, KEY1, 20,100, klawisz1,klawisz1);<br />SuperDebounce(&amp;KEY_PIN, KEY2, 20,100, klawisz2,klawisz2);<br />SuperDebounce(&amp;KEY_PIN, KEY3, 20,100, klawisz3,klawisz3);<br />SuperDebounce(&amp;KEY_PIN, KEY4, 20,100, klawisz4,klawisz4);<br /><br />if(!Timer2)<br />{<br />KONTROL_PORT ^= KONTROL_LED;//kontrolka<br /><br />Timer2 = 5;<br />}<br /><br />}<br />}<br /><br />ISR( TIMER0_COMP_vect )<br />{<br />uint16_t i;<br /><br />i = Timer1;<br />if (i) Timer1 = --i;<br /><br />i = Timer2;<br />if (i) Timer2 = --i;<br /><br />}<br /><br />void klawisz1(void)<br />{<br />LED_PORT ^= LED1;<br />}<br /><br />void klawisz2(void)<br />{<br />LED_PORT ^= LED2;<br />}<br /><br />void klawisz3(void)<br />{<br />LED_PORT ^= LED3;<br />}<br /><br />void klawisz4(void)<br />{<br />LED_PORT ^= LED4;<br />}<br /><br />void SuperDebounce(volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) )<br />{<br />     //SUPERDEBOUNCE Z LEKCJI 19<br /><br />}[/syntax]<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br /><strong>Przyciski podpięte pod PORT A PA0-PA3<br />SuperDebounce z lekcji 19</strong><br /><br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED_DDRDDRB<br />#define LED_PORTPORTB<br /><br />#define LED1(1&lt;&lt;PB4)<br />#define LED2(1&lt;&lt;PB5)<br />#define LED3(1&lt;&lt;PB6)<br />#define LED4(1&lt;&lt;PB7)<br /><br />#define KONTROL_DDRDDRD<br />#define KONTROL_PORTPORTD<br />#define KONTROL_LED(1&lt;&lt;PD1)<br /><br /><br />//zmieniam tu jedynie port z B na A<br />#define KEY_DDRDDRA<br />#define KEY_PORTPORTA<br />#define KEY_PINPINA<br /><br />#define KEY1(1&lt;&lt;PA0)<br />#define KEY2(1&lt;&lt;PA1)<br />#define KEY3(1&lt;&lt;PA2)<br />#define KEY4(1&lt;&lt;PA3)<br /><br />volatile uint16_t Timer1, Timer2;<br />void SuperDebounce(volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) );<br /><br /><br />void klawisz1(void);<br />void klawisz2(void);<br />void klawisz3(void);<br />void klawisz4(void);<br /><br />int main()<br />{<br />LED_DDR |= (LED1 | LED2 | LED3 | LED4);//kierunek LED przyciskow wyjsciowy<br />LED_PORT |= (LED1 | LED2 | LED3 | LED4);//podciagniecie do Vcc - wylaczenie LED przyciskow<br /><br />KONTROL_DDR |= KONTROL_LED;//kierunek kontrolki LED wyjsciowy<br />KONTROL_PORT |= KONTROL_LED;//podciagnięcie do vcc<br /><br />KEY_DDR &amp;= ~(KEY1 | KEY2 | KEY3 | KEY4);//kierunek klawiszy wejsciowy<br />KEY_PORT |= (KEY1 | KEY2 | KEY3 | KEY4);//podciagniecie do Vcc<br /><br />TCCR0 |= (1&lt;&lt;WGM01);            // tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);      // preskaler = 1024<br />OCR0 = 156;                     // dodatkowy podział przez 156 (rej. przepełnienia)16 000 000 / 1024 / 100Hz = 156,25<br />TIMSK |= (1&lt;&lt;OCIE0);            // zezwolenie na przerwanie CompareMatch<br /><br /><br />sei();<br />while(1)<br />{<br />SuperDebounce(&amp;KEY_PIN, KEY1, 20,100, klawisz1,klawisz1);<br />SuperDebounce(&amp;KEY_PIN, KEY2, 20,100, klawisz2,klawisz2);<br />SuperDebounce(&amp;KEY_PIN, KEY3, 20,100, klawisz3,klawisz3);<br />SuperDebounce(&amp;KEY_PIN, KEY4, 20,100, klawisz4,klawisz4);<br /><br />if(!Timer2)<br />{<br />KONTROL_PORT ^= KONTROL_LED;//kontrolka<br /><br />Timer2 = 5;<br />}<br /><br />}<br />}<br /><br />ISR( TIMER0_COMP_vect )<br />{<br />uint16_t i;<br /><br />i = Timer1;<br />if (i) Timer1 = --i;<br /><br />i = Timer2;<br />if (i) Timer2 = --i;<br /><br />}<br /><br />void klawisz1(void)<br />{<br />LED_PORT ^= LED1;<br />}<br /><br />void klawisz2(void)<br />{<br />LED_PORT ^= LED2;<br />}<br /><br />void klawisz3(void)<br />{<br />LED_PORT ^= LED3;<br />}<br /><br />void klawisz4(void)<br />{<br />LED_PORT ^= LED4;<br />}<br /><br />void SuperDebounce(volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) )<br />{<br />         //SUPERDEBOUNCE Z LEKCJI 19<br />}[/syntax]<br /><br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><strong>Przyciski podpięte pod PORT B PB0-PB3<br />SuperDebounce z lekcji 17</strong><br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED_DDRDDRB<br />#define LED_PORTPORTB<br /><br />#define LED1(1&lt;&lt;PB4)<br />#define LED2(1&lt;&lt;PB5)<br />#define LED3(1&lt;&lt;PB6)<br />#define LED4(1&lt;&lt;PB7)<br /><br />#define KONTROL_DDRDDRD<br />#define KONTROL_PORTPORTD<br />#define KONTROL_LED(1&lt;&lt;PD1)<br /><br /><br />//zmieniam tu jedynie port z B na A<br />#define KEY_DDRDDRB<br />#define KEY_PORTPORTB<br />#define KEY_PINPINB<br /><br />#define KEY1(1&lt;&lt;PB0)<br />#define KEY2(1&lt;&lt;PB1)<br />#define KEY3(1&lt;&lt;PB2)<br />#define KEY4(1&lt;&lt;PB3)<br /><br />volatile uint16_t Timer1, Timer2;<br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************/<br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) );<br /><br /><br />void klawisz1(void);<br />void klawisz2(void);<br />void klawisz3(void);<br />void klawisz4(void);<br /><br />int main()<br />{<br />LED_DDR |= (LED1 | LED2 | LED3 | LED4);//kierunek LED przyciskow wyjsciowy<br />LED_PORT |= (LED1 | LED2 | LED3 | LED4);//podciagniecie do Vcc - wylaczenie LED przyciskow<br /><br />KONTROL_DDR |= KONTROL_LED;//kierunek kontrolki LED wyjsciowy<br />KONTROL_PORT |= KONTROL_LED;//podciagnięcie do vcc<br /><br />KEY_DDR &amp;= ~(KEY1 | KEY2 | KEY3 | KEY4);//kierunek klawiszy wejsciowy<br />KEY_PORT |= (KEY1 | KEY2 | KEY3 | KEY4);//podciagniecie do Vcc<br /><br />TCCR0 |= (1&lt;&lt;WGM01);            // tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);      // preskaler = 1024<br />OCR0 = 156;                     // dodatkowy podział przez 156 (rej. przepełnienia)16 000 000 / 1024 / 100Hz = 156,25<br />TIMSK |= (1&lt;&lt;OCIE0);            // zezwolenie na przerwanie CompareMatch<br /><br /><br />sei();<br />while(1)<br />{<br />uint8_t k1, k2, k3, k4;<br /><br />SuperDebounce(&amp;k1, &amp;KEY_PIN, KEY1, 20,100, klawisz1,klawisz1);<br />SuperDebounce(&amp;k2, &amp;KEY_PIN, KEY2, 20,100, klawisz2,klawisz2);<br />SuperDebounce(&amp;k3, &amp;KEY_PIN, KEY3, 20,100, klawisz3,klawisz3);<br />SuperDebounce(&amp;k4, &amp;KEY_PIN, KEY4, 20,100, klawisz4,klawisz4);<br /><br />if(!Timer2)<br />{<br />KONTROL_PORT ^= KONTROL_LED;//kontrolka<br /><br />Timer2 = 5;<br />}<br /><br />}<br />}<br /><br />ISR( TIMER0_COMP_vect )<br />{<br />uint16_t i;<br /><br />i = Timer1;<br />if (i) Timer1 = --i;<br /><br />i = Timer2;<br />if (i) Timer2 = --i;<br /><br />}<br /><br />void klawisz1(void)<br />{<br />LED_PORT ^= LED1;<br />}<br /><br />void klawisz2(void)<br />{<br />LED_PORT ^= LED2;<br />}<br /><br />void klawisz3(void)<br />{<br />LED_PORT ^= LED3;<br />}<br /><br />void klawisz4(void)<br />{<br />LED_PORT ^= LED4;<br />}<br /><br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) ) <br />{<br />   //SUPERDEBOUNCE Z LEKCJI 17<br />}[/syntax]<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><strong>Przyciski podpięte pod PORT A PA0-PA3<br />SuperDebounce z lekcji 17</strong><br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED_DDRDDRB<br />#define LED_PORTPORTB<br /><br />#define LED1(1&lt;&lt;PB4)<br />#define LED2(1&lt;&lt;PB5)<br />#define LED3(1&lt;&lt;PB6)<br />#define LED4(1&lt;&lt;PB7)<br /><br />#define KONTROL_DDRDDRD<br />#define KONTROL_PORTPORTD<br />#define KONTROL_LED(1&lt;&lt;PD1)<br /><br /><br />//zmieniam tu jedynie port z B na A<br />#define KEY_DDRDDRA<br />#define KEY_PORTPORTA<br />#define KEY_PINPINA<br /><br />#define KEY1(1&lt;&lt;PA0)<br />#define KEY2(1&lt;&lt;PA1)<br />#define KEY3(1&lt;&lt;PA2)<br />#define KEY4(1&lt;&lt;PA3)<br /><br />volatile uint16_t Timer1, Timer2;<br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************/<br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) );<br /><br /><br />void klawisz1(void);<br />void klawisz2(void);<br />void klawisz3(void);<br />void klawisz4(void);<br /><br />int main()<br />{<br />LED_DDR |= (LED1 | LED2 | LED3 | LED4);//kierunek LED przyciskow wyjsciowy<br />LED_PORT |= (LED1 | LED2 | LED3 | LED4);//podciagniecie do Vcc - wylaczenie LED przyciskow<br /><br />KONTROL_DDR |= KONTROL_LED;//kierunek kontrolki LED wyjsciowy<br />KONTROL_PORT |= KONTROL_LED;//podciagnięcie do vcc<br /><br />KEY_DDR &amp;= ~(KEY1 | KEY2 | KEY3 | KEY4);//kierunek klawiszy wejsciowy<br />KEY_PORT |= (KEY1 | KEY2 | KEY3 | KEY4);//podciagniecie do Vcc<br /><br />TCCR0 |= (1&lt;&lt;WGM01);            // tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);      // preskaler = 1024<br />OCR0 = 156;                     // dodatkowy podział przez 156 (rej. przepełnienia)16 000 000 / 1024 / 100Hz = 156,25<br />TIMSK |= (1&lt;&lt;OCIE0);            // zezwolenie na przerwanie CompareMatch<br /><br /><br />sei();<br />while(1)<br />{<br />uint8_t k1, k2, k3, k4;<br /><br />SuperDebounce(&amp;k1, &amp;KEY_PIN, KEY1, 20,100, klawisz1,klawisz1);<br />SuperDebounce(&amp;k2, &amp;KEY_PIN, KEY2, 20,100, klawisz2,klawisz2);<br />SuperDebounce(&amp;k3, &amp;KEY_PIN, KEY3, 20,100, klawisz3,klawisz3);<br />SuperDebounce(&amp;k4, &amp;KEY_PIN, KEY4, 20,100, klawisz4,klawisz4);<br /><br />if(!Timer2)<br />{<br />KONTROL_PORT ^= KONTROL_LED;//kontrolka<br /><br />Timer2 = 5;<br />}<br /><br />}<br />}<br /><br />ISR( TIMER0_COMP_vect )<br />{<br />uint16_t i;<br /><br />i = Timer1;<br />if (i) Timer1 = --i;<br /><br />i = Timer2;<br />if (i) Timer2 = --i;<br /><br />}<br /><br />void klawisz1(void)<br />{<br />LED_PORT ^= LED1;<br />}<br /><br />void klawisz2(void)<br />{<br />LED_PORT ^= LED2;<br />}<br /><br />void klawisz3(void)<br />{<br />LED_PORT ^= LED3;<br />}<br /><br />void klawisz4(void)<br />{<br />LED_PORT ^= LED4;<br />}<br /><br />void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) ) <br />{<br />   //SUPERDEBOUNCE Z LEKCJI 17<br />}[/syntax]<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br />W przypadku kodu SuperDebounce z lekcji 17, którego żywcem skopiowałem, można zauważyć, że klawisze działają z opóźnieniem, a do tego niezależnie od portu klawiszy, zapala się dioda LED3.<br />Po zmianie fragmentu<br /><br />[syntax=c]if( key_press &amp;&amp; !*key_state ) {<br />*key_state = debounce;<br />Timer1 = 5; // tu było 15<br />}[/syntax]<br /><br />efekt jest taki, że <br />- klawisze reagują szybciej (o to chodziło)<br />- po starcie programu nie zapala się samoczynnie dioda LED3  <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> <br />- KEY2 na porcie B nadal nie działa<br /><br />Wszystko wskazuje na uwalony PB1 Atmegi, do którego podłączony jest klawisz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=607">xpower</a> — 15 cze 2014, o 09:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-15T07:25:52+01:00</updated>
<published>2014-06-15T07:25:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84504#p84504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84504#p84504"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84504#p84504"><![CDATA[
ok tzn ja nie do końca rozumiem problemu .... czy to oznacza że np na PORTA wszystko działa ci w porządku a na PORTB nie działają niektóre klawisze ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 cze 2014, o 07:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpower]]></name></author>
<updated>2014-06-14T23:51:00+01:00</updated>
<published>2014-06-14T23:51:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84500#p84500</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84500#p84500"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84500#p84500"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">xpower napisał(a):</div><div class="quotecontent">Zdecydowałem się założyć temat bo już sam nie wiem czy ja czegoś nie widzę w kodzie czy coś źle robię, czy po prostu &quot;coś&quot; jest nie tak<br /></div><br /><br />Masz nową wersję książki w twardej oprawie ? czy starszą tą w miękkiej ? - to ważne bo w starszej był jeszcze mały babolek w tej funkcji - i z tego co zamieściłeś to właśnie nagłówek z tym babolkiem używasz. Brakuje jeszcze jednego ważnego argumentu do funkcji .... zajrzyj w razie czego na stronkę:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/uaktualnienia-programow-do-dvd.html" >http://atnel.pl/uaktualnienia-programow-do-dvd.html</a><!-- m --><br /><br />tam jest link do pobrania poprawionej wersji tej funkcji</div><br /><br />Tak, mam starszą wersję książki w miękkiej oprawie (tą po poprawkach w druku).<br /><br />Podmieniłem kod SuperDebounce na ten z lekcji 17, zmodyfikowałem pętlę while<br /><br />[syntax=c]while(1)<br />{<br />uint8_t k1, k2, k3, k4;<br /><br />SuperDebounce(&amp;k1, &amp;KEY_PIN, KEY1, 10,100, klawisz1,klawisz1);<br />SuperDebounce(&amp;k2, &amp;KEY_PIN, KEY2, 10,100, klawisz2,klawisz2);<br />SuperDebounce(&amp;k3, &amp;KEY_PIN, KEY3, 10,100, klawisz3,klawisz3);<br />SuperDebounce(&amp;k4, &amp;KEY_PIN, KEY4, 10,100, klawisz4,klawisz4);<br /><br />if(!Timer2)<br />{<br />KONTROL_PORT ^= KONTROL_LED;//kontrolka<br /><br />Timer2 = 5;<br />}<br /><br />}<br />}[/syntax]<br /><br />Po załadowaniu zapala się LED3, brak reakcji na wciśnięcie KEY2. <br /><br />Z uwagi na godzinę zawieszam kombinacje z tym do rana bo skoro <strong>@kicajek</strong> sprawdzał to u siebie z podmienionym kodem debounce i działało tzn, że o czymś musiałem zapomnieć.<br />Nawiasem mówiąc byłem pewny działania kodu debounce z projektu wielozadaniowego bo stosowałem go już nie raz i wszystko było ok.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=607">xpower</a> — 14 cze 2014, o 23:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-06-14T22:56:18+01:00</updated>
<published>2014-06-14T22:56:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84497#p84497</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84497#p84497"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84497#p84497"><![CDATA[
.... testowałem &quot; full wypas&quot; - 4xLED + 1xLED + 4xKEY  <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=826">kicajek</a> — 14 cze 2014, o 22:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-14T22:52:16+01:00</updated>
<published>2014-06-14T22:52:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84496#p84496</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84496#p84496"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84496#p84496"><![CDATA[
Niestety może być problem przy kilku klawiszach - jak mówię brak jednego argumentu przekazywanego do tej funkcji ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 cze 2014, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-06-14T22:52:17+01:00</updated>
<published>2014-06-14T22:50:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84495#p84495</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84495#p84495"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84495#p84495"><![CDATA[
Witam<br />Sprawdziłem Twój projekt na moim zestawie ( Mega16, 16Mhz ....) wraz z:<br />[syntax=c]/* Parametry wejściowe - 6 :<br /> *  *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB<br /> *  key_mask - maska klawisza np: (1&lt;&lt;PB3)<br /> *  rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT<br /> *  rep_wait - czas oczekiwania do przejścia do trybu REPEAT<br /> *  push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku<br /> *  rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT<br /> **************************************************************************************/<br />void SuperDebounce(volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) ) {.....}[/syntax]<br /><br />i działa bez zarzutu.<br /><br /> edit... widzę, że jak się gramoliłem z kodem to kol.Mirek już był  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 14 cze 2014, o 22:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-14T22:46:24+01:00</updated>
<published>2014-06-14T22:46:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84493#p84493</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84493#p84493"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84493#p84493"><![CDATA[
<div class="quotetitle">xpower napisał(a):</div><div class="quotecontent"><br />Zdecydowałem się założyć temat bo już sam nie wiem czy ja czegoś nie widzę w kodzie czy coś źle robię, czy po prostu &quot;coś&quot; jest nie tak<br /></div><br /><br />Masz nową wersję książki w twardej oprawie ? czy starszą tą w miękkiej ? - to ważne bo w starszej był jeszcze mały babolek w tej funkcji - i z tego co zamieściłeś to właśnie nagłówek z tym babolkiem używasz. Brakuje jeszcze jednego ważnego argumentu do funkcji .... zajrzyj w razie czego na stronkę:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/uaktualnienia-programow-do-dvd.html" >http://atnel.pl/uaktualnienia-programow-do-dvd.html</a><!-- m --><br /><br />tam jest link do pobrania poprawionej wersji tej funkcji<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 cze 2014, o 22:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DC2002]]></name></author>
<updated>2014-06-14T21:03:57+01:00</updated>
<published>2014-06-14T21:03:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84482#p84482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84482#p84482"/>
<title type="html"><![CDATA[Re: Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84482#p84482"><![CDATA[
Może za późna pora ale w kodzie nic nie widzę. Nie znam płytki ATB, może coś jest podpięte pod pin KEY2? Sprawdź czy jest na nim stan wysoki, a przyciśnięcie przycisku ściąga go do 0. Nie widzę w kodzie abyś używał tego pinu do innych zastosowań. Czasem z rozpędu w większych projektach pin przycisku zamaskuje się w kodzie włączając PWM albo inną funkcję pinu. Tutaj tego nie widzę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=286">DC2002</a> — 14 cze 2014, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpower]]></name></author>
<updated>2014-06-14T19:03:29+01:00</updated>
<published>2014-06-14T19:03:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84448#p84448</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84448#p84448"/>
<title type="html"><![CDATA[Dziwny przypadek z SuperDebounce (?)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7438&amp;p=84448#p84448"><![CDATA[
Witam.<br /><br />Zdecydowałem się założyć temat bo już sam nie wiem czy ja czegoś nie widzę w kodzie czy coś źle robię, czy po prostu &quot;coś&quot; jest nie tak.<br /><br /><strong>Opis problemu:</strong><br />Problem powstał przy tworzeniu większego projektu, kiedy dla ułatwienia projektowania PCB, należało między innymi zmienić piny klawiszy z PA0 - PA3 na PB0 - PB3. Po zmianach w programie i wgraniu wsadu zaczęły się &quot;krzaki&quot; w postaci samo włączającego się menu, lataniu po nim, itd. Początkowo podejrzewałem błędy w płytce, zestawiłem więc identyczny układ połączeń na ATB. Efekt ten sam. Po zmianie <span style="text-decoration: underline">tylko</span> portu klawiszy na piny PA0-PA3 wszystko działa jak należy.<br /><br />Zestawiłem więc prosty układ złożony z klawiszy i diód, oraz napisałem program testujący.<br /><br /><strong>Zestaw testowy:</strong> ATB GLS 1.04<br /><strong>Mikrokontroler:</strong> atmega16A<br /><strong>Taktowanie:</strong> rezonator kwarcowy 16 MHz<br /><strong>Środowisko:</strong> eclipse Juno + Atmel Toolchain<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/607/d772e42e59e690355706c1d50795a3d9.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/607/d772e42e59e690355706c1d50795a3d9.png" alt="Obrazek" /></a><br /><br />Pominąłem na schemacie filtrację zasilania, ponieważ zapewnia to zestaw ATB.<br /><br /><strong>Kod testujący:</strong><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED_DDRDDRB<br />#define LED_PORTPORTB<br /><br />#define LED1(1&lt;&lt;PB4)<br />#define LED2(1&lt;&lt;PB5)<br />#define LED3(1&lt;&lt;PB6)<br />#define LED4(1&lt;&lt;PB7)<br /><br />#define KONTROL_DDRDDRD<br />#define KONTROL_PORTPORTD<br />#define KONTROL_LED(1&lt;&lt;PD1)<br /><br />#define KEY_DDRDDRB<br />#define KEY_PORTPORTB<br />#define KEY_PINPINB<br /><br />#define KEY1(1&lt;&lt;PB0)<br />#define KEY2(1&lt;&lt;PB1)<br />#define KEY3(1&lt;&lt;PB2)<br />#define KEY4(1&lt;&lt;PB3)<br /><br />volatile uint16_t Timer1, Timer2;<br />void SuperDebounce(volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) );<br /><br />void klawisz1(void);<br />void klawisz2(void);<br />void klawisz3(void);<br />void klawisz4(void);<br /><br />int main()<br />{<br />LED_DDR |= (LED1 | LED2 | LED3 | LED4);//kierunek LED przyciskow wyjsciowy<br />LED_PORT |= (LED1 | LED2 | LED3 | LED4);//podciagniecie do Vcc - wylaczenie LED przyciskow<br /><br />KONTROL_DDR |= KONTROL_LED;//kierunek kontrolki LED wyjsciowy<br />KONTROL_PORT |= KONTROL_LED;//podciagnięcie do vcc<br /><br />KEY_DDR &amp;= ~(KEY1 | KEY2 | KEY3 | KEY4);//kierunek klawiszy wejsciowy<br />KEY_PORT |= (KEY1 | KEY2 | KEY3 | KEY4);//podciagniecie do Vcc<br /><br />TCCR0 |= (1&lt;&lt;WGM01);            // tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);      // preskaler = 1024<br />OCR0 = 156;                     // dodatkowy podział przez 156 (rej. przepełnienia)16 000 000 / 1024 / 100Hz = 156,25<br />TIMSK |= (1&lt;&lt;OCIE0);            // zezwolenie na przerwanie CompareMatch<br /><br />sei();<br />while(1)<br />{<br />SuperDebounce(&amp;KEY_PIN, KEY1, 20,100, klawisz1,klawisz1);<br />SuperDebounce(&amp;KEY_PIN, KEY2, 20,100, klawisz2,klawisz2);<br />SuperDebounce(&amp;KEY_PIN, KEY3, 20,100, klawisz3,klawisz3);<br />SuperDebounce(&amp;KEY_PIN, KEY4, 20,100, klawisz4,klawisz4);<br /><br />if(!Timer2)<br />{<br />KONTROL_PORT ^= KONTROL_LED;//kontrolka<br /><br />Timer2 = 5;<br />}<br /><br />}<br />}<br /><br />ISR( TIMER0_COMP_vect )<br />{<br />uint16_t i;<br /><br />i = Timer1;<br />if (i) Timer1 = --i;<br /><br />i = Timer2;<br />if (i) Timer2 = --i;<br /><br />}<br /><br />void klawisz1(void)<br />{<br />LED_PORT ^= LED1;<br />}<br /><br />void klawisz2(void)<br />{<br />LED_PORT ^= LED2;<br />}<br /><br />void klawisz3(void)<br />{<br />LED_PORT ^= LED3;<br />}<br /><br />void klawisz4(void)<br />{<br />LED_PORT ^= LED4;<br />}<br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************<br /> * AUTOR: Mirosław Kardaś<br /> * ZALETY:<br /> * - nie wprowadza najmniejszego spowalnienia<br /> * - posiada funkcję REPEAT (powtarzanie akcji dla dłużej wciśniętego przycisku)<br /> * - można przydzielić różne akcje dla trybu REPEAT i pojedynczego kliknięcia<br /> * - można przydzielić tylko jedną akcję wtedy w miejsce drugiej przekazujemy 0 (NULL)<br /> *<br /> * Wymagania:<br /> * Timer programowy utworzony w oparciu o Timer sprzętowy (przerwanie 100Hz)<br /> *<br /> * Parametry wejściowe:<br /> *  *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB<br /> *  key_mask - maska klawisza np: (1&lt;&lt;PB3)<br /> *  rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT<br /> *  rep_wait - czas oczekiwania do przejścia do trybu REPEAT<br /> *  push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku<br /> *  rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT<br /> **************************************************************************************/<br />void SuperDebounce(volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait, void (*push_proc)(void), void (*rep_proc)(void) )<br />{<br />                //KOD FUNKCJI SUPERDEBOUNCE Z LEKCJI 19 BB - PROJEKT WIELOZADANIOWY<br />}[/syntax]<br /><br />Efekt działania jest taki, że <br />- dioda kontrolna miga szybko (ok. 50 ms)<br />- miga również dioda LED2, wolniej niż dioda kontrolna<br />- nie ma reakcji na działanie klawiszy<br /><br />Po zakomentowaniu funkcji SuperDebounce odpowiadającej za obsługę klawisza KEY2, wszystko działa jak należy.<br />Po zmianie pinów na port A też wszystko działa jak należy.<br /><br />Tworzyłem nowy project w Eclipse, napisałem od nowa kod na innym komputerze, testowałem kod na 2 mikrokontrolerach. Efekty są takie same. <br /><br />Czy ktoś jest w stanie powiedzieć co to za czary albo gdzie popełniam jakiś błąd ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=607">xpower</a> — 14 cze 2014, o 19:03</p><hr />
]]></content>
</entry>
</feed>