ዝርዝር ሁኔታ:

I2C አውቶቡስ ለ ATtiny እና ATmega: 8 ደረጃዎች
I2C አውቶቡስ ለ ATtiny እና ATmega: 8 ደረጃዎች

ቪዲዮ: I2C አውቶቡስ ለ ATtiny እና ATmega: 8 ደረጃዎች

ቪዲዮ: I2C አውቶቡስ ለ ATtiny እና ATmega: 8 ደረጃዎች
ቪዲዮ: SKR 1.4 - I2C BlinkM 2024, ሀምሌ
Anonim
I2C አውቶቡስ ለ ATtiny እና ATmega
I2C አውቶቡስ ለ ATtiny እና ATmega

የ Atmel AVR ማይክሮ መቆጣጠሪያዎችን እወዳለሁ! በዚህ አስተማሪ ውስጥ የተገለጸውን የጌቶ ልማት ስርዓት ከመገንባቴ ጀምሮ ፣ በ AVR ATtiny2313 እና በተለይ ATmega168 ን በመሞከር የማዝናናት መጨረሻ አልነበረኝም። ሌላው ቀርቶ መቀያየሪያዎችን እንደ ግብዓት የመጠቀም መመሪያን ለመፃፍ እንኳን የሄድኩ ሲሆን የጌቶ ልማት ስርዓት ጽንሰ -ሀሳብን ወደ ሲ.ፒ.ዲ. ሰሞኑን በፕሮጀክት ጊዜ የቁጥጥር እሴቶችን ለማቀናበር በርካታ መቀያየሪያዎች ያስፈልጉኝ ነበር። AVR ዎች በቂ የ I/O ፒኖች አልነበሯቸውም ፣ ስለዚህ አንድ ነገር ማሰብ ነበረብኝ። በቁልፍ ሰሌዳ እና በማሳያ የተወሳሰበ የግብዓት ስርዓት መሞከር እችል ነበር ፣ ግን ATtiny2313 ሀብቶች አልቀዋል። እንደ እድል ሆኖ ፣ Atmel ወደ ቀላል ቺፕስ (እንደ ማህደረ ትውስታ ወይም እኔ/ኦ ወደቦች ያሉ) በቀላል ሁለት ሽቦ በይነገጽ ሊያገናኝ የሚችል በይነገጽ በማካተት በዚህ ችግር ዙሪያ መንገድን ሰጥቷል። ልክ ነው ፣ በ AVR ላይ ሁለት የ I/O ፒኖችን ብቻ በመጠቀም ብዙ ተጨማሪ የ I/O ፒኖችን እና ሌሎች ሀብቶችን መድረስ እንችላለን። ይህ ሁለት የሽቦ በይነገጽ በይነ-የተቀናጀ የወረዳ አውቶቡስ ወይም I2C አውቶቡስ በመባል የሚታወቅ ሲሆን አሁንም ፊሊፕስ ሴሚኮንዳክተሮች በነበረበት ጊዜ በ NXP ተፈለሰፈ። ይህንን መመሪያ የሚያነቡ ከሆነ ምናልባት ስለ I2C አውቶቡስ ሰምተው ምናልባትም በፒአይሲ ወይም በሌላ ማይክሮ መቆጣጠሪያ ላይ ይጠቀሙበት ይሆናል። በፅንሰ -ሀሳብ በጣም ቀላል እና በ AVR ዎች ላይ በሃርድዌር ሀብቶች የተደገፈ ቢሆንም የሶፍትዌር ነጂዎች አሁንም I2C አውቶቢስን ለመጠቀም አስፈላጊ ናቸው። Atmel የመተግበሪያ ማስታወሻዎችን ይሰጣል (በዚህ አስተማሪ ውስጥ ያሉትን ሀብቶች በኋላ ይመልከቱ) ፣ ግን እነዚህ ያልተሟሉ ናቸው እና ከሌላ የኤቪአር መሣሪያ ጋር ከመነጋገር ባሻገር ምንም ምሳሌዎችን አያሳዩ። የ I2C ነጂዎችን እንዴት ለራሱ መፍጠር እንደሚቻል ለማስተማር የዚህ አስተማሪ ዓላማ አይደለም። AVR ዎች። ይልቁንም ፣ ለ ATtiny2313 እና ATmega168 መሣሪያዎች የተስፋፉ የአትሜል ነጂዎችን ስሪቶች አቀርባለሁ ፣ እነዚህን በሚጠቀሙበት ጊዜ የሚተገበሩትን መስፈርቶች እና ገደቦች እገልጻለሁ ፣ እና የ I2C መሣሪያዎች የሥራ ምሳሌዎችን አሳያችኋለሁ። በዚህ አስተማሪነት ከሠሩ በኋላ በ AVR ፕሮጄክቶችዎ ውስጥ የ I2C አውቶቡሱን በተሳካ ሁኔታ መጠቀም ይችላሉ። በግልጽ ለማየት እንደሚቻለው ፣ ለእነሱ በአንዱ ብቻ ፍላጎት ካሎት አሽከርካሪዎቹን ለጥቃቅን ወይም ለሜጋ ችላ ማለት ይችላሉ። ስለ I2C አውቶቡስ የበለጠ ለማወቅ ፍላጎት ላላቸው ፣ ለተገቢው ቁሳቁስ አገናኞችን እሰጣለሁ።

ደረጃ 1 - ይህ ሁሉ የ I2C ነገሮች ምንድናቸው?

ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?
ይህ ሁሉ የ I2C ነገር ምንድነው?

የ I2C አውቶቡስ ብዙ መሣሪያዎችን በአንድ ላይ ማገናኘት እና ውሂብ እንዲለዋወጡ የሚያስችል ቀላል ፣ ባለ ሁለት ሽቦ ግንኙነት ነው። በጣም ቀላል በሆነ መልኩ ከብዙ የባሪያ መሣሪያዎች ጋር የሚገናኝ አንድ ዋና መሣሪያ አለ። ሁሉም መሣሪያዎች ከ I2C አውቶቡስ ሁለት ሽቦዎች ጋር በትይዩ ተገናኝተዋል። ሁለቱ ሽቦዎች SCL እና SDA በመባል ይታወቃሉ። SCL የሰዓት መስመር ሲሆን በዋናው መሣሪያ ቁጥጥር ይደረግበታል። ኤስዲኤ ሁለት አቅጣጫዊ የመረጃ መስመር ነው። መረጃን ለማስተላለፍ ጌታው ከአንድ የንባብ/የመፃፍ ባንዲራ ጋር ተጣምሮ የባሪያ አድራሻ ይልካል። መጻፍ ከተፈለገ ጌታው ለተላከው ባሪያ መረጃ መላክን ይቀጥላል። ንባብ ከተጠየቀ ባሪያው በመረጃ ይመልሳል። ግብይቶችን ለማቀናጀት ፣ የ SCL እና SDA መስመሮች በጌታው እና በባሪያው ላይ በርካታ ሁኔታዎችን ለማሳየት ያገለግላሉ። እነዚህ START ፣ STOP ፣ ACK (እውቅና መስጠት) እና NAK (ዕውቅና የለም) ያካትታሉ። የእነዚህ ሁኔታዎች ዝርዝሮች በአሽከርካሪዎች ይያዛሉ። በመካከላችሁ ያሉት እውነተኛ ጂኮች በዚህ ዝርዝር መጨረሻ ላይ በተሰጡት አገናኞች ውስጥ ሁሉንም ዝርዝሮች መማር ይችላሉ። የኤሌክትሪክ መስፈርቶች በጣም ቀላል ናቸው። ጌታው እና ባሮቹ ለቪሲሲ ተመሳሳይ ደረጃን መጠቀም አለባቸው ፣ መሬቶቹ መገናኘት አለባቸው ፣ እና የ SCL እና SDA መስመሮች እስከ ቪሲሲ ድረስ መጎተት አለባቸው። የመጎተቻው ተቆጣጣሪዎች ዋጋ በአውቶቡሱ ላይ ባለው አጠቃላይ አቅም ላይ በመመሥረት በትክክል የሚወሰን ነው ፣ ግን በተግባር በ 1.8 ኪ እና በ 10 ኪ መካከል መካከል ማንኛውም ዋጋ ሊሆን ይችላል። እኔ በ 5.1 ኪ እጀምራለሁ እና እስኪሠራ ድረስ ዝቅተኛ እሴቶችን እጠቀማለሁ። በመሳሪያዎች መካከል ብዙ መሣሪያዎች ወይም ረጅም ርዝመቶች ከሌሉዎት ይህ ብዙውን ጊዜ ችግር አይደለም። በ I2C አውቶቡስ ላይ ያለው የውሂብ መጠን 100 ኪባ/ሰከንድ ነው። የ 400Kbits/ሰከንድ ፣ 1 ሜቢት/ሰከንድ ፣ እና ከዚያ በላይ ተመኖች እንዲሁ ይቻላል ፣ ግን በዚህ መመሪያ ውስጥ በአሽከርካሪዎች አይደገፉም። ሁሉም የ I2C መሣሪያዎች በ 100Kbits/ሰከንድ ይሰራሉ። ATtiny2313 እና ATmega168 እያንዳንዳቸው I2C አውቶቡስን በተለየ መንገድ ይተገብራሉ። ATtiny2313 ሁለንተናዊ ተከታታይ በይነገጽ (USI) ሃርድዌርን ይጠቀማል - ለ SPI አውቶቡስም ሊያገለግል ይችላል። ATmega168 ሁለት ሽቦ በይነገጽ (TWI) በመባል ለሚታወቀው ለ I2C አውቶቡስ የወሰነ ሃርድዌር አለው። ሾፌሮቹ አንዴ ከተጻፉ ፣ እነዚህ ልዩነቶች በአብዛኛው ለተጠቃሚው ግልፅ ናቸው። አንድ ጉልህ ልዩነት በሶፍትዌሩ ውስጥ ነው - የ ATmega168 I2C ነጂ ለ ATtiny2313 ባይሆንም ይስተጓጎላል። ይህ ማለት የ ATmega168 ፕሮግራም የ I2C የውሂብ ዝውውሮች እንዲከናወኑ መጠበቅ የለበትም ፣ ግን ሌላ ማስተላለፍ ከመጀመሩ በፊት ወይም መረጃ ከተነበበ አሠራር እስኪመጣ ድረስ ብቻ መጠበቅ አለበት። የሚከተሉት ምሳሌዎች እና ውይይቶች ይህንን ግልፅ ማድረግ አለባቸው። የ I2C አድራሻዎች 7 ቢት ርዝመት አላቸው ፣ ስለዚህ እያንዳንዳቸው ልዩ አድራሻ ካላቸው እስከ 127 መሣሪያዎች በአውቶቡስ ላይ ሊሆኑ ይችላሉ። በስዕሉ ላይ እንደሚታየው ይህ የ 7 ቢት አድራሻ አንድ ጥቂቱን ወደ ግራ ይቀይራል እና ትንሹ ጉልህ ቢት በአድራሻው ላይ የመሣሪያውን ንባብ ወይም መጻፍ ለመጠቆም ያገለግላል። ስለዚህ የተሟላ የባሪያ አድራሻ 8 ቢት ነው። ትክክለኛው አድራሻ በከፊል በመሣሪያው ውስጥ ተወስኗል እና ሊቀየር አይችልም (4 በጣም ጉልህ ቢት) ፣ እና በከፊል ከፍ ወይም ዝቅ ለማድረግ ሊታሰሩ ከሚችሉ የመሣሪያ ካስማዎች (3 ቢያንስ ጉልህ ቢቶች) ጋር ሊገናኙ በሚችሉ ቢቶች ተወስኗል። የተወሰነ አድራሻ። ግራ የሚያጋባ ይመስላል ፣ ግን አንድ ምሳሌ ይህንን ግልፅ ያደርገዋል። የ PCA8574A የውሂብ ሉህ የሚያሳየው I2C አድራሻው አራቱ በጣም ጉልህ ቢቶች ሁል ጊዜ 0111 ይሆናሉ። ቀጣዮቹ ሶስት ቢቶች በፒን AD0 ፣ AD1 እና AD2 ላይ ባሉት ቅንብሮች ይወሰናሉ። እነዚህ ካስማዎች 0 ወይም 1 ን ለመወከል ከመሬት ወይም ከአዎንታዊ የቮልቴጅ አቅርቦት (5 ቮልት) ጋር ሊታሰሩ ይችላሉ። ስለዚህ ከ PCA8574 የመረጃ ሉህ በሌላ አኃዝ እንደሚታየው ሊሆኑ የሚችሉ አድራሻዎች ክልል ከ 38 እስከ 3 ኤፍ ሄክሳዴሲማል ነው። ስለዚህ የአድራሻ ቢት ቅንብሮችን በመቀየር እስከ 8 PCA8574As በ I2C አውቶቡስ ላይ በተመሳሳይ ጊዜ ሊሆን ይችላል። እያንዳንዳቸው ለተለየ የባሪያ አድራሻ ብቻ ምላሽ ይሰጣሉ። ብዙ I/O ወደቦች ቢያስፈልግ ፣ PCA8574 ጥቅም ላይ ሊውል ይችላል። በ PCA8574 እና በ PCA8574A መካከል ያለው ብቸኛው ልዩነት የ PCA8574 የ I2C ባሪያ አድራሻ ክልል ከ 20 እስከ 27 ሄክሳዴሲማል ነው። አንዳንድ የውሂብ ሉሆች የንባብ/የመፃፍ ቢት የአካሉ አካል አድርገው ስለሚቆጥሩት ግራ የሚያጋባ ሊሆን ይችላል። አድራሻ። የውሂብ ወረቀቱን በጥንቃቄ ያንብቡ እና የባሪያው አድራሻ 7 ቢት ርዝመት እንደሚኖረው ያስታውሱ። የንባብ/የመፃፍ ቢት በተናጠል መታከም አለበት። እንደገና ፣ አንድ ምሳሌ ይረዳል። እኛ የምንሞክረው ለ 24C16 EEPROM የውሂብ ሉህ የመጀመሪያው (በጣም ጉልህ) የባሪያ አድራሻ አራት ቢት 1010 ነው ይላል። ቀጣዮቹ ሶስት ቢቶች በ A0 ፣ A1 እና A2 ሊወሰኑ ይችላሉ። ነገር ግን የውሂብ ሉህ 24C01 እስከ 24C08 ን የሚሸፍኑትን አነስተኛ መጠን ያላቸውን EEPROMs ይሸፍናል። ከመረጃ ወረቀቱ ላይ ያለው አኃዝ መጠኑ እየጨመረ ሲሄድ የእነዚህ የአድራሻ ቢት ቅንጅቶች ችላ እንደተባሉ እና ለ 24C16 ሙሉ በሙሉ ችላ እንደተባሉ ያሳያል። ያ ማለት ፣ የመጨረሻዎቹ ሶስት ቢት ምንም ፋይዳ የለውም እና 24C16 በእውነቱ ሁሉንም የ I2C ባሪያ አድራሻዎችን ከ 50 እስከ 57 ሄክሳዴሲማል ይጠቀማል። የባሪያ አድራሻዎች ክልል በእውነቱ በ 24C16 ውስጥ የተለያዩ ክፍሎችን ያነጋግራል። የመጀመሪያዎቹ 256 ባይት በአድራሻ 50 ሰዓት ፣ ቀጣዩ 256 በ 51 ሰዓት ፣ እና እስከ መጨረሻው 256 በ 57 ሰዓት - በጠቅላላው 2 ኪ ባይት። እኛ የምንሞክረው የ PCF8570 ራም አድራሻ በዚህ ክልል ውስጥ ስለሆነ 24C16 እና PCF8570 አብረው ጥቅም ላይ መዋል አይችሉም።

ደረጃ 2 - አንዳንድ የ I2C መሳሪያዎችን ያዝዙ

አሁን ስለ I2C አውቶቡስ ትንሽ የሚያውቁ እና ሊጠቀሙበት የሚፈልጉት ፣ ሶፍትዌሩን በሚያዘጋጁበት ጊዜ ወደ እርስዎ መንገድ ላይ እንዲሆኑ አንዳንድ የ I2C መሣሪያዎች አሁን እንዲሞክሩ ለምን ለምን አይታዘዙም? ተገቢ መሣሪያዎች I/ ያካትታሉ ኦ በይነገጽ ማስፋፊያ (የእኔ ተወዳጅ) ፣ የማይንቀሳቀስ ራም እና EEPROM። ብዙ ብዙ አሉ ፣ ግን እነዚህ በጣም ጥሩ ጅምር ናቸው። እኛ የምንጠቀምባቸው የ AVR ማቀነባበሪያዎች ATtiny2313 እና Atmega168 (በአርዱዲኖ ውስጥ ጥቅም ላይ የዋሉ) ናቸው። ለእነዚህ አዲስ ከሆኑ ፣ ስለእነሱ ለማወቅ እና የጌቶ ልማት ስርዓትዎን ለመገንባት ይህንን ታላቅ አስተማሪ ይመልከቱ። በአሁኑ Instructable ውስጥ የ ATmega168 ንድፈ -ሀሳብ ለዚህ አንጎለ ኮምፒውተር የጌትቶ ልማት ስርዓትን እንዴት መተግበር እንደሚቻል ያሳያል። ትይዩ ወደብ ገመድ ለ ATtiny2313 ካለው ጋር ተመሳሳይ ነው። (እኔ የጌቶቶ ልማት ሲስተም የዩኤስቢ ስሪት አልሞከርኩም ፣ ስለዚህ የ I2C አውቶቡስ በእሱ ላይ እንዴት እንደሚደርስበት እርግጠኛ አይደለሁም። ለአርዱዲኖ ተመሳሳይ ነው።) የዲጂኪ ክፍል ቁጥሮች እዚህ አሉ። ፖርት ማስፋፊያ - IC I2C I/O ማስፋፊያ 568-4236-5-NDRam: IC SRAM 256X8 W/I2C 568-1071-5-NDEEPROM: IC EEPROM SERIAL 16K CAT24C16LI-G-ND

ደረጃ 3: I2C ነጂዎች

ለ I2C አውቶቡስ የአሽከርካሪዎች ተግባራት መግለጫዎች እዚህ አሉ። እነዚህ ለጀማሪዎች የ Atmel መተግበሪያዎች ማስታወሻዎችን በመጠቀም ተገንብተዋል። እኔ ለመገንባት እንደ መሠረት እንደ እነርሱ ያለ እነሱ ይህንን ማድረግ አልቻልኩም። ልማት የተከናወነው WinAVR ን እና gcc C ኮምፕሌተርን በመጠቀም ነው። ለእያንዳንዱ ፕሮሰሰር የሰዓት ተመን ገደቦች ከዚህ በታች ተብራርተዋል። ሁሉንም የአቀነባባሪዎች ጣዕም / የሰዓት ተመን ጥምረቶችን ለመፈተሽ ስላልቻልኩ እኔ በእውነቱ ልሞክረው የምችለውን እቀበላለሁ እና ገደቦችን እና ገደቦችን ለማመልከት እሞክራለሁ። የአሽከርካሪዎች ተግባራት እና እነሱን እንዴት እንደሚጠቀሙ እነሆ። ለተጨማሪ ዝርዝሮች እባክዎን ምሳሌዎችን ይመልከቱ እና በተሟሉ ፕሮግራሞች ውስጥ ጥቅም ላይ የዋሉትን ተግባራት ለማየት። ለ ATtiny2313 የሰዓት መስፈርት - አሽከርካሪዎች ለ ATtiny2313 የሰዓት መጠን 1 ሜኸ (ነባሪ ተመን) የተነደፉ ናቸው። በሌሎች ተመኖች ላይ ለማሄድ ከፈለጉ ፣ ከዚያ በአሽከርካሪዎች ውስጥ ቋሚዎችን ማስተካከል ይኖርብዎታል። ይህንን ለማድረግ እርዳታ ከፈለጉ ኢሜል ያድርጉልኝ። በሃብት ደረጃዎች ውስጥ ባሉ አገናኞች ውስጥ ከአቴሜል ማስታወሻዎች ማስታወሻዎች አንዳንድ ፍንጮችን ማግኘት ይችላሉ። በፕሮግራምዎ መጀመሪያ ላይ አንድ ጊዜ ይደውሉለት። ባዶ ሆኖ ይመለሳል እና ምንም ክርክሮች የሉም ።USI_TWI_Get_State_Info () ይህ ተግባር የ I2C የስህተት መረጃን ይመልሳል እና በ I2C ግብይት ወቅት ስህተት ከተከሰተ ጥቅም ላይ ይውላል። ይህ ተግባር የስህተት ኮድን ብቻ ስለሚመልስ ፣ የስህተት LED ን ለማንፀባረቅ TWI_Act_On_Failure_In_Last_Transmission (TWIerrorMsg) የሚለውን ተግባር እጠቀማለሁ። የስህተት ኮዶች በ USI_TWI_Master.h ውስጥ ተገልፀዋል። እንዴት እንደሚደውሉ እነሆ- TWI_Act_On_Failure_In_Last_Transmission (USI_TWI_Get_State_Info ()) USI_TWI_Start_Read_Write () ይህ ተግባር ለ I2C መሣሪያዎች ነጠላ ባይት ለማንበብ እና ለመፃፍ ያገለግላል። እንዲሁም ብዙ ባይቶችን ለመፃፍ ያገለግላል። ይህንን ተግባር ለመጠቀም 6 ደረጃዎች አሉ ።1) የባሪያ አድራሻውን እና የተላከበትን ወይም የሚቀበለውን የውሂብ ባይት ለመያዝ በፕሮግራምዎ ውስጥ የመልእክት ቋት ያውጁ። ያልተፈረመ የቻር መልእክት ቡፍ (MESSAGEBUF_SIZE) ፤ 2) የባሪያ አድራሻውን በማጠራቀሚያው ውስጥ እንደ መጀመሪያ ባይት አድርገው። ወደ አንድ ትንሽ ግራ ይቀይሩት እና ወይም በንባብ/ፃፍ ቢት ውስጥ። ልብ ይበሉ/ያንብቡ/ይፃፉ ቢት ለንባብ 1 እና ለጽሑፍ 0 ይሆናል። ይህ ምሳሌ ለንባብ ነው። messageBuf (0) = (TWI_targetSlaveAddress << TWI_ADR_BITS) | (እውነት << TWI_READ_BIT); 3) አንድ ጽሑፍ በሚጽፉበት ጊዜ ፣ በአቅራቢው ውስጥ ወደሚቀጥለው ቦታ እንዲፃፍ ባይት ያስቀምጡ ።4) የመልዕክት ቋት እና የመልእክቱን መጠን እንደ ነጋሪ እሴት በመጠቀም ወደ USI_TWI_Start_Read_Write ተግባር ይደውሉ። ሙከራ = USI_TWI_Start_Read_Write (messageBuf ፣ 2) ፤ 5) The የተመለሰው እሴት (በዚህ ሁኔታ ውስጥ ያለው ቴምፕ) ስህተት ተከስቷል የሚለውን ለማየት መሞከር ይቻላል። ከሆነ ፣ ከላይ እንደተብራራው ይስተናገዳል። በፕሮግራሞቹ ውስጥ ምሳሌዎችን ይመልከቱ ።6) አንድ ንባብ ከተጠየቀ ፣ ባይት ንባቡ በማጠራቀሚያው ውስጥ በሁለተኛው ቦታ ላይ ይሆናል። ብዙ ባይት የሚፃፍ ከሆነ (እንደ የማስታወሻ መሣሪያ ያለ) ፣ ይህ ተመሳሳይ አሠራር ጥቅም ላይ ሊውል ይችላል። መጠባበቂያውን ማቀናበር እና መደበኛውን መደወል ትንሽ የተለየ ነው። በማቆያው ውስጥ ያለው ሁለተኛው ባይት የሚፃፍበት የመነሻ ማህደረ ትውስታ አድራሻ ይሆናል። የሚፃፈው ውሂብ በቀጣይ ባይት ይሆናል። የመልዕክት መጠኑ ሁሉንም ትክክለኛ ውሂብን ጨምሮ መጠኑ ይሆናል። ስለዚህ 6 ባይት የሚፃፍ ከሆነ ፣ የመልእክቱ መጠን 8 ይሆናል (የባሪያ አድራሻ + የማስታወሻ አድራሻ + 6 ባይት ውሂብ) ።USI_TWI_Start_Random_Read () ይህ ተግባር ከ I2C መሣሪያ ብዙ ባይት ለማንበብ ያገለግላል ፣ በተለምዶ ለ የሆነ ዓይነት ትውስታ። ይህንን ልማድ መጠቀም ከሁለት ልዩነቶች በስተቀር ከቀዳሚው አሠራር ጋር በጣም ተመሳሳይ ነው። ይህንን የዕለት ተዕለት ሥራ መደወል ሁል ጊዜ የንባብ ሥራን ያስከትላል። መልእክቱ መጠኑ 2 እና የባይት ብዛት የሚነበብ መሆን አለበት። ምንም ስህተቶች ካልተከሰቱ ፣ ውሂቡ ከሁለተኛው ቦታ ጀምሮ በመጠባበቂያ ውስጥ ይሆናል። ለ ATmega168: የሰዓት መስፈርት አሽከርካሪዎች ለኤቲሜጋ 168 የሰዓት መጠን ለ 4 ሜኸ የተነደፉ ናቸው። የምሳሌው ኮድ ይህንን የሰዓት ተመን እንዴት እንደሚያቀናብር ያሳያል። በሌሎች ተመኖች ላይ ለማሄድ ከፈለጉ ፣ ከዚያ በአሽከርካሪዎች ውስጥ ቋሚዎችን ማስተካከል ይኖርብዎታል። ይህንን ማድረግ ከፈለጉ ኢሜል ያድርጉልኝ። በፕሮግራምዎ መጀመሪያ ላይ አንድ ጊዜ ይደውሉለት። ባዶ ሆኖ ይመለሳል እና ምንም ክርክሮች የሉም። ከጀመሩ በኋላ ወደ swi () በመደወል ማቋረጫዎችን ማንቃትዎን ያረጋግጡ። TWI_Get_State_Info () ይህ ተግባር የ I2C የስህተት መረጃን ይመልሳል እና በ I2C ግብይት ወቅት ስህተት ከተከሰተ ጥቅም ላይ ይውላል። ይህ ተግባር የስህተት ኮድን ብቻ ስለሚመልስ ፣ የስህተት LED ን ለማንፀባረቅ TWI_Act_On_Failure_In_Last_Transmission (TWIerrorMsg) የሚለውን ተግባር እጠቀማለሁ። የስህተት ኮዶች በ TWI_Master.h ውስጥ ይገለፃሉ ፣ ግን በስህተት LED ላይ ምልክት ለማድረግ ተስተካክለዋል። ለዝርዝሮች የምሳሌ ኮዱን ይመልከቱ። እንዴት እንደሚደውሉ እነሆ - TWI_Act_On_Failure_In_Last_Transmission (TWI_Get_State_Info ()) የ I2C ግብይት መጠናቀቁን (ከዚህ በታች የተገለጸውን ተግባር) እና በመቀጠል በአለምአቀፍ ሁኔታ ቃል ውስጥ ትንሽ በመሞከር የስህተት ምርመራ መደረጉን ልብ ይበሉ። ሁለት ተግባራት ከላይ ከተገለጹት ተጓዳኝ ተግባራት ጋር ተመሳሳይ ይሰራሉ ፣ ግን ከጥቂቶች በስተቀር ፣ ምንም የስህተት እሴቶችን አይመልሱም ፣ የውሂብ ንባብ ወደ ቋት ውስጥ አይተላለፍም። ይህንን ማድረግ ቀጥሎ በተገለፀው ተግባር ይከናወናል። TWI_Start_Random_Read ን ሲደውሉ ፣ መጠኑ መጠን የተጠየቀው የውሂብ ባይት ብዛት አንድ ሳይሆን ሁለት መሆን አለበት። ለ ATmega168 የ I2C ሾፌር ይቋረጣል። ያ ማለት ፣ I2C ግብይቶች ተጀምረው ከዚያ በኋላ ዋናው ሥራ መሄዱን በሚቀጥልበት ጊዜ በተናጥል ይፈጸማሉ። ዋናው የዕለት ተዕለት ተግባር ከጀመረው ከ I2C ግብይት ውሂብ ሲፈልግ ፣ ውሂቡ የሚገኝ መሆኑን ለማየት ማረጋገጥ አለበት። ስህተትን ለመፈተሽ ሁኔታው ተመሳሳይ ነው። ስህተቶች ከመፈተሽ በፊት የ I2C ግብይት መጠናቀቁን ዋናው የዕለት ተዕለት ሥራው እርግጠኛ መሆን አለበት። የሚቀጥሉት ሁለት ተግባራት ለእነዚህ ዓላማዎች ያገለግላሉ። TWI_Transceiver_Busy () ስህተቶችን ከመፈተሽ በፊት የ I2C ግብይት ተጠናቅቆ እንደሆነ ለማየት ይህንን ተግባር ይደውሉ። የምሳሌ መርሃ ግብሮች ይህንን እንዴት እንደሚጠቀሙበት ያሳያሉ። TWI_Read_Data_From_Buffer () ይህንን ተግባር ከ I2C ሾፌር የመቀበያ ቋት ወደ መልእክት ቋት ለማስተላለፍ ይህንን ተግባር ይደውሉ። ይህ ተግባር ውሂቡን ከማስተላለፉ በፊት የ I2C ግብይት መጠናቀቁን ያረጋግጣል። አንድ እሴት በዚህ ተግባር ሲመለስ ፣ የበለጠ አስተማማኝ ለመሆን ስህተቱን በቀጥታ መፈተሽ አግኝቻለሁ። እንዴት እንደሚደውሉ እነሆ። የመልእክቱ መጠን ከሚፈለገው የውሂብ ቢት ብዛት አንድ የሚበልጥ መሆን አለበት። ውሂቡ ከመልዕክት ቡፍ ከሁለተኛው ሥፍራ ይጀምራል። ሙከራ = TWI_Read_Data_From_Buffer (messageBuf ፣ messageSize) ፤

ደረጃ 4 - እንገንባ

እንገንባ!
እንገንባ!
እንገንባ!
እንገንባ!
እንገንባ!
እንገንባ!
እንገንባ!
እንገንባ!

ፋይሉን I2C Schematics.zip ን በማውረድ ይጀምሩ። መርሃግብሮችን እና ምሳሌ የፕሮግራም ፋይሎችን ለመያዝ በስራ ቦታዎ ውስጥ የ I2C አቃፊ መፍጠር ይፈልጉ ይሆናል። ንድፎችን በዚህ ማውጫ ውስጥ ይንቀሉ። I2C Schematics የተባለ አቃፊ ያገኛሉ። ጥቃቅን I2C.pdf የተባለውን ፋይል ይክፈቱ። ይህ ንድፈ -ሀሳብ ATtiny2313 Ghetto Development System ን እና PCA8574A I/O Port Expander (በዙሪያው ያለው ትልቅ የተሰበረ ሳጥን አለው) ያሳያል። የፖርት ማስፋፊያ ወረዳ በዳቦ ሰሌዳ ላይ ተገንብቷል። እነዚህ ወረዳዎች ምን እንደሚመስሉ ለማየት ፎቶዎቹን ይመልከቱ። በእውነቱ በጣም ቀላል ናቸው። የአትቲኒ 2313 የእቅዱ ክፍል በሦስት ብልጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭ (ኤልኢዲ 1 ፣ 2 እና 3 ፣ በተጨማሪ R4 ፣ 5 እና 6) እና የግፊት አዝራር (S1) ተጣብቋል ፣ እና አንድ ተጨማሪ ዝርዝር። ያ ዝርዝር የ I2C አውቶቡስ ኤስ.ሲ.ኤል እና የ SDA መስመሮችን ግንኙነት ለመፍቀድ ሊወገዱ የሚችሉ የዘለላዎች (JP4 ፣ 5 እና 6) መጨመር ነው። መዝለያዎቹ ለፕሮግራም ቦታ መሆን አለባቸው ፣ ከዚያ SCL እና SDA እንዲገናኙ ተወግደዋል። ፎቶዎቹ ዘለላዎችን በቦታው ያሳያሉ እና ተወግደዋል። የእነዚህ መዝለያዎች አቀማመጥ በእርስዎ ላይ ነው ፣ እርስዎ የ I2C አውቶቡስን ለመጠቀም ከፈለጉ በጌቶ ልማት ስርዓትዎ ላይ ብቻ ማስቀመጥ አለብዎት። የ I2C አውቶቡስ ግንኙነቱ ተቋርጦ መዝለሎቹ ለፕሮግራም ቦታ መቀመጥ አለባቸው። ለ I2C አውቶቡስ ከ JP4 እና ከ JP6 ጋር ብቻ መጨነቅ እንዳለብዎት ልብ ይበሉ። እርስዎ የ SPI አውቶቡስን ለመጠቀም ይፈልጋሉ ብለው የሚያስቡ ከሆነ JP5 ን ያስገቡ። PCA8574A I/O Port Expander ን ዳቦርድ ማድረግ በጣም ቀላል ነው። Vcc (+5 ቮልት) እና Gnd (መሬት) ግንኙነቶችን ያቅርቡ እና AD0 ፣ 1 እና 2 ን ከመሬት ጋር ያገናኙ (የ I2C ባሪያ አድራሻ 38 ሄክስ ያደርገዋል)። ከዚያ 4 ብልጭ ድርግም የሚሉ መብራቶችን እና 4 DIP መቀያየሪያዎችን ያገናኙ። (የ DIP መቀያየሪያዎች ከሌሉዎት ሽቦዎችን ብቻ መጠቀም ይችላሉ። መሬት ላይ ማሰር ወይም በቅደም ተከተል ምልክት ወይም ማጥፋት እንዲንሳፈፍ ተንሳፋፊውን ይተዉት።) በመጨረሻም ፣ ከ SDA እና SCL ወደ Vcc የሚጎትቱ ተከላካዮችን (R11 እና 12) ያገናኙ። እነዚህ እንደ 3.3 ኪ ይታያሉ ፣ ግን ከ 1.8 ኪ እስከ 5.1 ኪ የሆነ ማንኛውም እሴት መስራት አለበት (ምናልባት እስከ 10 ኪ.ሜ ድረስ ግን አልሞከርኩም)። አንዴ ATtiny2313 ን ፕሮግራም ካደረጉ በኋላ መዝለያዎቹን ያስወግዱ እና SDA እና SCL ን ለሙከራ ማገናኘት ይችላሉ። አሁን ለ ATmega168። እዚህ ያለው ብቸኛው መጨማደዱ ለዚህ ፕሮሰሰር የጌቶ ልማት ስርዓት አልገነቡ ይሆናል። እንደዚያ ከሆነ ፣ እኔ ያቀረብኩት መርሃግብር (MEGA I2C.pdf) እንዴት እንደሆነ ያሳየዎታል። ይህ የ ATtiny2313 ስሪት መተላለፊያ ብቻ ነው። አስቀድመው ካቀዱ የፕሮግራም ገመድዎ ከሁለቱም ስርዓቶች ጋር የሚስማማ መሆኑን ማረጋገጥ ይችላሉ። ዋናው ልዩነት C2 እና C3 መደመር ነው። ለእነዚህ ምደባ ሥዕሎችን ይመልከቱ ፣ እነሱ ወደ ቺፕ በጣም ቅርብ መሆን አለባቸው ፣ ከመካከላቸው አንዱ በእውነቱ ቺፕ ስር ነው። እነዚህ ጫጫታ ከአናሎግ ወደ ዲጂታል መለወጫ በተለይ እንዲቆይ ይረዳሉ። በዚህ ቺፕ ላይ ለ I2C አውቶቡስ አስፈላጊ ስላልሆኑ የ SPI አውቶቡስን ለመጠቀም ካላሰቡ በስተቀር መዝለሎቹን ማስገባት አያስፈልግዎትም። PCA8754A የዳቦ ሰሌዳ የማይለወጥ መሆኑን ልብ ይበሉ። እርስዎ SDA ን እና SCL ን ብቻ ያያይዙ እና እርስዎ ይሂዱ! ቀላል ፣ huh?

ደረጃ 5 - ኮድ እና እንሞክር

ኮድ እና ሙከራ እናድርግ!
ኮድ እና ሙከራ እናድርግ!
ኮድ እና ሙከራ እናድርግ!
ኮድ እና ሙከራ እናድርግ!
ኮድ እና ሙከራ እናድርግ!
ኮድ እና ሙከራ እናድርግ!

ሾፌሮችን እና ምሳሌ ፕሮግራሞችን ለመገንባት ጊዜው አሁን ነው። እኛ በሠራነው ATtiny2313 እና በ PCA8574A የዳቦ ሰሌዳ እንጀምራለን። I2C.zip ን ፋይል ወደ የእርስዎ I2C የሥራ ማውጫ ያውርዱ እና ይንቀሉት። I2C የሚባል አዲስ አቃፊ ይኖርዎታል። በእሱ ውስጥ USI I2C (ለ ATtiny2313) እና TWI I2C (ለ ATmega168) ያገኛሉ። በ USI I2C ውስጥ የ I_O Port አቃፊን ያገኛሉ። ያ አቃፊ ለመጀመሪያው ምሳሌ ፕሮግራማችን እና ለ USI I2C አሽከርካሪዎች ኮዱን ይይዛል። WinAVR ን በመጠቀም ኮዱን ወደ ATtiny2313 ያጠናቅሩ እና ይጫኑት። ጥልቅ እስትንፋስ ይውሰዱ እና ኃይሉን ያብሩ። የሚጠብቁት እዚህ አለ - ሲበራ ፣ በ ATtiny2313 ወደብ PD6 ላይ LED 1 ሁለት ጊዜ ያብራል። አዝራሩ በተጫነ ቁጥር መቀያየሪያዎቹ ይነበባሉ እና ቅንብራቸው ከ PCA8574A ጋር በተገናኙ LED ዎች ላይ ይታያል። የመቀያየሪያዎቹን እሴት ይለውጡ ፣ ቁልፉን ይጫኑ ፣ እና ኤልዲዎቹ መለወጥ አለባቸው። ሲሰራ የማየትን ደስታ እስኪያገኙ ድረስ ይህንን ማድረጉን ይቀጥሉ። (እግዚአብሔር አይከለክል!) ነገሮች እንደተጠበቀው ካልሠሩ ፣ ሽቦዎን በጥንቃቄ ይፈትሹ። የ I2C ስህተቶች በ LED3 (PD4) ላይ ብልጭ ድርግም ብለው ምልክት ይደረግባቸዋል እና ምናልባት SDA እና SCL ከትክክለኛዎቹ ፒኖች ጋር መገናኘታቸውን እና በትክክል መነሳታቸውን ማረጋገጥ አለብዎት ማለት ነው።ነገሮች አሁንም ካልሠሩ ፣ ስለ ማረም ለማወቅ የዚህን ክፍል ቀሪ ያንብቡ። አሁን ተመልሰው ኮዱን እንመልከት። ፋይሉን USI_I2C_Port.c ይክፈቱ። ለምሣሌ ፕሮግራም ይህ ኮድ ነው። (USI_TWI_Master.c እና USI_TWI_Master.h ነጂዎቹን ይዘዋል - የማወቅ ጉጉት ከሌለዎት ችላ ሊሏቸው ይችላሉ።) የእራስዎን የ I2C ትግበራዎች ለመምራት ምሳሌውን ይጠቀሙ። በአብዛኛው ፣ ፕሮግራሙ ቅንብሩን ጨምሮ የ I2C ነጂዎችን እንዴት ማስጀመር እና መጠቀም እንደሚችሉ ያሳያል። የባሪያ አድራሻውን እና የተቀረውን የመልእክት ቋት ፣ እና ውሂቡን ከእሱ ማውጣት። እንዲሁም አዝራሩን እንዴት እንደገለልኩ እና የጊዜ loop እንዳዋቀርኩ ያያሉ። ሊጠቀስ የሚገባው የፕሮግራሙ ጥቂት ዝርዝሮች አሉ። በወደብ ማስፋፊያ ላይ ወደ ኤልኢዲዎች ከመጻፉ በፊት ከመቀያየሪያዎቹ የተገኘው መረጃ የተገላቢጦሽ መሆኑን ልብ ይበሉ። እንዲሁም በፖርት ማስፋፊያ ላይ ያሉት የግብዓት ወደቦች በትክክል እንዲሠሩ ለማድረግ እንደ ከፍተኛ መፃፍ እንዳለባቸው ልብ ይበሉ። እነዚያ ዝርዝሮች በ PCA8574A የውሂብ ሉህ ውስጥ ተገልፀዋል። የውሂብ ወረቀቶችን ሁል ጊዜ በጥንቃቄ ያንብቡ! የበለጠ ፍላጎት ያለው ሁኔታዊ ማረም መጠቀም ነው። በፕሮግራሙ ፋይል መጀመሪያ አካባቢ መግለጫው // #DEBUG ን ይገልፃል እና በኮዱ ውስጥ የተረጨው #ifdef DEBUG መግለጫዎች ናቸው። DEBUG እስካልተገለጸ ድረስ (ሁለቱ ቁርጥራጮች መስመሩን አስተያየት እንዲሰጡ እና እንዳይገለፅ እስኪያደርጉት) ፣ ከ #ifdef እስከ #endif መግለጫዎች ውስጥ ያለው ኮድ አይሰበሰብም። ነገር ግን እርስዎ እንደሚጠብቁት ነገሮች ካልሠሩ ፣ #ዴፊን ዲቢቢ ባልተለመደበት ኮዱን እንደገና ያጠናቅቁ እና እንደገና ይጫኑት። በፕሮግራሙዎ አፈፃፀም ላይ ለመከተል እና ነገሮች የተሳሳቱበትን በትክክል ለማወቅ እርስዎን ለመርዳት በሚችሉባቸው በኤልዲዎች ላይ ብዙ ተጨማሪ ብልጭታዎችን ያገኛሉ። በእውነቱ ፣ ምን እንደሚከሰት ለማየት ይህንን እንዲሞክሩ እመክራለሁ። እርስዎ የሚመለከቱት በፕሮግራሙ በኩል እንደ አፈፃፀም ሂደት LED 2 (በ PD5 ላይ) ብልጭ ድርግም ይላል። ከመቀያየሪያዎቹ የተነበበው እሴት በፖርት ማስፋፊያ LED ዎች ላይ ከመታየቱ በፊት በ LED 1 (PD6) ላይ ብልጭ ድርግም ይላል። እነዚህን ኤልኢዲዎች በመጠቀም ፕሮግራሙ በሚሠራበት ጊዜ መከታተል መቻል አለብዎት።ከሚቀጥለው ከ ATmega168 ጋር እንሰራለን ፤ በ ATtiny2313 ላይ ፍላጎት ካሎት ብቻ ይህንን ክፍል ይዝለሉ። አሁንም ከእኔ ጋር? ጥሩ. ወደ TWI_I2C አቃፊ ይሂዱ ፣ የሥራ ማውጫዎን ወደ IO_Port ይለውጡ እና TWI_I2C_Port.c ን ወደ ATmega168 ያጠናቅሩ እና ይጫኑ። የ SDA እና SCL መስመሮችን ከ ATtiny2313 ያላቅቁ እና ከ ATmega168 ጋር ያገናኙዋቸው። መንጠቆ ኃይል እና መሬት ፣ እና ኃይል ከፍ ያድርጉ። ክዋኔው ተመሳሳይ መሆን አለበት! ደስታው እስኪያልቅ ድረስ ይጫወቱ ፣ ከዚያ ኮዱን እንመልከት። TWI_I2C_Port.c ን ይክፈቱ። ከስህተት አያያዝ እና የተቋረጡ ነጂዎችን ከማስተናገድ በስተቀር ኮዱ ከሞላ ጎደል ተመሳሳይ ነው። ልዩነቶች እዚህ አሉ - I2C አውቶቡስ በትክክል እንዲሠራ ሰዓቱ ወደ 4 ሜኸዝ መዘጋጀት እንዳለበት ልብ ይበሉ። ሴይ (); መግለጫው የ I2C ነጂዎችን ከጀመሩ በኋላ ማቋረጦችን ያበራል። ስህተቶችን ለመፈተሽ ፣ አንድ የተወሰነ ሁኔታ ቢት ተፈትኗል። በንባብ ጊዜ የተነበበውን መረጃ ወደ መልእክት ቋት ለማስተላለፍ የ TWI_Read_Data_From_Buffer ተግባር መጠራት አለበት። በሚጽፉበት ጊዜ ፣ (TWI_Transceiver_Busy ()) ስህተቶችን ከመፈተሽ በፊት ዝውውሩ መጠናቀቁን ለማረጋገጥ ጥቅም ላይ መዋል አለበት። እነዚህ የመጨረሻዎቹ ሁለት ተግባራት በአሽከርካሪዎች ገለፃ ላይ ከላይ ተገልፀዋል። ከዚህ ውጭ ኮዱ ከ ATtiny2313 ጋር በጣም ተመሳሳይ ነው። በዚያ ላይ ሙከራ ማድረግ ከፈለጉ ደበበ እንዲሁ ይሠራል።

ደረጃ 6: I2C ማህደረ ትውስታን መጠቀም

I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም
I2C ማህደረ ትውስታን በመጠቀም

I/O ወደብ ማስፋፊያ ለማንበብ እና ለመፃፍ የ I2C አውቶቡስን መጠቀምን ተምረናል ፣ አሁን ራም እና ኢኢአርፒኤም የ I2C ትዝታዎችን እንጠቀም። ዋናው ልዩነት ብዙ ባይት ከአንድ I2C ትእዛዝ ጋር ከትውስታዎች ሊነበብ ወይም ሊፃፍ ይችላል። ለእነዚህ ሙከራዎች ለመዘጋጀት ሃርድዌርን በትንሹ መለወጥ እና በዳቦ ሰሌዳው ላይ ሁለት አዳዲስ ወረዳዎችን መገንባት አለብን። እኛ አንዳንድ የማስታወሻ እሴቶችን ለማሳየት ስለምንጠቀምበት የወደብ ማስፋፊያ ወረዳውን ያቆዩ። የ DIP መቀያየሪያዎችን ከ PCA8574A ያስወግዱ እና በእነዚያ ካስማዎች ላይ ብልጭ ድርግም የሚሉ መብራቶችን ያስቀምጡ። በቂ ብልጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭብጦዎች ከሌለዎት በ P4 እስከ P7 ላይ ያሉትን ወደ P0 እስከ P3 ያንቀሳቅሱት። (የሚታዩ እሴቶች በጣም ትንሽ ናቸው።) አሁን የእቅዱን I2C Ram.pdf ይመልከቱ እና PCF8570 ን በዳቦ ሰሌዳው ላይ ያያይዙት። እንዲሁም ምስሉን ይመልከቱ። ፒን 7 ን ከቪሲሲ ጋር ማያያዝዎን ያረጋግጡ። ሽቦዎችን ለ SDA እና SCL ከ PCA8574A ያሂዱ። ምንም ተጨማሪ የመጎተት መከላከያዎች አያስፈልጉም። እርስዎ በ EEPROM ፍላጎት ካለዎት ፣ ያንን ወረዳም ለ I2C EEPROM.pdf ለ 24C16 በመጠቀም ይገንቡ ፣ ግን ምሳሌው ATmega168 ን እንደሚጠቀም ያስጠነቅቁ። ይህ ወረዳ በእርግጥ ቀላል ነው። ከላይ እንደተብራራው ፣ የአድራሻ ነጥቦቹ ችላ ሊባሉ ይገባል። ኃይልን እና መሬትን ብቻ ያያይዙ። ከራም ጋር ሙከራ ስላልጨረስን ገና SDA እና SCL ን አያገናኙ። የማስታወሻ ሙከራዎቻችንን ከ PCA8574A ወደብ ማስፋፊያ እና ከ PCF8570 ራም ጋር በተገናኘው ATtiny2313 እንጀምራለን። ፕሮግራሙ አንዳንድ ቁጥሮችን ወደ ራም ይጽፋል ፣ ከዚያ መልሰው ያንብቡዋቸው እና በፖርት ማስፋፊያ ላይ ያሳዩአቸው። የሥራ ማውጫዎን በ USI I2C ስር ወደ ራም ይለውጡ። USI_I2C_RAM.c ን ለማጠናቀር እና ለማውረድ የማድረጊያ ፋይሉን ይጠቀሙ። የ I2C የመንጃ ፋይሎች ቀደም ሲል ከተጠቀምናቸው ጋር ተመሳሳይ መሆናቸውን ልብ ይበሉ። ኃይልን ይንከባከቡ እና በ LED 1 (PD6) ላይ አንድ ብልጭ ድርግም ብለው ማየት አለብዎት። ውሂብ ለመጀመሪያዎቹ 4 ባይት ማህደረ ትውስታ ይፃፋል። አዝራሩን ይጫኑ እና ሁለት ባይቶች ተመልሰው ይነበባሉ እና ይታያሉ። በፖርት ማስፋፊያ (P0) ፣ አንድ ሁለት ሰከንድ ለአፍታ ፣ ከዚያ ሁለት የ LED መብራት (P0 እና P1) ላይ አንድ የ LED መብራት ማየት አለብዎት። ሌላ ሁለት ሰከንድ ለአፍታ ማቆም እና ኤልኢዲዎቹ ማጥፋት አለባቸው። ቅደም ተከተሉን እንደገና ለመጀመር አዝራሩን እንደገና ይጫኑ። ማረም ከላይ ከተገለፀው ዘዴ ጋር ተመሳሳይ ነው። እስቲ ኮዱን እንመልከት። USI_I2C_RAM.c ን ይክፈቱ። ከቀዳሚው ኮድ ጋር በጣም ተመሳሳይ መሆን አለበት። ዋናዎቹ ልዩነቶች የማንበብ እና የመጻፍ ትውስታ ዝርዝሮች ናቸው። በትክክል መጻፉን ከሚያደርገው ጥሪ በፊት የመልእክት ቋሚው የተጫነበትን መንገድ ይመልከቱ። የመጀመሪያው ባይት የንባብ/መጻፍ ቢት በተገቢው ሁኔታ የተቀመጠ የባሪያ አድራሻ ነው። ነገር ግን ቀጣዩ ባይት መረጃ መጻፍ የሚጀምርበት የማስታወሻ አድራሻ ነው። ከዚያ እኛ ከጠቀስነው አድራሻ ጀምሮ በቅደም ተከተል ወደ ማህደረ ትውስታ የሚጫነው ትክክለኛው የውሂብ ባይት ይመጣል። የመልእክቱን መጠን እንደ 6. እንገልፃለን ስለዚህ በአድራሻ 00 ላይ መጻፍ እንጀምራለን እና እሴቶችን 01 ፣ 03 ፣ 02 እና 06 ወደ ማህደረ ትውስታ ሥፍራዎች 00 ወደ 03 እንጽፋለን። ውሂቡን ከማህደረ ትውስታ ለመመለስ USI_TWI_Start_Random_Read ተግባርን መጠቀም አለብን። የመልእክት ቋሚው የባሪያውን አድራሻ በመጀመሪያው ባይት እና በሁለተኛው አድራሻ ውስጥ የመጀመሪያውን አድራሻ ያገኛል። ከዚያ ለማንበብ በባይቶች ብዛት ከተዋቀረው የመልእክት መጠን ጋር ተግባሩን ይደውሉ እና ያንብቡ። ንባብ/መጻፍ ቢት ምንም ፋይዳ እንደሌለው ልብ ይበሉ። የተመለሰው ውሂብ በመልዕክት ቋት ውስጥ በሁለተኛው ቦታ ይጀምራል። አንዴ ውሂቡ ከተነበበ በኋላ በወደብ ማስፋፊያ ላይ ለእይታ ይገለበጣል እና በእሴቶቹ መካከል ለአፍታ ቆም ብሎ በአንድ ባይት ይፃፋል። በመጨረሻም ፣ የወደብ ማስፋፊያ LED ዎች ጠፍተዋል። ወደ ወደብ ማስፋፊያ የሚጽፉት ቀደም ባሉት ምሳሌዎች ከተደረጉት ጋር ተመሳሳይ ናቸው። ለደስታ ፣ ከላይ እንደተገለጸው የ #ገላጭ ደባቡን መግለጫ ማቃለል እና ብዙ ብልጭ ድርግም የሚሉ LEDs ማየት ይችላሉ። ከሌላ ስኬታማ ሙከራ በኋላ በደስታ ተሞልቶ ፣ ወደ ATmega168 እና ወደ EEPROM እንሂድ። በ TWI I2C ስር የስራ ማውጫዎን ወደ EEPROM ይለውጡ። TWI_I2C_EEPROM.c ን ለማጠናቀር እና ለማውረድ የማድረጊያ ፋይሉን ይጠቀሙ። የ I2C ነጂ ፋይሎች ቀደም ሲል ለ PCA8574A ከተጠቀምናቸው ጋር ተመሳሳይ መሆናቸውን ልብ ይበሉ። ፕሮግራሙን ለመፈተሽ ፣ ATtiny2313 ን ያላቅቁ እና ATmega168 ን ያገናኙ። የ I2C አውቶቡሱን ወደ ራም ተጣብቆ ይተው እና ኃይል ይጨምሩ። ተጨማሪ መረጃ ስለምንጽፍ እና ስለምናነብ ውጤቱ የተለየ ነው። በ PD7 ላይ ያለው LED 1 በጅምር ላይ ብልጭ ድርግም ማለት አለበት። አዝራሩን ይጫኑ እና ውሂቡ ከማህደረ ትውስታ ተመልሶ ይነበባል እና ይታያል። በ PCA8574 ላይ ያሉት ኤልኢዲዎች የሚከተለውን ቅደም ተከተል ብልጭ ድርግም አለባቸው - P1 ፣ P0 & P2 ፣ (ሁሉም ጠፍተዋል) ፣ P0 & P1 ፣ P1 & P2። በመጨረሻም የወደብ ኤልኢዲዎች ሁሉም መጥፋት አለባቸው። ይህንን ለመድገም አዝራሩን እንደገና ይጫኑ። ኦህ ፣ ግን ቆይ ፣ ትላለህ። ይህ ፕሮግራም ለ EEPROM አይደለም? እኛ በተመሳሳይ I2C አድራሻ ላይ የማህደረ ትውስታ መሣሪያን ስለምንደርስ ፣ ተመሳሳይ ፕሮግራም ለራም እና ለ EEPROM ይሠራል። ኃይልን ዝቅ ያድርጉ እና SDA እና SCL ን ከራም ወደ EEPROM ያንቀሳቅሱ እና ፕሮግራሙን እንደገና ያሂዱ። እሱ በትክክል ተመሳሳይ መሆን አለበት። EEPROM እና ራም ተመሳሳይ አድራሻ ስለሚጋሩ በተመሳሳይ ጊዜ ከ I2C አውቶቡስ ጋር መገናኘት እንደማይችሉ ልብ ይበሉ። (በመካከላችሁ ያሉ ጎበዞች በራም ላይ ሊተገበሩ የሚችሉ የአድራሻ ነጥቦችን ለመለወጥ ያስቡ ይሆናል ፣ ግን ያ አሁንም አይሰራም። 24C16 ለራም ፕሮግራም ሊደረግ የሚችል የአድራሻዎችን ብሎክ ይጠቀማል።) እሺ ፣ ይህንን የመጨረሻ ፕሮግራም እንይ. TWI_I2C_EEPROM.c ን ይክፈቱ። ሊታወቅ የሚገባው የመጀመሪያው ነገር የተጠናቀቀውን 24C16 EEPROM እንዴት እንደሚይዙ ጠቁሜያለሁ። በ 8 የተለያዩ I2C የባሪያ አድራሻዎች በ 256 ባይት ቁርጥራጮች ሊደረስበት ይችላል። MEMORY_ADDR በ 50 ሄክሳዴሲማል ላይ እንደ መነሻ አድራሻ እንዴት እንደተገለጸ ይመልከቱ። ለዚህ ነው ራም የሰራው። ሌሎች የ 24C16 ብሎኮችን መድረስ ከፈለጉ ፣ እኔ እንደጠቆምኩ ሌሎች አድራሻዎችን ይጠቀሙ። ወደ ማህደረ ትውስታ ለመፃፍ እንዴት እንዳዋቀርኩ ይመልከቱ። በመጀመሪያ የንባብ/የመፃፍ ቢት ስብስብ ያለው የባሪያ አድራሻ በማጠራቀሚያ ውስጥ ይቀመጣል ፣ ከዚያ የ 00 መነሻ አድራሻ ፣ ከዚያ 16 ባይት ውሂብ። TWI_Start_Read_Write ተግባሩ ከመልዕክቱ መጠን ወደ 18. ከተዋቀረው ውሂቡን (እንደ ቀደመው) ለመፃፍ ይጠራል። አዝራሩ ሲጫን TWI_Start_Random_Read ን እና TWI_Read_Data_From_Buffer ን ተጠቅመን ውሂቡን መልሰን ለማንበብ እንጠቀማለን። እያንዳንዱ ሶስተኛ ባይት በወደብ ማስፋፊያ LEDs ላይ ይታያል። በመጨረሻ ፣ ቀጣዩን የአዝራር ቁልፍን ለመጠበቅ LED ዎች ጠፍተዋል። 16 ባይት ለመጻፍ ለምን እንደ መረጥኩ ትገረም ይሆናል። የውሂብ ወረቀቱን በጥንቃቄ ካነበቡ ፣ 24 ቢ 16 ተጨማሪ ባይት እየተላከ እንኳ 16 ባይት ባገኘ ቁጥር የመፃፍ ዑደት እንደሚያደርግ ያያሉ። ስለዚህ ያ ለመጠቀም ጥሩ ቁጥር ይመስል ነበር። ይህንን ለማሳደግ ከመረጡ የ MESSAGEBUF_SIZE መጠኑን መለወጥ ይኖርብዎታል። እንዲሁም በ TWI_Master.h ውስጥ TWI_BUFFER_SIZE የሚለውን እሴት መለወጥ ይኖርብዎታል። ይህ የሆነበት ምክንያት አሽከርካሪው በተቋረጠው የአገልግሎት አሠራር ለመጠቀም ከመልዕክት ቋት ውስጥ መረጃውን ስለሚገለበጥ ነው። እንኳን ደስ አላችሁ! አሁን በእራስዎ ፕሮጀክቶች ውስጥ የ I2C አውቶቡስን ለመጠቀም ዝግጁ ነዎት!

ደረጃ 7 የድር ሀብቶች

ለሙከራዎች ጥቅም ላይ የዋሉ ክፍሎች ወደ የመረጃ ቋቶች አገናኞች እዚህ አሉ። ሌላ ምንም ካላገኙ እነዚህን በእርግጠኝነት ማግኘት አለብዎት። ፖርት ExpanderRAMEEPROM የ I2C ፈጣሪ መሆን ፣ NXP (ፊሊፕስ) ብዙ ጥሩ ነገሮች አሉት። (እነሱ በዩአርኤሎቻቸው ውስጥ አራት ማዕዘን ቅንፎችን መጠቀም ይወዳሉ ፣ ስለዚህ እዚህ በትክክል ማካተት አልችልም። ይቅርታ።) ወደ I2C አካባቢ ለመድረስ ከምርቶች ዝርዝር ውስጥ በይነገጽ ይምረጡ። ወደ I2C ጣቢያቸው መድረስ ይችላሉ እና የሚያቀርቧቸውን የሁሉም የመረጃ ቋቶች እና የመተግበሪያዎች ማስታወሻዎች መዳረሻ። የ I2C አውቶቡስ መግለጫ እና ቴክኒካዊ ዝርዝሮች በተለይ እዚህ አሉ። Attiny2313 እና ATmega168 የውሂብ ስብስቦችን (የውሂብ መጽሐፍት?) ከአትሜል ያግኙ። የ Atmel ትግበራ ማስታወሻዎች እዚህ አሉ። AVR310 ን እና AVR315 ን ይመልከቱ። ኮዱን እንዲሁ ይያዙ። ለተጨማሪ ብዙ I2C ነገሮች እዚህ ይመልከቱ።

ደረጃ 8 - ለጊኮች ማስታወሻዎች

ዝርዝሩን ማወቅ ለሚፈልግ ለእውነተኛ ጂክ ፣ የአትሜል አፕሊኬሽንስ ማስታወሻዎች እና የመንጃ ኮድ ከተመለከቱ ሊታሰብባቸው የሚገቡ አንዳንድ ነገሮች እዚህ አሉ-- የ I2C መሣሪያን የማስተናገድ እና የማዘዝ ዘዴው የስለክቱ አካል አይደለም! ከባሪያ አድራሻው እና ከንባብ/መጻፍ ቢት በስተቀር ፣ ትዕዛዞች ፣ ሁነታዎች ፣ ወዘተ አልተገለፁም እና ለአንድ መሣሪያ የተወሰነ ናቸው። ይህንን በጣም ግልፅ ለማድረግ ፣ በአትሜል ምሳሌ ውስጥ ጥቅም ላይ የዋለው መርሃ ግብር ለዚያ ምሳሌ ብቻ የሚተገበር መሆኑን እና በጣም መደበኛ ያልሆነ መሆኑን ልብ ይበሉ- የዩኤስኤአይ ትግበራ ከ TWI ትግበራ በጥቂት አስፈላጊ መንገዶች ይለያል። + በዩኤስኤአይ አማካኝነት ሰዓት በሶፍትዌር ይሰጣል ፣ ከ TWI ጋር በቢት ተመን ጄኔሬተር ይሰጣል። + የዩኤስኤአይ ዘዴ ማቋረጫዎችን አይጠቀምም ፣ TWI ያደርጋል። የሜጋ ቤተሰብ (TWI ን በመጠቀም) ብዙ ሌሎች ነገሮችን ሊያደርግ ስለሚችል እና በ I2C ዝውውሮች ሊታለል ስለማይገባ ይህ የተወሰነ መጠን ያለው ስሜት ይፈጥራል። ለዩኤስኤአይ የተቋረጠ የሚነዳ ስሪት በእርግጥ ይቻላል ፣ በዚህ አስተማሪ ውስጥ አልተተገበረም። + የ USI ሃርድዌር ለ I2C አልተመቻቸም እና 8 ቢት ዝውውሮችን ብቻ ማስተናገድ ይችላል። ይህ ማለት ዘጠኙን ቢት (NACK ወይም ACK) ለመላክ ሁለት ዝውውሮች ያስፈልጋሉ ማለት ነው። የ TWI ሃርድዌር ይህንን በራስ -ሰር ያስተናግዳል። ይህ የዩኤስኤአይኤስ አሽከርካሪ አተገባበርን ትንሽ ውስብስብ ያደርገዋል። + ለ TWI የስህተት መለየት በሃርድዌር ውስጥ ይስተናገዳል። USI ነገሮችን በመጠኑ በሚያወሳስብ ሶፍትዌር ውስጥ አያያዝን ይጠይቃል። + የ TWI ሃርድዌር የወደብ ውቅረትን በቀጥታ ይቆጣጠራል። የዩኤስአይ ሃርድዌር ወደቡ ጥቅም ላይ ከመዋሉ በፊት የወደብ ቢት እንዲዋቀር ይጠይቃል። ይህንን ለዩኤስኤአይ በ Master_Initialize የዕለት ተዕለት ተግባር ውስጥ ያዩታል- Atmel ለ I2C አውቶቡስ መጎተቻዎች የ AVR ወደብ መጎተቻዎችን መጠቀም እንደሚቻል ይናገራል። ያ አቀራረብ ተግባራዊ የሚሆንበትን መንገድ አላሰብኩም። ሁለት የውጭ መከላከያን መጠቀም በጣም ቀላል ቀላል መርሃግብር ይመስላል ፣ ስለዚህ በዚህ ላይ ብዙ ጊዜ አላጠፋሁም።

የሚመከር: