Attiny85 en twee input knoppen

Hardware die niet past in bovenstaande onderwerpen
Berichten: 7
Geregistreerd: 01 Dec 2015, 14:11

Attiny85 en twee input knoppen

Berichtdoor Roelf » 01 Dec 2015, 14:28

Hoi,

Ik lees inmiddels alweer een tijdje mee op dit forum. Ben vorig jaar begonnen met mijn eerste Arduino starterkit. Het hele boekje met voorbeeld projecten doorgewerkt. Nu bezig met een tweetal projectjes. Eentje daarvan wil ik, ipv met een arduino, gaan uitvoeren met een Attiny85. Voor dit project moet er zo snel mogelijk gereageerd worden op een druk op een van twee knoppen. Herhaaldelijk indrukken moet ook herhaaldelijk verwerkt worden. Ik heb overwogen om door middel van interrupts te gaan reageren op de knoppen, zodat in de loop alleen de waarde van een variabele getoetst hoeft te worden, maar het debouncen van deze knoppen is dan een redelijk ingewikkeld proces (software) of relatief kostbaar en ook complicerend (hardware).

Nu heb ik op diverse sites rondgesnuffeld en tot de volgende mogelijke oplossing gekomen. Graag zou ik van de kenners hier horen of dit een werkbare oplossing is, of dat ik veel te moeilijk denk en met een softwaredebounce in de loop best weg kom. Maar goed, het voorstel:

definieer twee volatile variabelen van het type word, 16 bit dus, die corresponderen met de status van pin 5 en 6 van de chip

ga door middel van een timer interrupt met een voldoende hoge frequentie de volgende acties uitvoeren:
- lees de waarde van de port (Attiny85 heeft maar 1 port)
- haal de status van de bits betreffende pin 5 en 6
- shift de bestaande bits in de word variabele 1 plek naar links en voeg de nieuwe bit toe

in de loop kan ik dan vervolgens gaan kijken of de waarde van de variabelen 16 maal 1 of 16 maal 0 is voor de status van de knop. bouncen zal de reeks nullen of enen verstoren, als de knop "gesettled" is, zal de waarde continue 1 of 0 zijn.
Op basis van de huidige stand en de vorige stand van de knop kan ik dan bepalen of er actie moet worden ondernomen.

Is dit wat?

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Attiny85 en twee input knoppen

Berichtdoor nicoverduin » 01 Dec 2015, 15:56

Als je bedenkt dat de debounce hooguit 15ms (en dan gebruik je al aardige prut knoppen :) zou ik niet zo ingewikkeld doen.
Wat niet duidelijk is, is wat te doen als je nog bezig bent een knop te verwerken en hij wordt weer ingedrukt. Ga je dan opnieuw beginnen of is het zo kort dat het niet relevant is.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 7
Geregistreerd: 01 Dec 2015, 14:11

Re: Attiny85 en twee input knoppen

Berichtdoor Roelf » 01 Dec 2015, 16:14

Nico, ik heb wat testjes gedaan met de microswitches uit het starterpakket op een breadboard, en bij een softwarematige debounce kwam ik pas op goede resultaten als ik de delay ophoogde naar zo'n 200 ms. Ik maakte gebruik van interrupt (op opgaande flank) en bij herhaaldelijke input (door de bounce) werd deze nieuwe input in de interrupt routine afgewezen als ie te snel na de vorige kwam. Maar daarbij moest ik echt tot grote hoogte gaan om werkbare resultaten te krijgen.

Ik moet nog kijken hoe lang de verwerking duurt die start bij het indrukken van een knop, maar dat zou een goede maat kunnen zijn voor de maximum debouncetijd. Heb overigens nieuwe knoppen besteld die mogelijk beter werken. Ook neem ik aan dat als een en ander op een printplaat is gesoldeerd, ook de bouncetijd afneemt....

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Attiny85 en twee input knoppen

Berichtdoor shooter » 01 Dec 2015, 22:56

stel even je kunt 50 keer in een seconde op de knop drukken (dat gaat echt niemand lukken dan heb je al 20 ms)
de truuk is niet dat je steeds kijkt, maar als de opgaande flank er is, je gewoon 20 ms niet naar de knop kijkt.
of zoveel als je zelf wilt.
als de knop na 20 ms LOW is dan heb je nog niet lang genoeg gewacht, en anders zet je de interupt op neergaande flank om te detecterten wanneer je de knop los laat.

die debounce tijd kun je meten hoor door te kijken hoelang het duurt tot je geen interupts meer krijgt, dat verdubbel je dan om zeker te zijn.
ofwel je start een tijd, en als je een inerupt krijgt dan de tijd uitrekenen vanaf het begin, als je geen interupt meer krijgt dan zie je de laatste tijd.
paul deelen
shooter@home.nl

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten