ዝርዝር ሁኔታ:

አርዱዲኖ እና አውራ ጎማ መቀያየር - 9 ደረጃዎች
አርዱዲኖ እና አውራ ጎማ መቀያየር - 9 ደረጃዎች

ቪዲዮ: አርዱዲኖ እና አውራ ጎማ መቀያየር - 9 ደረጃዎች

ቪዲዮ: አርዱዲኖ እና አውራ ጎማ መቀያየር - 9 ደረጃዎች
ቪዲዮ: የአርዱብሎክ መተግበሪያን በመጫን ላይ 2024, ህዳር
Anonim
አርዱዲኖ እና አውራ ጣት መቀየሪያዎች
አርዱዲኖ እና አውራ ጣት መቀየሪያዎች

በዚህ ጽሑፍ ውስጥ በእኛ የአርዱዲኖ ስርዓቶች የግፊት-ጎማ/የአውራ ጣት መቀየሪያ አጠቃቀምን እንመረምራለን። ከ PMD Way የተወሰዱ አንዳንድ ምሳሌዎች እዚህ አሉ።

ደረጃ 1

ምስል
ምስል

ለማያውቁት ፣ እያንዳንዱ ማብሪያ / ማጥፊያ አንድ አቀባዊ ክፍል ነው እና የተለያዩ መጠኖችን ለመፍጠር አንድ ላይ ሊገናኙ ይችላሉ። ከዜሮ እስከ ዘጠኝ ድረስ ከቁጥሮች ለመምረጥ አዝራሮቹን መጠቀም ይችላሉ። ከመጨመሪያ/መቀነስ አዝራሮች ይልቅ በአውራ ጣትዎ የሚንቀሳቀሱበት መንኮራኩር ያላቸው አማራጮች አሉ።

ከጌጣጌጥ የተጠቃሚ በይነገጾች ቀናት በፊት እነዚህ መቀያየሪያዎች የቁጥር መረጃ ግቤትን ለማቀናበር በጣም ተወዳጅ ዘዴዎች ነበሩ። ሆኖም እነሱ ዛሬም ይገኛሉ ፣ ስለዚህ እንዴት እንደሚሠሩ እና እንዴት እንደምንጠቀምባቸው እንይ። የመቀየሪያው እሴት በሁለትዮሽ ኮድ በአስርዮሽ ወይም ቀጥታ አስርዮሽ በኩል ይገኛል። በ BCD ቅጽ ውስጥ የመቀየሪያውን የኋላ ግምት ውስጥ ያስገቡ።

ደረጃ 2

ምስል
ምስል

እኛ በግራ በኩል የጋራ አለን ፣ ከዚያ ለ 1 ፣ ለ 2 ፣ ለ 4 እና ለ 8 እውቂያዎች አንድ የጋራ voltage ልቴጅ (5V ይበሉ) ከተጠቀሙ የመቀየሪያው ዋጋ የሚለካው በ ውስጥ ያሉትን የእውቂያዎች እሴቶችን በማከል ነው። ከፍተኛ ሁኔታ። ለምሳሌ ፣ 3 ን ከመረጡ - 1 እና 2 እውቂያዎች በጋራ ቮልቴጅ ላይ ይሆናሉ። በዜሮ እና በዘጠኝ መካከል ያሉት እሴቶች በሰንጠረ in ውስጥ እንደዚያ ሊወከሉ ይችላሉ።

ደረጃ 3

ምስል
ምስል

አሁን የመቀየሪያውን ዋጋ ማንበብ ቀላል እንደሚሆን መገንዘብ አለብዎት - እና ልክ ነዎት ፣ ልክ ነው። 5V ን ከተለመደው ፣ ከአርዲኖ ቦርዶቻችን ዲጂታል ግብዓት ካስማዎች ጋር ማገናኘት እንችላለን ፣ ከዚያ የእያንዳንዱን ውፅዓት ዋጋ ለመወሰን digitalRead () ይጠቀሙ። በስዕሉ ውስጥ የ BCD እሴትን ወደ አስርዮሽ ቁጥር ለመለወጥ አንዳንድ መሠረታዊ ሂሳብን እንጠቀማለን። ስለዚህ አሁን ያንን እናድርግ።

ከሃርድዌር እይታ ፣ አንድ ተጨማሪ ነገር ግምት ውስጥ ማስገባት አለብን-የግፊት-ጎማ መቀየሪያ እንደ አራት የተለመዱ ክፍት የግፊት ቁልፎች በኤሌክትሪክ ይሠራል። ይህ ማለት በከፍተኛ እና በዝቅተኛ ግዛቶች መካከል ግልፅ ልዩነት እንዲኖረን ወደ ታች የሚጎትቱ መቆጣጠሪያዎችን መጠቀም አለብን ማለት ነው። ስለዚህ የአንድ መቀየሪያ ዘዴ ከላይ እንደተመለከተው ነው።

ደረጃ 4

አሁን 1 ፣ 2 ፣ 4 እና 8 የተሰየሙትን ውጤቶች (ለምሳሌ) ከዲጂታል ፒን 8 ፣ 9 ፣ 10 እና 11 ጋር ማገናኘት ቀላል ጉዳይ ነው። በመቀጠል ግብዓቶችን ማንበብ እና የ BCD ውጤትን ወደ አስርዮሽ መለወጥ የሚችል ረቂቅ ሊኖረን ይገባል። የሚከተለውን ንድፍ ግምት ውስጥ ያስገቡ-

/ * የ SAA1064 የቁጥር ማሳያ ጋሻ ይጠቀማል https://www.gravitech.us/7segmentshield.html የ SAA1064 ጋሻ ከሌለዎት ተከታታይ ማሳያ ይጠቀማል */ #"Wire.h" #መግለፅ q1 8 #መለየት q2 9 # q4 10 #መግለፅ q8 11 ባዶ ማዘጋጀት () {Serial.begin (9600); Wire.begin (); // i2c አውቶቡስን ይቀላቀሉ (አድራሻ ለጌታ አማራጭ) መዘግየት (500); pinMode (q1 ፣ ግቤት); // አውራ ጎማ '1' ፒን ሞዶ (q2 ፣ ግቤት); // አውራ ጎማ '2' ፒን ሞዶ (q4 ፣ ግቤት); // አውራ ጎማ '4' ፒን ሞዶ (q8 ፣ ግቤት); // አውራ ጣት '8'} ባዶነት dispSAA1064 (int Count) // ኢንቲጀር 'ቆጠራ' ወደ Gravitech SAA1064 ጋሻ ይልካል {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D ፣ 0x07 ፣ 0x7F ፣ 0x6F}; int ሺዎች ፣ መቶዎች ፣ አስሮች ፣ መሠረቶች; Wire.begin ማስተላለፊያ (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.begin ማስተላለፊያ (0x38); Wire.write (1); ሺዎች = ቆጠራ/1000; መቶዎች = (ቆጠራ- (ሺዎች*1000))/100; አስሮች = (ቆጠራ-((ሺዎች*1000)+(መቶዎች*100)))/10; መሠረት = ቆጠራ-((ሺዎች*1000)+(መቶዎች*100)+(አስር*10)); Wire.write (ፍለጋ [መሠረት]); Wire.write (ፍለጋ [አስር]); Wire.write (ፍለጋ [መቶዎች]); Wire.write (ፍለጋ [ሺዎች]); Wire.endTransmission (); መዘግየት (10); } int readSwitch () {int total = 0; ከሆነ (digitalRead (q1) == ከፍተኛ) {ጠቅላላ+= 1; } ከሆነ (digitalRead (q2) == ከፍተኛ) {ጠቅላላ+= 2; } ከሆነ (digitalRead (q4) == ከፍተኛ) {ጠቅላላ+= 4; } ከሆነ (digitalRead (q8) == ከፍተኛ) {ጠቅላላ+= 8; } ጠቅላላ መመለስ; } ባዶነት loop () {dispSAA1064 (readSwitch ()); // ጋሻውን ለማሳየት የመቀየሪያ እሴትን ይልካል Serial.println (readSwitch ()); // የመቀየሪያ እሴትን ወደ ተከታታይ ማሳያ ሳጥን ይልካል}

ተግባሩ readSwitch () ቁልፍ ነው። የእያንዳንዱን ማብሪያ ውፅዓት የቁጥር ውክልና በመጨመር የመቀየሪያውን እሴት ያሰላል እና አጠቃላይ ውጤቱን ይመልሳል። ለዚህ ምሳሌ በ NXP SAA1064 ቁጥጥር የሚደረግበትን የቁጥር ማሳያ ጋሻ ተጠቅመናል።

ደረጃ 5

Image
Image

ተግባሩ readSwitch () ቁልፍ ነው። የእያንዳንዱን ማብሪያ ውፅዓት የቁጥር ውክልና በመጨመር የመቀየሪያውን እሴት ያሰላል እና አጠቃላይ ውጤቱን ይመልሳል። ለዚህ ምሳሌ በ NXP SAA1064 ቁጥጥር የሚደረግበትን የቁጥር ማሳያ ጋሻ ተጠቅመናል።

ከሌለዎት ፣ ያ ደህና ነው - ውጤቶቹ እንዲሁ ወደ ተከታታይ ማሳያ ይላካሉ። አሁን ፣ በቪዲዮው ውስጥ በተግባር እናየው።

ደረጃ 6

እሺ ብዙ አይመስልም ፣ ግን የቁጥር መግቢያ ከፈለጉ ብዙ አካላዊ ቦታን ይቆጥባል እና የመግቢያ ትክክለኛ ዘዴን ይሰጣል።

ስለዚህ እዚያ አለዎት። በእውነቱ እነዚህን በፕሮጀክት ውስጥ ይጠቀማሉ? ለአንድ አሃዝ - አዎ። ለአራት? ምናልባት ላይሆን ይችላል-ምናልባት ባለ 12 አሃዝ የቁልፍ ሰሌዳ መጠቀም ቀላል ሊሆን ይችላል። ሀሳብ አለ…

ደረጃ 7 - ብዙ መቀያየሪያዎች

ምስል
ምስል

አሁን አራት አሃዞችን እንዴት እንደሚያነቡ እንመረምራለን - እና በሂደቱ ውስጥ እነዚያን ሁሉ ዲጂታል ፒኖች አያባክኑም። በምትኩ ፣ በ I2C አውቶቡስ በኩል የሚገናኝ ማይክሮ ቺፕ MCP23017 16-ቢት ወደብ ማስፋፊያ IC ን እንጠቀማለን። የእያንዳንዱን ማብሪያ/ማጥፊያ ሁኔታ ለማንበብ ልንጠቀምባቸው የምንችላቸው አስራ ስድስት ዲጂታል ግብዓት/ውፅዓት ፒኖች አሉት።

ወደ ፊት ከመራመድዎ በፊት ፣ እባክዎን ለዚህ ጽሑፍ አንዳንድ የታሰበ እውቀት እንደሚያስፈልግ ልብ ይበሉ - I2C አውቶቡስ (ክፍሎች አንድ እና ሁለት) እና MCP23017። በመጀመሪያ የሃርድዌር ግንኙነቶችን እና ከዚያ የአርዱዲኖን ንድፍ እንገልፃለን። ለአንድ ነጠላ የመቀየሪያ ምሳሌ ጥቅም ላይ የዋለውን መርሃግብር ያስታውሱ።

ማብሪያው በቀጥታ ከአርዱዲኖ ጋር ሲገናኝ የመቀየሪያውን ዋጋ ለማወቅ የእያንዳንዱን ፒን ሁኔታ እናነባለን። MCP23017 ን በመጠቀም በትላልቅ መጠን ይህንን እንደገና እናደርጋለን። የማሳያውን ንድፍ ግምት ውስጥ ያስገቡ-

ደረጃ 8

እኛ 16 ፒኖች አሉን ፣ ይህም አራት መቀያየሪያዎችን ለማገናኘት ያስችላል። የእያንዳንዱ መቀየሪያ የጋራ መጠቀሚያዎች አሁንም ከ 5 ቮ ጋር ይገናኛሉ ፣ እና እያንዳንዱ የመቀየሪያ ዕውቂያ አሁንም ለ GND 10k የሚጎትት ወደታች ተከላካይ አለው። ከዚያ 1 ፣ 2 ፣ 4 ፣ 8 አሃዝ አንድ አሃዞችን ከ GPBA0 ~ 3 ጋር እናገናኘዋለን። አሃዝ ሁለት 1 ፣ 2 ፣ 4 ፣ 8 እስከ GPA4 ~ 7; ዲጂት ሶስት 1 ፣ 2 ፣ 4 ፣ 8 ለ GPB0 ~ 3 እና አሃዝ አራት ፣ 1 ፣ 2 ፣ 4 ፣ 8 ለጂፒቢ 4 ~ 7።

አሁን መቀያየሪያዎቹን እንዴት እናነባለን? እነዚያ ሁሉ ሽቦዎች አስቸጋሪ ነው ብለው እንዲያስቡ ሊያደርጉዎት ይችላሉ ፣ ግን ንድፉ በጣም ቀላል ነው። የ GPBA እና B ዋጋን ስናነብ ፣ ለእያንዳንዱ ባንክ አንድ ባይት ይመለሳል ፣ እጅግ በጣም ጉልህ በሆነው መጀመሪያ። እያንዳንዱ አራት ቢት ከተዛማጅ I/O ፒኖች ጋር ከተገናኘው የመቀየሪያ ቅንብር ጋር ይዛመዳል። ለምሳሌ ፣ ለሁለቱም የ IO ባንኮች ውሂቡን ከጠየቅን እና መቀያየሪያዎቹ ወደ 1 2 3 4 ከተዋቀሩ - ባንክ ሀ 0010 0001 ይመለሳል እና ባንክ ለ 0100 0011 ይመለሳል።

እያንዳንዱን አራት ቢት ወደ ተለዋጭ ተለዋዋጭ ለመለያየት አንዳንድ የትንፋሽ አሠራሮችን እንጠቀማለን - ይህም የእያንዳንዱን አሃዝ ዋጋ ያስቀረናል። ለምሳሌ ፣ የመቀየሪያ አራት ዋጋን ለመለየት ፣ ቢትዎቹን ከባንክ ለ እንቀይራለን >> >> 4. ይህ የመቀየሪያ ዋጋን ወደ ውጭ ያወጣል ፣ እና በግራ በኩል ያሉት ባዶ ቢቶች ዜሮ ይሆናሉ።

የመቀየሪያ ሶስት ዋጋን ለመለየት ፣ ድብልቅን በጥቂቱ እንጠቀማለን & - ይህም የመቀየሪያ ሶስት ዋጋን ይተዋል። ምስሉ የሁለትዮሽ መቀየሪያ እሴቶችን መከፋፈል ያሳያል - ጥሬውን GPIOA እና B ባይት እሴቶችን ያሳያል ፣ ከዚያ እያንዳንዱ አሃዝ የሁለትዮሽ እሴት እና የአስርዮሽ እሴት።

ደረጃ 9

ስለዚህ የሰልፉን ንድፍ እንይ -

/ * ምሳሌ 40 ሀ-በ MCP23017 በኩል አራት የግፊት ተሽከርካሪ ቢሲዲ መቀያየሪያዎችን ያንብቡ ፣ በ SAA1064/4 አኃዝ 7-ክፍል LED ማሳያ */// MCP23017 ፒኖች 15 ~ 17 ወደ GND ፣ I2C የአውቶቡስ አድራሻ 0x20 // SAA1064 I2C የአውቶቡስ አድራሻ 0x38 # "Wire.h" // ለ LED ዲጂት ትርጓሜዎች አሃዞች [16] = {63 ፣ 6 ፣ 91 ፣ 79 ፣ 102 ፣ 109 ፣ 125 ፣ 7 ፣ 127 ፣ 111 ፣ 119 ፣ 124 ፣ 57 ፣ 94 ፣ 121 ፣ 113 }; ባይት GPIOA ፣ GPIOB ፣ dig1 ፣ dig2 ፣ dig3 ፣ dig4; ባዶ initSAA1064 () {// ማዋቀር 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA ውፅዓት ፣ ምንም አሃዝ ባዶ ያልሆነ Wire.endTransmission (); } ባዶነት ማዋቀር () {Serial.begin (9600); Wire.begin (); // አስጀምር I2C አውቶቡስ initSAA1064 (); } ባዶነት loop () {// የባንክ A Wire.beginTransmission (0x20) ግብዓቶችን ያንብቡ ፤ Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // ይህ ባይት ለቁጥሮች 1 እና 2 ቁጥሮች የመቀየሪያ መረጃን ይ //ል // የባንክ ቢ Wire.beginTransmission (0x20) ግብዓቶችን ያንብቡ ፤ Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // ይህ ባይት ለእያንዳንዱ ቁጥሮች // dig1 LHS ፣ dig4 RHS dig4 = GPIOB >> 4 ለቁጥሮች 3 እና 4 // የማውጣት እሴት የመቀየሪያ መረጃን ይ containsል። dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // ሁሉንም GPIO እና የግለሰብ መቀየሪያ መረጃን ወደ ተከታታይ ማሳያ መላክ // ለማረም እና ለፍላጎት Serial.print (“GPIOA =”); Serial.println (GPIOA ፣ BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB ፣ BIN); Serial.println (); Serial.print ("አሃዝ 1 ="); Serial.println (dig1 ፣ BIN); Serial.print ("አሃዝ 2 ="); Serial.println (dig2 ፣ BIN); Serial.print ("አሃዝ 3 ="); Serial.println (dig3, BIN); Serial.print ("አሃዝ 4 ="); Serial.println (dig4 ፣ BIN); Serial.println (); Serial.print ("አሃዝ 1 ="); Serial.println (dig1 ፣ DEC); Serial.print ("አሃዝ 2 ="); Serial.println (dig2, DEC); Serial.print ("አሃዝ 3 ="); Serial.println (dig3, DEC); Serial.print ("አሃዝ 4 ="); Serial.println (dig4, DEC); Serial.println (); // በ SAA1064 Wire.beginTransmission (0x38) በኩል ወደ LED ማሳያ የመቀየሪያ እሴት ይላኩ ፤ Wire.write (1); Wire.write (አሃዞች [dig4]); Wire.write (አሃዞች [dig3]); Wire.write (አሃዞች [dig2]); Wire.write (አሃዞች [dig1]); Wire.endTransmission (); መዘግየት (10); መዘግየት (1000); }

እና ለማያምኑ … የቪዲዮ ማሳያ።

ስለዚህ እዚያ አለዎት። ከአንድ ይልቅ አራት አሃዞች ፣ እና አርዱዲኖ ዲጂታል I/O ፒኖችን በሚጠብቀው I2C አውቶቡስ ላይ። ስምንት MCP23017 ን በመጠቀም በአንድ ጊዜ 32 አሃዞችን ማንበብ ይችላሉ። ያንን በማድረግ ይደሰቱ!

በዓለም ዙሪያ ነፃ መላኪያ ካለው ከ PMD Way ሁለቱንም BCD እና የአስርዮሽ መቀየሪያዎችን በተለያዩ መጠኖች ማዘዝ ይችላሉ።

ይህ ልጥፍ በ pmdway.com ወደ እርስዎ አምጥቷል - ሁሉም ነገር ለአዘጋጆች እና ለኤሌክትሮኒክስ አፍቃሪዎች ፣ በዓለም አቀፍ ነፃ መላኪያ።

የሚመከር: