ዝርዝር ሁኔታ:

አቅም በ PIC16F886 ማይክሮ መቆጣጠሪያ: 3 ደረጃዎች
አቅም በ PIC16F886 ማይክሮ መቆጣጠሪያ: 3 ደረጃዎች

ቪዲዮ: አቅም በ PIC16F886 ማይክሮ መቆጣጠሪያ: 3 ደረጃዎች

ቪዲዮ: አቅም በ PIC16F886 ማይክሮ መቆጣጠሪያ: 3 ደረጃዎች
ቪዲዮ: 🛑 ኮምፒውተር ላይ የስልክ አፕልኬሽን እንዴት መጫን እንችላለን || How to install a phone application on a computer 2024, ህዳር
Anonim
አቅም በ PIC16F886 ማይክሮ መቆጣጠሪያ
አቅም በ PIC16F886 ማይክሮ መቆጣጠሪያ

በዚህ መማሪያ ውስጥ በአቅም አቅም ውስጥ ልዩነቶችን ለመለየት PIC16F886 ማይክሮ መቆጣጠሪያን እንዴት እንደሚጠቀሙ እናልፋለን ፣ ይህ በኋላ የንክኪ ፓድ እየተጫነ መሆኑን ለመናገር ሊያገለግል ይችላል። ይህንን ፕሮጀክት ከማድረግዎ በፊት ከፒክ ማይክሮ መቆጣጠሪያዎች ጋር መተዋወቅ ጥሩ ነው።

ደረጃ 1 - ወረዳዎን ያገናኙ

የወረዳዎን ሽቦ ያገናኙ
የወረዳዎን ሽቦ ያገናኙ

በመጀመሪያ ፣ ከላይ ባለው መርሃግብር መሠረት ወረዳውን በማገናኘት እንጀምር። የመዳሰሻ ሰሌዳውን ለመሥራት የአሉሚኒየም ፊውልን ወደ ካሬ ማጠፍ እና በሽቦ ላይ መለጠፍ ይችላሉ። ለ 100 ኪ resistor በተለያዩ እሴቶች ዙሪያ ሙከራ ማድረግ ይችላሉ ፣ 100 ኪ ለእኔ በደንብ እንደሰራ አገኘሁ።

የ RC4 ፒን የሚለካውን አቅም መሙላት/ማስወጣት ለመጀመር ያገለግላል። C12IN0 ከ ጋር ተገናኝቷል - ከውስጣዊ ማነፃፀሪያ ጎን እና የ C1IN ፒን ከተመሳሳይ ተነፃፃሪ + ጎን ጋር ተገናኝቷል። ማይክሮ መቆጣጠሪያው የ C12IN0 ቮልቴጁ ከ C1IN ቮልቴጅ በላይ ሲደርስ አቅሙ ሙሉ በሙሉ እንደተሞላ ያያል። ተከላካይ የቮልቴጅ መከፋፈያው C1IN ወደ 5 ቮልት ቅርብ መሆኑን ያረጋግጣል።

የመዳሰሻ ሰሌዳው በእርስዎ እና በወረዳ መሬቱ መካከል ጉልህ አቅም በመኖሩ ላይ የተመሠረተ ስለሆነ ባትሪ ላይሰራ ይችላል።

ደረጃ 2 - የራስጌ ፋይል

የራስጌ ፋይል
የራስጌ ፋይል

በሁሉም ግንኙነቶች ተጠናቅቋል? ደህና ፣ ወደ ራስጌ ፋይል እንቀጥላለን። እኛ XC8 አጠናቃሪውን እንጠቀማለን እና ርዕሱ እንደሚጠቁመው አሁን በፕሮጀክትዎ ውስጥ አዲስ የራስጌ ፋይል ይፍጠሩ እና የሚከተለውን ኮድ ይቅዱ። እንዲሁም ያለ ምንም የራስጌ ፋይል ከዋናው ኮድዎ በላይ መገልበጥ ይችላሉ።

#CALIBRATION_SAMPLE 20 #TOUCH_SAMPLE 10 ን ይግለጹ 10 #DISCHARGE_TIME 5 ን ይግለጹ

int ቆጠራ;

int calibrationValue ፣ maxCalibrationValue ፣ minCalibrationValue;

int getChargeTime () {

int timerCount = 0; int overflowCount = 0; // የሚለቀቅ አቅም (RC) = 4; _ መዘግየት_ኤምኤስ (DISCHARGE_TIME); // ሙሉ በሙሉ (ከሞላ ጎደል በእውነቱ) “capacitor” ን ለመልቀቅ በቂ መዘግየት ይስጡ/የጊዜ ቆጣሪውን የትርፍ ባንዲራ T0IF = 0 ያፅዱ። // ሰዓት ቆጣሪው እስኪፈስ ድረስ ይጠብቁ ፣ ከ (0 T0IF) ጀምሮ ከ 0 መቁጠር ይጀምሩ። T0IF = 0; // RC4 = 1 ለመለካት አቅም መሙላት ይጀምሩ። // አቅም (C1OUT) {timerCount = TMR0; ከሆነ (T0IF) {overflowCount ++; T0IF = 0; }} ቆጠራ = (256 * overflowCount) + timerCount; // የሰዓት ቆጣሪን ዳግም ያስጀምሩ የቁጥር ቆጣሪ ቁጥር = 0; የተትረፈረፈ ቁጥር = 0; የመመለሻ ብዛት; }

int isTouching (int tolerance) {

// የብዙ ናሙናዎች አማካይ ድርብ አማካይ = 0; ለ (int i = 0; i calibrationValue+tolerance) አማካይ ++; } አማካይ /= TOUCH_SAMPLE; // አማካኝ በ 0 እና 1 መካከል ቁጥር ይሆናል (አማካይ> 0.2) 1 ቢመለስ። መመለስ 0; }

ባዶነት መለኪያ () {

int አማካይ = 0; int ናሙናዎች [CALIBRATION_SAMPLE]; // ለ (int i = 0; i <CALIBRATION_SAMPLE; i ++) {ናሙናዎች = getChargeTime (); አማካይ += ናሙናዎች ; } አማካይ /= CALIBRATION_SAMPLE; የካሊብሬሽን እሴት = አማካይ; // ከፍተኛ/ደቂቃ እሴቶችን maxCalibrationValue = ናሙናዎችን ያግኙ [0]; minCalibrationValue = ናሙናዎች [0]; ለ (int i = 0; i maxCalibrationValue) maxCalibrationValue = ናሙናዎች ; ከሆነ (ናሙናዎች <minCalibrationValue) minCalibrationValue = ናሙናዎች ; }}

ባዶነት ማዋቀርCapacitiveTouch () {

// ቅንብር እንደ ክፍያ/የፍሳሽ ማስወገጃ ቅንብር ፣ በዚህ ሁኔታ RC4 TRISCbits. TRISC4 = 0 ነው። // ሰዓት ቆጣሪን ማዘጋጀት 0 T0CS = 0; PSA = 1; // ንፅፅር ማቀናበር C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // የቁጥር እሴቶች ቆጠራ = 0; // የማካካሻ እሴቶችን ማፅዳቱ እሴት = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // በጅማሬ ማመሳከሪያ () ላይ መለኪያ ማካሄድ (); }

ደረጃ 3 ዋናውን ኮድ መጻፍ

ከዋናው ኮድ ጀምሮ ፣ በቀደመው ደረጃ የተፈጠረውን የራስጌ ፋይል ማካተት ያስፈልግዎታል። የሚከተለው ኮድ isTouching ተግባሩን እንደ መቀየሪያ እንዴት እንደሚጠቀሙበት ምሳሌ ነው። በእኔ ሁኔታ የራስጌውን ስም capacitiveTouch.h ሰጥቼዋለሁ።

#ያካትቱ

#"capacitiveTouch.h" ን ያካትቱ

// ይህ ተለዋዋጭ አዝራሩ ካለ ወይም ካልተጫነ ይነግረዋል

int lastState = 0;

ባዶ ባዶ () {

// RC5 ን እንደ ውፅዓት TRISCbits ማዘጋጀት። TRISC5 = 0; // በፕሮግራሙ ማዋቀርCapacitiveTouch () መጀመሪያ ላይ ይህንን ተግባር መደወል ያስፈልግዎታል። _ መዘግየት_ኤምኤስ (1000); // ከትክክለኛ ማዋቀሪያዎ መለኪያ () በኋላ/ያስተካክሉ ፣ (1) {// አዝራሩ እየተጫነ መሆኑን ማረጋገጥ (isTouching (15) && lastState == 0) {ከሆነ (RC5) RC5 = 0; ሌላ RC5 = 1; lastState = 1; } // (lastState == 1 &&! isTouching (15)) lastState = 0 ከሆነ ሌላ አዝራር እየተለቀቀ መሆኑን ማረጋገጥ። _ መዘግየት_ኤምኤስ (20); }}

መለካት

ይህ ተግባር ተለዋዋጮች የመለኪያ እሴት በሚባልበት ጊዜ maxCalibrationValue እና minCalibrationValue ይዘምናል። የካሊብሬሽን እሴት በ isTouching ተግባር ጥቅም ላይ ይውላል። በሚለካበት ጊዜ የመዳሰሻ ሰሌዳው ብቻውን መቀመጥ እንዳለበት ያስታውሱ።

ማዋቀርCapacitiveTouch:

በፕሮግራምዎ መጀመሪያ ላይ መጠራት አለበት። በሌሎች ተግባራት የሚጠቀሙባቸውን አስፈላጊ ቢቶች ያዘጋጃል። እንዲሁም ጥሪ ጥሪን ያካሂዳል። ሆኖም አንድ ሰከንድ በመጠባበቅ የተሻለ ውጤትን አግኝቻለሁ እና እንደገና መለየቱን በተናጠል አሂድ።

መንካት ነው

በ C12IN0 ላይ የአቅም መጨመርን ካስተዋለ እና ይህ በመለኪያ ጊዜ ከነበረው ጋር ቅርብ ከሆነ 0 ይመልሳል። በቀላል አነጋገር ፣ አንድ ሰው ሰሌዳውን ከነካ የ isTouching ተግባር ይመለሳል 1. ተግባሩ እንዲሁ ግቤትን እንደ ግቤት ይፈልጋል ፣ ይህ ለማነቃቃት መቻቻል ነው። የመቻቻል ዋጋው ከፍ ባለ መጠን ስሜቱ ይቀንሳል። በማዋቀሬ ውስጥ 15 በደንብ ሰርቷል ፣ ግን ይህ በ ocsillator ድግግሞሽ ላይ የሚመረኮዝ ስለሆነ እና እሱን ሲጫኑ ምን ያህል አቅም እንደሚጨምር እርስዎ የሚስማማዎትን እስኪያገኙ ድረስ በዚህ እሴት ዙሪያ መሞከር አለብዎት።

getChargeTime ፦

አቅምዎን ወደ CVREF ቮልቴጅ ለመሙላት ምን ያህል ጊዜ እንደሚወስድ ለማወቅ ሲፈልጉ ይህ ተግባር ይፈትነዋል እና ኢንቲጀር ይመልሳል። በሰከንዶች ውስጥ ጊዜውን ለማግኘት ይህንን ቀመር ይጠቀሙ (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds ይህ ቀመር የመቻቻል ግቤትን ከ isTouching ተግባር ወደ ሰከንዶች ለማግኘትም ሊያገለግል ይችላል።

የሚመከር: