Re: Obsluha vnějšího přerušení u PIC
Michal Gregor
a2x1nptda8 na email.cz
Pondělí Říjen 25 09:59:01 CEST 2010
Ja bych vůbec nedával tlacitko na vstup preruseni. Kontakt si dela co chce.
Mam to takto:
// Tlačítko
#define K_TLACITKO_CASOVANI_10MS 10
static volatile n_u01 Tlacitko_Vysledek;
static volatile n_u08 Tlacitko_Casovani_10mS = K_TLACITKO_CASOVANI_10MS;
static volatile Boolean Tlacitko_Je_Aktivace = FALSE;
// Spustit co 10mS
static void Vyhodnot_Tlacitko_10ms(void) {
if ( Tlacitko_Vysledek == Tlacitko_Vstup ) {
Tlacitko_Casovani_10ms = K_TLACITKO_CASOVANI_10MS;
}
else {
--Tlacitko_Casovani_10ms;
if ( 0 == Tlacitko_Casovani_10ms ) {
Tlacitko_Casovani_10ms = K_VS_CASOVANI_10MS;
Tlacitko_Vysledek = Tlacitko_Vysledek bitxor 1;
// Změna stavu
// Je to nový stisk?
if ( G_K_PRT_TLACITKO_STISKNUTO == Tlacitko_Vysledek ) {
Tlacitko_Je_Aktivace = TRUE;
}
}
}
}
Michal Gregor
----- Original Message -----
From: Kručinský Ladislav
To: HW-news
Sent: Monday, October 25, 2010 9:48 AM
Subject: RE: Obsluha vnějšího přerušení u PIC
Díky za RE, už jsem se rozloučil s tím, že se někdo ozve (asi to není dostatečně off topic ;-).
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.
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.
L. Kručinský
-----Original Message-----
From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Tomáš Hamouz
Sent: Monday, October 25, 2010 8:58 AM
To: HW-news
Subject: Re: Obsluha vnějšího přerušení u PIC
Myslím že jste si odpověděl sám.
Zákmity trvají řádově jednotky až desítky milisekund a s tím je nutno v programu počítat.
Ošetření tlačítek, psané přímo pro PIC:
http://www.dattalo.com/technical/software/pic/debounce.html
K ošetření 8 tlačítek stačí 12 instrukcí a 2 pracovní registry.
Tomáš
KL> Dobrého večera přeji.
KL> Při pátku bych poprosil nějakého rutinéra aby mi zkusil naznačit co dělám blbě.
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á.
KL> HW:
KL> do GPIO2 jsem zapojil mirkospínač k 0V a nakonfiguroval pullup.
KL> na GPIO0 je výstup pro LED přes odpor k +5.
KL> Ostatní vstupy nehrají roli.
KL> SW:
KL> Abych si (vyloženě z cvičných důvodů) ověřil že podprogram ISR
KL> funguje dobře, tak v obsluze invertuju registr temp1(ř.65) a tím pak
KL> přepisuju porty GPIO(ř.46) - LEDka by měla na každé kliknutí změnit stav.
KL> Na vstupu GPIO2 jsou od mikrospínače odskoky v délce asi 400 us.
KL> Tak jsem si řekl, dobrá - při prvním sepnutí se zakáže přerušení a
KL> povolí se až po zpoždění 2 ms. Jenže to nefunguje - na mikrospínač
KL> klofu jak zběsilý a občas to přepne.
KL> Když zpoždění zvýším na 200 ms (ř.68 - movlw 0) tak to vcelku pravidelně přepne po dvojkliku.
KL> Ale pokud ošetřím vstup kondenzátorem (odskoky podle osciloskopu
KL> zmizí) funguje to tak jak chci (na každé kliknutí se překlopí) i bez zpoždění.
KL> No jo, jenže já chci ty odskoky ošetřit programem a ne kondenzátorem.
KL> Mohl byste někdo, pro koho je tohle denní rutina říct, kde dělám
KL> chybu ? Případně se podělit o obsluhu přerušení od odskakujícího spínače po vašem ?
KL> Jelikož se programováním bavím občas po večerech a za týden vše
KL> zapomenu, je ten program až infantilně komentovaný - ale já to tak potřebuju...
KL> Díky za trpělivost...
KL> <<int.asm>>
KL> Kručinský
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20101025/cea1fb25/attachment.htm>
Další informace o konferenci Hw-list