Hei! Ongelmana olisi nyt keskeytykset. Mulla on erillinen 3x4 näppäimistö, jossa on numerot 0-9, tähti ja risuaita. Tarkoituksena olisi tehdä sevensegmentti näytöllinen ajastin, johon syötetään aika näppäimistön kautta. Tämän olen jo saanut toimimaan, mutta ongelmana on se, että näppäintä painaessa atmelin mega8 mikrokontrolleri saattaa saada keskeytyksen kaksi kertaa, jolloin se lukee näppäimen myös kahdesti.
Jos kenelläkään on kokemusta mikrokontrollien ohjelmoimisesta niin vastausta tulemaan. Olen yrittänyt ties mitä taukosysteemejä mutta ei ole auttanut.
Itsellä on kokemusta atmelin 2051:n ohjelmoinnista jonkin verran. Koulussa kahdella kurssilla ollaan joitain ohjelmia väsätty sekä assemblyllä että c:llä. Meillä taisi olla peräti yksi labratehtävä missä tuon tapainen ongelma piti ratkaista ja muistaakseni sain ratkaistua sen ihan vain pistämällä viiveen keskeytysaliohjelmaan, jotta kytkin-värinän aiheuttama tilojen vaihtelu saatiin kuriin.
Tosin tulee myös mieleen, että kun nappia painetaan aiheutuu kytkin-värinää ja toisaalta värinää voi aiheutua myös, kun nappi päästetään pohjasta, eli kannattaa varmaan lisätä jokin viive myös siihen kun napin tila vaihtuu takaisin nollaan. Luulisin, että noin se voisi vaikka toimia.
Itse ratkaisin ko. ongelman, kun ohjelmani oli aika-kriittinen ja mittasi samalla aikaa(Tosin PIC:llä), merkkaamalla painamishetken/painamisvapautuksen aikaleiman, ja hylkäämällä liian läheiset uudet painallukset. Painamisen voi olettaa kestävän kymmenesosasekuntteja, joten viiveellä toteutettuna on kyseessä pitkä aika, joten aikakriittisiin kannattaa ottaa aikaleima käyttöön.
Kokeilepa jotenki kytkeä keskeytykset, tai ainaki se keskeytys pois vähäks aikaa sen keskeytyksen tulon jälkeen, ettei se ota sitä uudestaan.
Tai sit laita napin rinnalle konkka ja siitä napilta ylös/alasvetovastus (joka toimii kans osana sitä sen konkan tekemää viivettä) jompaan kumpaan käyttöjännitteeseen (toiseen ku mihin se nappi menee) ja siihen napin ja mikrokontrollerin väliin joku schmitt trigger, jos haluat tehdä sen muuten kuin ohjelmallisesti. Toi tietenki monimutkastaa kytkentää, eli lienee helpompi vaan estää ne keskeytykset niin ettei oteta heti uudestaan, ja laittaa vaikka 0.2 sekunnin päästä takas.
Ammattilaiset taitavat yleensä poistaa kytkinvärähtelyt parilla ylimääräisellä logiikkapiirillä. Ylimääräiset viiveet rasittavat sovellusta monesti enemmän, kuin parin logiikkapiirin kauttakulkuviive. Esimerkki:
http://www.maxim-ic.com/appnotes.cfm/appnote_number/764
Oheisen dokumentin kuvan 2 a-tapaus taitaa olla yleisimmin käytetty hardisratkaisu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.