Hallo,
Dmv enkele schakelaars zou ik via een interrupt (Zie vorig topic) een avr microcontoller willen bedienen. Nu vraag ik mij af hoe het zit met contactdender. Volgens mij veroorzaakt de contactdender dat tijdens het uitvoeren van de ISR, de interrupt flag hoog gezet wordt.
Nu dacht ik dit te verhelpen, door op het einde van de ISR een tijdspauze in te lassen, en daarna de flag te clearen. Weet iemand hoelang contactdender zo duurt, of bestaat er een andere oplossing?
Greets, Jerre
No_Brain
"What are we going to do tonight, Brain?". "Same thing we do every night, Pinky: try to take over the world!"
Kan, je kunt 't ook met een laagdoorlaatfiltertje doen.
Maar de meest standaard oplossing is een condensatortje vanaf de voeding met een weerstandje in serie naar de ground verbinden. Het schakelaartje zet je parallel over de condensator. De condensator zal er voor zorgen dat je microcontroller geen last heeft van denderen. De middenaftakking breng je naar je microcontroller.
De waardes van de weerstand en condensator kun je berekenen door de kantelfrequentie van een laagdoorlaatfilter te gebruiken.
Dit lijkt me inderdaad een elegante oplossing. Maar dan moet ik toch de frequentie van het denderen weten?
Of is dit misschien iets dat terug te vinden is in de datasheet van de schakelaar.
(Voor zover een schakelaar een datasheet heeft)
[Bericht gewijzigd door steenaap op ]
elektron_
beetje gek
Voor één schakelaar ok, maar als je een matrix zou gebruiken, wordt dit meestal niet hardware opgelost(denk ik)
Maar als je in de interrupt routine de schakelaar nog wil vinden, heb je misschien geen debounche circuit nodig,
maar een vertagings circuit om de schakelaar te vinden,
en dan moet je helemaal de dender-frequenie niet kennen !
[Bericht gewijzigd door elektron_ op ]
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Als het softwarematig is op te lossen scheelt dat weer componenten en blijft je printje mooi opgeruimd.
Ik geef als tijd altijd 10 mSec, maar dat is volgens mij al heel ruim, moet ook korter kunnen.
Wat ik doe in dit soort gevallen is de toets lezen, 750us wachten en dan nog eens lezen. Is de toets-'waarde' gelijk dan is deze geldig, anders nogmaals lezen.
Nooit valse triggers gehad (en ik gebruik het in muziekinstrumenten dus het is belangrijk om dit te voorkomen)
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
No_Brain
"What are we going to do tonight, Brain?". "Same thing we do every night, Pinky: try to take over the world!"
Mijn voorkeur gaat uit naar een hardware oplossing. Maar inderdaad, als je vele ingangen hebt kun je het beter met software doen om componenten te besparen.
Op 17 augustus 2004 17:16:37 schreef steenaap:
Dit lijkt me inderdaad een elegante oplossing. Maar dan moet ik toch de frequentie van het denderen weten?
Of is dit misschien iets dat terug te vinden is in de datasheet van de schakelaar.
(Voor zover een schakelaar een datasheet heeft)
Frequentie van 't denderen doet er niet echt toe. Neem een lekker lage kantelfrequentie van (bijvoorbeeld) 30 Hz.
Kantelfrequentie(in radialen/sec) = 1 / (RC)
1 Hz = 2 phi radilalen/sec
=>
kantelfreqentie (in Hz.) = 1 / (2*Phi*R*C)
Op 18 augustus 2004 22:41:24 schreef No_Brain:
Mijn voorkeur gaat uit naar een hardware oplossing. Maar inderdaad, als je vele ingangen hebt kun je het beter met software doen om componenten te besparen.
Als je het softwarematig wilt oplossen heb je niet meer ingangen nodig als bij een hardwarematige oplossing volgens mij
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
No_Brain bedoeld ook niet het aantal ingangen, maar dat er voor elke ingang componenten nodig zijn om te ontdenderen en bij veel ingangen worden dat veel componenten.
Op 21 augustus 2004 13:14:09 schreef Frits Kieftenbelt:
No_Brain bedoeld ook niet het aantal ingangen, maar dat er voor elke ingang componenten nodig zijn om te ontdenderen en bij veel ingangen worden dat veel componenten.
Ok dan klopt het wel had het verkeerd begrepen.
Zo doe ik het ook altijd, ook nooit fouten gehad en 10 mSec zou dus 1 mSec kunnen worden