Tartalomjegyzék:
Videó: Kapacitív érintés a PIC16F886 mikrokontrollerrel: 3 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Ebben az oktatóanyagban áttekintjük, hogyan használhatja a PIC16F886 mikrokontrollert a kapacitásbeli különbségek észlelésére, ez később arra szolgál, hogy megmondja, ha megnyomják az érintőpadot. Jó, ha ismerjük a pic mikrokontrollereket a projekt elkészítése előtt.
1. lépés: Csatlakoztassa az áramkört
Először is kezdjük az áramkör bekötésével a fenti vázlat szerint. Az érintőpárna elkészítéséhez négyzetre hajtogathatja az alumínium fóliát, és ragaszthatja a drótra. Kísérletezhet a 100k ellenállás különböző értékeivel, azt találtam, hogy a 100k jól működik nekem.
Az RC4 tüske a mérni kívánt kapacitás töltésének/kisütésének megkezdésére szolgál. A C12IN0 egy belső komparátor oldalához, a C1IN csap pedig ugyanazon összehasonlító + oldalához van csatlakoztatva. A mikrokontroller úgy látja, hogy a kapacitás teljesen fel van töltve, amikor a C12IN0 feszültség eléri a C1IN feszültséget. Az ellenállásos feszültségosztó gondoskodik arról, hogy a C1IN közel 5 volt legyen.
Mivel az érintőpad attól függ, hogy jelentős kapacitás van -e köztetek és az áramkör között, lehetséges, hogy az akkumulátor nem működik.
2. lépés: A fejlécfájl
Befejezte az összes csatlakozást? Jó, folytatjuk a fejlécfájlt. Az XC8 fordítót fogjuk használni, és amint a cím is sugallja, most létre kell hoznia egy új fejlécfájlt a projektben, és másolja be a következő kódot. Ugyanilyen jól másolhatja be a fő kód fölé fejlécfájl nélkül.
#define CALIBRATION_SAMPLE 20 #define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int gróf;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // mérni kívánt kisülési kapacitás RC4 = 0; _ késleltetés (DISCHARGE_TIME); // adjon elegendő késleltetést a "kondenzátor" teljes (szinte teljes) kisütéséhez // // törölje az időzítő túlcsordulási jelzőjét T0IF = 0; // várja meg, hogy az időzítő túlcsorduljon, kezdje a számlálást 0 -ról, miközben (! T0IF); T0IF = 0; // mérni kell a töltés kapacitását RC4 = 1; // várja meg, amíg a kapacitás feltöltődik a referance feszültségig, miközben (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} count = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; visszatérési szám; }
int isTouching (int tolerancia) {
// több minta átlaga dupla átlag = 0; (int i = 0; i calibrationValue+tolerancia) esetén átlag ++; } átlagos /= TOUCH_SAMPLE; // az átlag 0 és 1 közötti szám lesz, ha (átlag> 0,2) return 1; visszatérés 0; }
void calibrate () {
int átlag = 0; int minták [CALIBRATION_SAMPLE]; // átlagos érték lekérése (int i = 0; i <CALIBRATION_SAMPLE; i ++) {minták = getChargeTime (); átlag += minták ; } átlagos /= CALIBRATION_SAMPLE; calibrationValue = átlagos; // max/min értékek beszerzése maxCalibrationValue = minták [0]; minCalibrationValue = minták [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = minták ; if (minták <minCalibrationValue) minCalibrationValue = minták ; }}
void setupCapacitiveTouch () {
// töltés/kisütés csap beállítása kimenetként, ebben az esetben ez RC4 TRISCbits. TRISC4 = 0; // időzítő beállítása0 T0CS = 0; PSA = 1; // összehasonlító beállítása C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // számolási értékek törlése count = 0; // kalibrálási értékek törlése calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // futtassa a kalibrálást a kalibrálás indításakor (); }
3. lépés: A fő kód írása
A fő kódtól kezdve bele kell foglalnia az előző lépésben létrehozott fejlécfájlt. A következő kód egy példa arra, hogyan használhatja az isTouching funkciót kapcsolóként. Esetemben a fejlécnek a capacitiveTouch.h nevet adtam.
#befoglalni
#include "capacitiveTouch.h"
// ez a változó azt jelzi, hogy a gomb már le van -e nyomva
int lastState = 0;
void main () {
// az RC5 beállítása kimenetként TRISCbits. TRISC5 = 0; // ezt a függvényt meg kell hívni a program beállításakorCapacitiveTouch (); _késleltetés (1000); // kalibrálás a pontos beállítás után calibrate (); while (1) {// annak ellenőrzése, hogy megnyomják -e a gombot, ha (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; különben RC5 = 1; lastState = 1; } // annak ellenőrzése, hogy a gomb felszabadul -e, ha if (lastState == 1 &&! isTouching (15)) lastState = 0; _ késleltetés_ms (20); }}
kalibrálás:
Amikor ezt a függvényt meghívják, a calibrationValue, a maxCalibrationValue és a minCalibrationValue változók frissülnek. A calibrationValue értéket az isTouching függvény használja. Ne feledje, hogy az érintőpadot egyedül kell hagyni a kalibrálás során.
setupCapacitiveTouch:
Hívni kell a program elején. Beállítja a többi bit által használt szükséges biteket. Kallibrációt is futtat. Mindazonáltal jobb eredményeket értem el, ha vártam egy másodpercet, és külön elvégeztem a kalibrálást.
isTouching:
Ez a függvény 1 -et ad vissza, ha a C12IN0 kapacitásának növekedését észleli, és 0 -t ad vissza, ha a kapacitás közel van ahhoz, ami a kalibrálás során volt. Egyszerűen fogalmazva, ha valaki megérinti a padot, az isTouching függvény 1 -et ad vissza. A függvény paramétert is szeretne bemenetként megadni, ez a tűréshatár, hogy aktiválódjon. Minél magasabb a tolerancia értéke, annál kevésbé érzékeny. A beállításomban azt találtam, hogy 15 jól működött, de mivel ez az ocsilátor frekvenciájától és attól függ, hogy mekkora kapacitást ad hozzá, amikor megnyomja, kísérletezzen ezzel az értékkel, amíg meg nem találja az Önnek megfelelőt.
getChargeTime:
Ha szeretné tudni, hogy mennyi idő alatt tölti fel a kapacitást a CVREF feszültségre, ez a funkció teszteli, és visszaad egy egész számot. Az idő másodpercben történő lekéréséhez használja ezt a képletet: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Ez a képlet arra is használható, hogy az isTouching függvényből másodpercekre írja le a toleranciabemenetet.
Ajánlott:
Időjárás állomás az Atmega328P-PU mikrokontrollerrel: 5 lépés
Időjárás állomás az Atmega328P-PU mikrokontrollerrel: Nemrég vettem egy ingyenes online tanfolyamot az edx-szel (a Harvard Egyetem és az MIT alapította 2012-ben, az edX egy online tanulási célpont és MOOC szolgáltató, amely kiváló minőségű tanfolyamokat kínál a világ legjobb egyetemeitől és intézményeitől a tanulók estéjére
PC billentyűzet illesztése 8051 mikrokontrollerrel: 6 lépés
PC billentyűzet interfész a 8051 mikrokontrollerrel: Ebben a projektben elmagyaráztam Önnek, hogyan csatlakoztathatjuk PC billentyűzetünket 8051 mikrokontrollerhez
Készítse el saját fejlesztőlapját a mikrokontrollerrel: 3 lépés (képekkel)
Készítse el saját fejlesztőlapját a mikrokontrollerrel: Valaha is akart saját fejlesztőlapot készíteni mikrokontrollerrel, és nem tudta, hogyan. Ebben az oktatható útmutatóban megmutatom, hogyan kell elkészíteni. Minden, amire szüksége van, az elektronika ismerete, az áramkörök tervezése és programozás. Ha bármilyen feladata van
PWM hullám generálása PIC mikrokontrollerrel: 6 lépés
PWM hullám generálása a PIC mikrokontrollerrel: MI A PWM? A PWM STANDS PULSE WIDTH MODULATION egy olyan technika, amellyel az impulzus szélessége változik. Ennek a koncepciónak a világos megértéséhez vegye figyelembe az óraimpulzust vagy bármely négyzethullámú jelet, amelynek 50% -os működési ciklusa van, ami azt jelenti, hogy a Ton és a Toff periódus azonos
Kapacitív érintés az Evive segítségével (Arduino alapú vezérlő): 6 lépés (képekkel)
Kapacitív érintés az Evive segítségével (Arduino alapú vezérlő): Tudja, hogyan működik az okostelefon érintőképernyője? Az okostelefon számos érintőérzékelőt tartalmaz az üveg képernyő alatt. Manapság a kapacitív érintésérzékelő technológián alapul, és még egy gyengéd érintés is könnyen észlelhető. A kapacitív érintés érzékelhető