ዝርዝር ሁኔታ:

በ I2C ዳሳሽ በይነገጽ መጀመር ?? - ESP32s ን በመጠቀም 8 ኤምአርኤፍዎን MMA8451 በይነገጽ ያድርጉ
በ I2C ዳሳሽ በይነገጽ መጀመር ?? - ESP32s ን በመጠቀም 8 ኤምአርኤፍዎን MMA8451 በይነገጽ ያድርጉ

ቪዲዮ: በ I2C ዳሳሽ በይነገጽ መጀመር ?? - ESP32s ን በመጠቀም 8 ኤምአርኤፍዎን MMA8451 በይነገጽ ያድርጉ

ቪዲዮ: በ I2C ዳሳሽ በይነገጽ መጀመር ?? - ESP32s ን በመጠቀም 8 ኤምአርኤፍዎን MMA8451 በይነገጽ ያድርጉ
ቪዲዮ: MKS Gen L - Marlin 1 1 9 (configuration.h) 2024, ህዳር
Anonim
በ I2C ዳሳሽ በይነገጽ መጀመር ?? - ESP32 ን በመጠቀም የእርስዎን MMA8451 በይነገጽ
በ I2C ዳሳሽ በይነገጽ መጀመር ?? - ESP32 ን በመጠቀም የእርስዎን MMA8451 በይነገጽ

በዚህ መማሪያ ውስጥ ፣ ከመቆጣጠሪያ (አርዱዲኖ ፣ ESP32 ፣ ESP8266 ፣ ESP12 NodeMCU) ጋር የ I2C መሣሪያ (አክስሌሮሜትር) እንዴት እንደሚጀመር ፣ እንደሚገናኙ እና እንደሚያገኙ ሁሉንም ይማራሉ።

ደረጃ 1 - በ I2C እንዴት እንደሚጀመር - አስደናቂው ዓለም በኢንተር IC ግንኙነት

አርዱinoኖ ፣ ኢኤስፒ ተከታታይ ፣ ፒአይሲ ፣ Rasberry PI ፣ ወዘተ ሁሉም የማይታመኑ ናቸው። ግን አንዴ ካለዎት በእሱ ምን ያደርጋሉ?

በጣም ጥሩው ነገር ዳሳሾችን እና የመሳሰሉትን ማከል ነው። ዛሬ ብዙ ትኩስ አዲስ ቴክኖሎጂ ኮምፒተርን ፣ ስልኮችን ፣ ጡባዊዎችን ወይም ማይክሮ መቆጣጠሪያዎችን ዳሳሾቹን እንዲያወሩ ለመፍቀድ የ I2C ፕሮቶኮልን ይጠቀማል። ስልክዎ የትኛውን መንገድ እንደሚመለከት ለማወቅ ያንን የፍጥነት መለኪያ ዳሳሽ ማነጋገር ካልቻሉ ዘመናዊ ስልኮች ያነሱ ብልጥ ይሆናሉ።

ደረጃ 2 - በ I2C ላይ አጠቃላይ እይታ

I2C በአንድ አውቶቡስ ላይ የብዙ ጌቶች እና ባሮች አብሮ መኖርን የሚፈቅድ ተከታታይ ፣ የተመሳሰለ ፣ ግማሽ-ድርብ የግንኙነት ፕሮቶኮል ነው። የ I2C አውቶቡስ ሁለት መስመሮችን ያካተተ ነው - ተከታታይ የውሂብ መስመር (ኤስዲኤ) እና ተከታታይ ሰዓት (SCL)። ሁለቱም መስመሮች የሚጎትቱ ተከላካዮች ያስፈልጋቸዋል።

ኤስዲኤ (ተከታታይ ውሂብ) - ለጌታው እና ለባሪያው ውሂብ ለመላክ እና ለመቀበል መስመር። SCL (ተከታታይ ሰዓት) - የሰዓት ምልክቱን የሚሸከም መስመር። እንደ ቀላልነት እና ዝቅተኛ የማምረት ወጪ ባሉ እንደዚህ ባሉ ጥቅሞች ፣ I2C በአብዛኛው በአነስተኛ ርቀቶች (በአንድ ጫማ ውስጥ) ለዝቅተኛ ፍጥነት ተጓዳኝ መሣሪያዎች ግንኙነት ያገለግላል።

ስለ I2C የበለጠ መማር ይፈልጋሉ? ……

ደረጃ 3 - የ I²C ዳሳሾችን እንዴት ማዋቀር እንደሚቻል

ወደ ፕሮጀክቱ ከመግባትዎ በፊት የእርስዎን ዳሳሽ ጥቂት መሠረታዊ ነገሮች መረዳት ያስፈልግዎታል። ስለዚህ ከመጥለቁ በፊት እራስዎን አንድ ኩባያ ቡና አፍስሱ:)? …

የ I2C ታላቅ ጥንካሬ በተመሳሳይ አራት ሽቦዎች ላይ በጣም ብዙ ዳሳሾችን ማስቀመጥ ነው። ነገር ግን በርካታ ቀደም ሲል የተሰሩ ሞጁሎች ለተገናኙባቸው ክፍሎች ፣ ጥቂት የ smd resistors ን ከመለያየት ማስወገድ ይኖርብዎታል ፣ አለበለዚያ በአውቶቡሱ ላይ መጎተት በጣም ጠበኛ ሊሆን ይችላል።

ከዳታቤዝ ምን መረጃ እንፈልጋለን ??

  1. የዳሳሽ ተግባር
  2. Pinouts እና ካስማዎች ተግባር
  3. በይነገጽ መግለጫ (“I2c የአድራሻ ምርጫ ሠንጠረዥ” ላይ ለመመልከት እንዳያመልጥዎት)
  4. ይመዝገቡ !!

ሁሉም ነገር ደህና ነው በቀላሉ ያገኙታል ግን ይመዘግባል ?? REGISTERS በ I²C መሣሪያ ውስጥ በቀላሉ የማስታወሻ ቦታዎች ናቸው። በተሰጠው ዳሳሽ ውስጥ ስንት መዝገቦች እንዳሉ ፣ እና የሚቆጣጠሩት ወይም የያዙት የመመዝገቢያ ካርታ ይባላል። በአነፍናፊው የውሂብ ሉህ ላይ ያለው አብዛኛው መረጃ እያንዳንዱ መመዝገቢያ እንዴት እንደሚሠራ መግለፅ ነው ፣ እና መረጃው በቀጥታ ቀጥተኛ በሆነ መንገድ ስለማይቀርብ ለማንበብ በጣም ከባድ ሊሆን ይችላል።

እኔ ምን ለማለት እንደፈለግኩ እንዲሰማዎት - ብዙ ዓይነት መዝገቦች አሉ ነገር ግን ለዚህ መግቢያ በሁለት አጠቃላይ ዓይነቶች እቆጣጠራቸዋለሁ - ቁጥጥር እና የመረጃ መዝገቦች።

1) የመቆጣጠሪያ መዝገቦች

አብዛኛዎቹ ዳሳሾች በመቆጣጠሪያ መመዝገቢያዎች ውስጥ በተከማቹ እሴቶች ላይ በመመርኮዝ እንዴት እንደሚሠሩ ይለውጣሉ። የቁጥጥር መመዝገቢያዎችን እንደ ማብሪያ/ማጥፊያ ማብሪያ/ማጥፊያ ባንኮች አድርገው ያስቡ ፣ ትንሽ ወደ 1 በማቀናበር እና ያንን ትንሽ ወደ 0. I²C ቺፕ-ተኮር ዳሳሾች በማቀናጀት ብዙውን ጊዜ እንደ ቢት- ላሉት ነገሮች ደርዘን ወይም ከዚያ በላይ የአሠራር ቅንጅቶች አሏቸው። ሁነታዎች ፣ ማቋረጦች ፣ የንባብ-መጻፍ ቁጥጥር ፣ ጥልቀት ፣ የናሙና ፍጥነት ፣ ጫጫታ መቀነስ ፣ ወዘተ.

2) የውሂብ መመዝገቢያዎች አንድ መቆጣጠሪያ የባንክ መቀያየሪያዎችን ከመመዝገብ በተቃራኒ የውሂብ ውፅዓት መመዝገቢያዎች በሁለት ቁጥሮች መልክ የሚቀመጡ እንደ መያዣዎች ያሉ ይመስለኛል። ስለዚህ መረጃን ማወቅ ይፈልጋሉ ፣ ለመሣሪያ መታወቂያ ፣ ለኹነታ ምዝገባ ወዘተ የምመዘገብኩትን የመሳሰሉ የውሂብ መመዝገቢያዎችን ሁል ጊዜ ያንብቡ።

ስለዚህ ፣ የ I²C አነፍናፊን ማስጀመር ባለ ብዙ ደረጃ ሂደት ነው እና ትክክለኛው የአሠራር ቅደም ተከተል ብዙውን ጊዜ በመረጃ ዝርዝር ውስጥ ቀጥተኛ ከመሆን ይልቅ በተቃራኒ አቅጣጫ ይብራራል። “ከዚህ ዳሳሽ ንባብ ለማግኘት (1) ፣ (2) ፣ (3) ፣ (4) ፣ ወዘተ”) በጭራሽ አይናገር ፣ ነገር ግን “በዚህ ውስጥ ቢት x ን ከማቀናበርዎ በፊት” የቁጥጥር መመዝገቢያ ቢት መግለጫዎችን ያገኛሉ። በዚህ ሌላ የቁጥጥር መዝገብ ውስጥ ቢት y ን ማዘጋጀት አለብዎት”።

አሁንም የውሂብ ሉህ ከአብዛኛው ጽሑፍ የበለጠ በይነተገናኝ ሆኖ አግኝቼዋለሁ። ለአንድ የተወሰነ ቁርጥራጭ ወይም የመረጃ መረጃ ከጠቀሱ እና እሱ ሁሉንም ዝርዝሮች ፣ ግንኙነቶች እና ማጣቀሻዎች ይሰጥዎታል። ሁሉንም ማጣቀሻዎችዎን ለማውጣት ዝም ብለው ቁጭ ብለው ያንብቡ።:)

ደረጃ 4 በእንቅስቃሴ ይጀምሩ - የፍጥነት መለኪያ

ዘመናዊ የፍጥነት መለኪያዎች ማይክሮ ኤሌክትሮ-ሜካኒካል ሲስተምስ (ኤምኤምኤስ) መሣሪያዎች ናቸው ፣ ይህ ማለት በትንሽ መሣሪያዎች ውስጥ በትንሽ ቺፕ ላይ ለመገጣጠም ይችላሉ ማለት ነው። በኤምኤምኤስ የፍጥነት መለኪያዎች የተቀጠረውን ፍጥነት ለመለካት አንደኛው ዘዴ በምንጮች ላይ ተንጠልጥሎ የቆየ አነስተኛ የኮንስትራክሽን ብዛት መጠቀም ነው። የመሣሪያው ማፋጠን ምንጮቹ እንዲዘረጉ ወይም እንዲኮማተሩ ያደርጋቸዋል ፣ እና የአከባቢው የጅምላ መዛባት በአቅራቢያው ወደሚገኙ ቋሚ ሳህኖች በመለወጥ ሊለካ ይችላል።

የፍጥነት መለኪያዎች በሚከተሉት ባህሪዎች ተለይተዋል-

  1. በመግለጫ ሥዕላዊ መግለጫዎች ውስጥ X ፣ Y እና Z የተሰየሙ የመጥረቢያዎች ብዛት ፣ ከአንድ እስከ ሦስት መጥረቢያዎች። አንዳንድ የፍጥነት መለኪያዎች 6-ዘንግ ወይም 9-ዘንግ ተብለው እንደሚጠሩ ልብ ይበሉ ፣ ግን ያ ማለት ልክ እንደ ጋይሮስኮፕ እና/ወይም ማግኔቶሜትር ካሉ ሌሎች የ MEMS መሣሪያዎች ጋር ተጠቃለዋል ማለት ነው። እያንዳንዳቸው መሣሪያዎች እንዲሁ ሶስት መጥረቢያዎች አሏቸው ፣ ለዚህም ነው 3 ፣ 6 ወይም 9-ዘንግ የማይለካ የመለኪያ አሃዶች (አይሁዶች) ያሉት።
  2. የውጤቱ ዓይነት ፣ አናሎግ ወይም ዲጂታል። ዲጂታል የፍጥነት መለኪያ በ I2C ወይም SPI ላይ ሊነበብ ወደሚችል ዲጂታል ውክልና የፍጥነት መረጃን መቅረፅን ይንከባከባል።
  3. በ g ውስጥ የሚለካው የፍጥነት ክልል ፣ 1 ግራም በምድር ስበት ምክንያት ፍጥነቱ ነው።
  4. ከ MCU ጥሬ መረጃን ለመተንተን የሚያስፈልጉትን አንዳንድ ስሌቶች ማውረድ የሚችሉ አስተባባሪዎች። አብዛኛዎቹ የፍጥነት መለኪያዎች የፍጥነት ደረጃን (ድንጋጤ) እና 0-ግ (ፍሪደም) ሁኔታን ለመለየት አንዳንድ ቀላል የማቋረጥ ችሎታ አላቸው። ሌሎች ለ MCU የበለጠ ትርጉም ያለው መረጃ ለማቅረብ በጥሬው መረጃ ላይ የላቀ ሂደት ማካሄድ ይችላሉ።

ደረጃ 5: ከተቆጣጣሪ ጋር በይነገጽ

የ ESP ማይክሮ መቆጣጠሪያዎችን በአዝማሚያ ስለምናውቅ ፣ ESP32 ን ለኛ ምሳሌ እንጠቀማለን። ስለዚህ መጀመሪያ Nodemcu-32s ያስፈልግዎታል።

ሌላ የ ESP ቦርዶች ወይም አርዱዲኖዎች ካሉዎት እንኳን አይጨነቁ !!! እንደ አርዱዲኖ ፣ ESP NodeMCU ፣ ESP32s ወዘተ የመሳሰሉትን የእርስዎን አርዱዲኖ አይዲኢ እና ውቅረት በእድገት ሰሌዳዎችዎ መሠረት ማቀናበር አለብዎት።… ዲጂታል አክስሌሮሜትር የመለየት ሰሌዳ።

እና ጥቂት ዝላይ ገመዶች….

ደረጃ 6 - ግንኙነቶች

ግንኙነቶች
ግንኙነቶች

እና እዚህ አቀማመጥ አለ።

እኔ ከላይ ያለውን ሞጁል ወደ የእኔ Nodemcu-32s ሞዱል የሚከተለውን ግንኙነት ተጠቅሜያለሁ።

ESP32s - ሞዱል

3v3 - ቪን

ጂንዲ - ጂንዲ

SDA 21 - SDA

SCL 22 - SCL

ያስታውሱ ፣ አብዛኛውን ጊዜ ሁሉም የልማት ቦርዶች (በአብዛኛው በኢኤስፒዎች ውስጥ) የትኞቹ ፒንዎች ጥቅም ላይ እንደዋሉ ለመወሰን የሚያግዝ ጥሩ ግልጽ ፒኖት የላቸውም !! ስለዚህ ከመገናኘቱ በፊት የትኞቹ ፒንዎች ለ SDA እና SCL እንደሆኑ ለመጠቀም የቦርድዎን ትክክለኛ ፒኖች ይለዩ። »

ደረጃ 7 ኮድ

ይህ የአዳፍሬው ቤተ -መጽሐፍት ይጠይቃል

ያውርዱ ፣ ይንቀሉ እና የምሳሌ አቃፊዎችን ያገኛሉ ፣ በአቃፊው ውስጥ በአርዱዲኖ አይዲኢ ውስጥ MMA8451demo ን ይክፈቱ እና እዚህ ይሂዱ…

ከመቆጣጠሪያዎ ጋር ለ MMA8451 ዳሳሽ በይነገጽዎ የሚከተለውን ኮድ ያያሉ

#ያካትቱ

#አካትት #አዳፍ ፍሬ_ኤምኤ8451 mma = አዳፍ ፍሬ_ኤምኤ8451 (); ባዶነት ማዋቀር (ባዶ) {Serial.begin (9600); Wire.begin (4, 5); / * i2c አውቶቡስን ከ SDA = D1 እና SCL = D2 ከ NodeMCU */ Serial.println («Adafruit MMA8451 ፈተና!») ጋር ይቀላቀሉ ፤ ከሆነ (! mma.begin ()) {Serial.println ("መጀመር አልተቻለም"); ሳለ (1); } Serial.println ("MMA8451 ተገኝቷል!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("ክልል ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } ባዶነት loop () {// የ ‹ጥሬ› ውሂቡን በ 14 ቢት ቆጠራ mma.read (); Serial.print ("X: / t"); Serial.print (mma.x); Serial.print ("\ tY: / t"); Serial.print (mma.y); Serial.print ("\ tZ: / t"); Serial.print (mma.z); Serial.println (); / * አዲስ የዳሳሽ ክስተት */ sensors_event_t ክስተት ያግኙ ፤ mma.getEvent (& ክስተት); / * ውጤቶቹን ያሳዩ (ማፋጠን የሚለካው በ m/s^2) */Serial.print ("X: / t"); Serial.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Serial.print (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * የአነፍናፊውን አቅጣጫ ያግኙ */ uint8_t o = mma.getOrientation (); መቀየሪያ (o) {ጉዳይ MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); ሰበር; መያዣ MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); ሰበር; መያዣ MMA8451_PL_PDF: Serial.println ("Portrait Down Front"); ሰበር; መያዣ MMA8451_PL_PDB: Serial.println ("Portrait Down Back"); ሰበር; መያዣ MMA8451_PL_LRF: Serial.println ("የመሬት ገጽታ ቀኝ ፊት"); ሰበር; መያዣ MMA8451_PL_LRB: Serial.println (“የመሬት ገጽታ ቀኝ ተመለስ”); ሰበር; መያዣ MMA8451_PL_LLF: Serial.println ("የመሬት ገጽታ ግራ ፊት"); ሰበር; መያዣ MMA8451_PL_LLB: Serial.println ("የመሬት ገጽታ ግራ ተመለስ"); ሰበር; } Serial.println (); መዘግየት (1000); }

አስቀምጥ ፣ አረጋግጥ እና ስቀል ……

ተከታታይ ማሳያውን ይክፈቱ እና እንደዚህ ያለ ነገር ያያሉ ፣ እኔ ስለ ተለያዩ ንባቦች ዳሳሹን እያንቀሳቀስኩ ነበር

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 ሜ/ሰ^2

የመሬት ገጽታ ግራ ግንባር

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 ሜ/ሰ^2

የቁም ወደላይ ፊት

ደህና ፣ ሁሉም ነገር እንደፈለገው ከሄደ ታዲያ አሁን የ I2C እና መሣሪያዎን እንዴት እንደሚያገናኙ መሰረታዊ ነገሮች አለዎት።

ግን መሣሪያው አይሰራም

በሚቀጥለው ደረጃ ብቻ ይሂዱ ……

ደረጃ 8 የእርስዎ I2C መሣሪያ እንዲሠራ ያድርጉ።

I2C መሣሪያ ሥራ ለማግኘት መሠረታዊ ደረጃዎች

እስቲ እንመርምር….

  • ሽቦው ትክክል ነው (እንደገና ይመልከቱት)
  • ፕሮግራሙ ትክክል ነው ((አዎ ፣ የሙከራ ምሳሌ ነው..)

ለመፍታት በደረጃዎች ይጀምሩ…..

ደረጃ 1 የመሣሪያውን አድራሻ ለመፈተሽ የ I2C መሣሪያ ስካነር ፕሮግራምን ያሂዱ እና መጀመሪያ የእርስዎ I2C መሣሪያ እሺ ነው።

ንድፉን ማውረድ እና ውጤቱን ማረጋገጥ ይችላሉ።

ውጤት - መሣሪያው እየሰራ ነው እና የዳሳሽ አድራሻው ትክክል ነው

I2C ስካነር። በመቃኘት ላይ…

የተገኘ አድራሻ 28 (0x1C) ተከናውኗል። 1 መሣሪያ (ዎች) ተገኝቷል።

ደረጃ 2 - የአነፍናፊ ቤተ -መጽሐፍትን ይፈትሹ።

Adafruit_MMA8451.h ፋይልን ይክፈቱ እና የመሣሪያ አድራሻ ያግኙ

ውጤት - አድራሻ ከመሣሪያዬ ይለያል ??

/*====================================================== ========================= I2C አድራሻ/ቢትስ --------------------- -------------------------------------------------- ** ============================================== */

ያድርጉ - ፋይልን ከማስታወሻ ደብተር (አድራሻ ይለውጡ) + IDE ን ያስቀምጡ / እንደገና ያስጀምሩ

ይሠራል። ንባቦችዎን ማግኘት ይችላሉ።

አይደል….. ???

ደረጃ 3: Wire.begin ይፃፋል?

Adafruit_MMA8451.c ፋይልን ይክፈቱ እና Wire.begin ን ያግኙ።

ውጤት - ይህ መግለጫ ተፃፈ

/*************************************************** ************************* //*! @አጭር ቅንጅቶች HW (የተባባሪ እሴቶችን ያንብቡ ፣ ወዘተ)* / / ********************************* ****************************************/ bool Adafruit_MMA8451:: ጀምር (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

ያድርጉ - ፋይልን ከማስታወሻ ደብተር (የአስተያየት መግለጫ) + አስቀምጥ + IDE ን እንደገና ያስጀምሩ

እና በመጨረሻም መሣሪያ እየሰራ ነው…

እኔ ይህንን አጋዥ ስልጠና እጭንበታለሁ ምክንያቱም ዋናው ግቡ እንዴት ማስጀመር ፣ መረጃን ከውሂብ ሉህ ማግኘት ፣ I2C መሣሪያን በጣም መሠረታዊ በሆነ ምሳሌ እየሰራ መሆኑን መግለፅ ነበር።

የሚመከር: