<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<META content="MSHTML 6.00.2900.6036" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Ja bych vůbec nedával tlacitko na vstup preruseni.
Kontakt si dela co chce.</FONT></DIV>
<DIV><FONT face=Arial size=2>Mam to takto:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>// Tlačítko<BR>#define K_TLACITKO_CASOVANI_10MS
10<BR>static volatile n_u01 Tlacitko_Vysledek;<BR>static volatile n_u08
Tlacitko_Casovani_10mS = K_TLACITKO_CASOVANI_10MS;<BR>static volatile Boolean
Tlacitko_Je_Aktivace = FALSE;<BR></FONT></DIV>
<DIV><FONT face=Arial size=2>// Spustit co 10mS</FONT></DIV>
<DIV><FONT face=Arial size=2>static void Vyhodnot_Tlacitko_10ms(void)
{</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> if ( Tlacitko_Vysledek == Tlacitko_Vstup )
{<BR> Tlacitko_Casovani_10ms =
K_TLACITKO_CASOVANI_10MS;<BR> }<BR> else
{<BR> --Tlacitko_Casovani_10ms;<BR> if ( 0 ==
Tlacitko_Casovani_10ms ) {</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>
Tlacitko_Casovani_10ms =
K_VS_CASOVANI_10MS;<BR>
Tlacitko_Vysledek = Tlacitko_Vysledek bitxor 1;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> //
Změna stavu<BR> // Je to nový
stisk?<BR> if ( G_K_PRT_TLACITKO_STISKNUTO == Tlacitko_Vysledek
) {<BR>
Tlacitko_Je_Aktivace = TRUE;<BR>
}<BR> }<BR> }<BR>}<BR></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Michal Gregor</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=ladislav.krucinsky@linde-mh.cz
href="mailto:ladislav.krucinsky@linde-mh.cz">Kručinský Ladislav</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=hw-list@list.hw.cz
href="mailto:hw-list@list.hw.cz">HW-news</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, October 25, 2010 9:48
AM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> RE: Obsluha vnějšího přerušení u
PIC</DIV>
<DIV><BR></DIV>Díky za RE, už jsem se rozloučil s tím, že se někdo ozve (asi
to není dostatečně off topic ;-).<BR>Ty zákmity (podle osciloskopu) trvají 400
mikrosekund, takže jsem 2 milisekundy pokládal za dostačující čas pro jejich
překlenutí. Ale asi tam mám něco blbě, budu ještě chvilku hloubat. <BR>Ale jak
už jsem uvedl, šlo mi o to naučit se obsloužit přerušení zvenku od
mechanického kontaktu aniž bych ho musel hardwarově ošetřovat.<BR><BR><BR>L.
Kručinský<BR><BR>-----Original Message-----<BR>From: <A
href="mailto:hw-list-bounces@list.hw.cz">hw-list-bounces@list.hw.cz</A>
[mailto:hw-list-bounces@list.hw.cz] On Behalf Of Tomáš Hamouz<BR>Sent: Monday,
October 25, 2010 8:58 AM<BR>To: HW-news<BR>Subject: Re: Obsluha vnějšího
přerušení u PIC<BR><BR>Myslím že jste si odpověděl sám.<BR>Zákmity trvají
řádově jednotky až desítky milisekund a s tím je nutno v programu
počítat.<BR><BR>Ošetření tlačítek, psané přímo pro PIC:<BR><A
href="http://www.dattalo.com/technical/software/pic/debounce.html">http://www.dattalo.com/technical/software/pic/debounce.html</A><BR>K
ošetření 8 tlačítek stačí 12 instrukcí a 2 pracovní
registry.<BR><BR>Tomáš<BR><BR><BR><BR>KL> Dobrého večera přeji.<BR>KL>
Při pátku bych poprosil nějakého rutinéra aby mi zkusil naznačit co dělám
blbě.<BR>KL> Chci si ověřit, že program pro obsluhu vnějšího přerušení dělá
to co chci já a zatím to nedopadá.<BR>KL> HW: <BR>KL> do GPIO2 jsem
zapojil mirkospínač k 0V a nakonfiguroval pullup.<BR>KL> na GPIO0 je výstup
pro LED přes odpor k +5.<BR>KL> Ostatní vstupy nehrají roli.<BR>KL>
SW:<BR>KL> Abych si (vyloženě z cvičných důvodů) ověřil že podprogram ISR
<BR>KL> funguje dobře, tak v obsluze invertuju registr temp1(ř.65) a tím
pak <BR>KL> přepisuju porty GPIO(ř.46) - LEDka by měla na každé kliknutí
změnit stav.<BR>KL> Na vstupu GPIO2 jsou od mikrospínače odskoky v délce
asi 400 us.<BR>KL> Tak jsem si řekl, dobrá - při prvním sepnutí se zakáže
přerušení a <BR>KL> povolí se až po zpoždění 2 ms. Jenže to nefunguje - na
mikrospínač <BR>KL> klofu jak zběsilý a občas to přepne.<BR>KL> Když
zpoždění zvýším na 200 ms (ř.68 - movlw 0) tak to vcelku pravidelně přepne po
dvojkliku.<BR>KL> Ale pokud ošetřím vstup kondenzátorem (odskoky podle
osciloskopu<BR>KL> zmizí) funguje to tak jak chci (na každé kliknutí se
překlopí) i bez zpoždění.<BR>KL> No jo, jenže já chci ty odskoky ošetřit
programem a ne kondenzátorem. <BR>KL> Mohl byste někdo, pro koho je tohle
denní rutina říct, kde dělám <BR>KL> chybu ? Případně se podělit o obsluhu
přerušení od odskakujícího spínače po vašem ?<BR>KL> Jelikož se
programováním bavím občas po večerech a za týden vše <BR>KL> zapomenu, je
ten program až infantilně komentovaný - ale já to tak potřebuju...<BR>KL>
Díky za trpělivost...<BR><BR>KL>
<<int.asm>><BR><BR>KL>
Kručinský<BR><BR><BR><BR>_______________________________________________<BR>HW-list
mailing list - sponsored by <A
href="http://www.HW.cz">www.HW.cz</A> <A
href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</A> <A
href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</A><BR>_______________________________________________<BR>HW-list
mailing list - sponsored by <A
href="http://www.HW.cz">www.HW.cz</A><BR><A
href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</A><BR><A
href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</A></BLOCKQUOTE></BODY></HTML>