ជាមួយ Arduino អាចបង្កើតគម្រោងមួយចំនួនធំ ដូចដែលអ្នកបានឃើញប្រសិនបើអ្នកអាន Hwlibre ការសរសេរកម្មវិធី microcontroller តាមរបៀបសាមញ្ញ។ ប៉ុន្តែក្នុងចំណោមការតភ្ជាប់អាណាឡូកនិងឌីជីថលនៃក្តារផ្នែករឹងឥតគិតថ្លៃនេះមានមួយចំនួនដែលនៅតែមិនទាន់ស្គាល់ខ្លះសម្រាប់អ្នកចាប់ផ្តើមដំបូងដូចជាសក្តានុពលពិតនៃការតភ្ជាប់ PWM អេសភីអេសអេសអ័រអេសអេសអេសអេសឬព្រីននៃច្រកសៀរៀលឬ ឡានក្រុង I2C ផ្ទាល់ខ្លួន។ ដូច្នេះជាមួយនឹងធាតុនេះយ៉ាងហោចណាស់អ្នកអាចដឹងអ្វីៗគ្រប់យ៉ាងដែលអ្នកត្រូវការពីអាយ។ ស៊ី។ អេ។
ជាមួយ ឡានក្រុង I2C អ្នកអាចភ្ជាប់និងប្រើឧបករណ៍ភាគីទីបីជាច្រើនដែលមានពិធីសារប្រភេទនេះដើម្បីទាក់ទងជាមួយក្តារ Arduino ។ រវាងពួកវាអ្នកអាចភ្ជាប់ឧបករណ៍វាស់ល្បឿនបង្ហាញបង្ហាញឧបករណ៍វាស់ត្រីវិស័យនិងសៀគ្វីរួមបញ្ចូលគ្នាជាច្រើនទៀតអរគុណចំពោះការច្នៃប្រឌិតរបស់ភីលហ្វី។
លិបិក្រម
តើអាយស៊ីស៊ីជាអ្វី?
I2C សំដៅទៅលើសៀគ្វីរួមបញ្ចូលគ្នានោះគឺសៀគ្វីអន្តរបញ្ចូលគ្នា។ វាគឺជាឡានក្រុងទំនាក់ទំនងទិន្នន័យទិន្នន័យដែលត្រូវបានបង្កើតឡើងក្នុងឆ្នាំ ១៩៨២ ដោយក្រុមហ៊ុន Philips Semiconductors ដែលសព្វថ្ងៃនេះគឺជាអេឡិចត្រូនិចអេឡិចត្រូនិចបន្ទាប់ពីកម្ចាត់ផ្នែកនេះ។ ដំបូងវាត្រូវបានបង្កើតឡើងសម្រាប់ទូរទស្សន៍នៃយីហោនេះដើម្បីទាក់ទងបន្ទះឈីបផ្ទៃក្នុងជាច្រើនតាមរបៀបសាមញ្ញ។ ប៉ុន្តែចាប់តាំងពីឆ្នាំ ១៩៩០ អាយ។ អេស។ ស៊ីបានរីករាលដាលហើយត្រូវបានប្រើប្រាស់ដោយក្រុមហ៊ុនផលិតជាច្រើន។
បច្ចុប្បន្នត្រូវបានប្រើដោយអ្នកផលិតបន្ទះឈីបរាប់សិបនាក់ សម្រាប់មុខងារច្រើន។ Atmel អ្នកបង្កើតឧបករណ៍ត្រួតពិនិត្យខ្នាតតូចសម្រាប់ក្រុមប្រឹក្សា Arduino បានណែនាំការរចនា TWI (ចំណុចប្រទាក់ខ្សែពីរ) សម្រាប់គោលបំណងផ្តល់អាជ្ញាប័ណ្ណទោះបីជាវាមានលក្ខណៈដូចគ្នាបេះបិទទៅនឹង I2C ក៏ដោយ។ ប៉ុន្តែនៅឆ្នាំ ២០០៦ ប័ណ្ណប៉ាតង់ដើមផុតសុពលភាពហើយលែងជាកម្មសិទ្ធិបញ្ញាទៀតហើយដូច្នេះពាក្យអាយអាយស៊ីត្រូវបានប្រើប្រាស់ឡើងវិញ (មានតែឡូហ្គោនៅតែបន្តការពារដដែលប៉ុន្តែការអនុវត្តឬការប្រើប្រាស់ពាក្យនេះមិនត្រូវបានហាមឃាត់ទេ)
ព័ត៌មានលំអិតបច្ចេកទេសឡានក្រុងអាយ។ ស៊ី។ ស៊ី
El ឡានក្រុង I2C បានក្លាយជាស្តង់ដារឧស្សាហកម្មហើយ Arduino បានអនុវត្តវា សម្រាប់ការទំនាក់ទំនងជាមួយគ្រឿងកុំព្យូទ័រដែលត្រូវការវា។ វាត្រូវការតែខ្សែឬខ្សែពីរប៉ុណ្ណោះសម្រាប់ប្រតិបត្តិការរបស់វាគឺមួយសម្រាប់សញ្ញានាឡិកា (CLK) និងមួយទៀតសម្រាប់បញ្ជូនទិន្នន័យសៀរៀល (SDA) ។ នេះជាគុណសម្បត្តិបើប្រៀបធៀបទៅនឹងទំនាក់ទំនងផ្សេងទៀតបើប្រៀបធៀបទៅនឹងរថយន្ដក្រុង SPI ទោះបីជាប្រតិបត្តិការរបស់វាស្មុគស្មាញបន្តិចក៏ដោយដោយសារត្រូវការសៀគ្វីបន្ថែម។
នៅលើឡានក្រុងនេះ ឧបករណ៍នីមួយៗដែលភ្ជាប់ទៅវាមានអាសយដ្ឋាន បានប្រើដើម្បីចូលប្រើឧបករណ៍ទាំងនេះនីមួយៗ។ អាសយដ្ឋាននេះត្រូវបានជួសជុលដោយផ្នែករឹងដោយកែប្រែ ៣ ប៊ីតចុងក្រោយដោយអ្នកលោតឬប្តូរឌីភីអេទោះបីជាវាក៏អាចត្រូវបានធ្វើដោយសូហ្វវែរដែរ។ ឧបករណ៍និមួយៗនឹងមានអាស័យដ្ឋានប្លែកមួយទោះបីវាមួយចំនួនអាចមានអាស័យដ្ឋានដូចគ្នាហើយឡានក្រុងបន្ទាប់បន្សំប្រហែលជាត្រូវប្រើដើម្បីជៀសវាងជម្លោះរឺផ្លាស់ប្តូរវាបើអាច។
លើសពីនេះទៀតឡានក្រុង I2C មានមួយ ស្ថាបត្យកម្មប្រភេទស្លាវប្រភេទ នោះគឺជាទាសករ។ នេះមានន័យថានៅពេលការទំនាក់ទំនងត្រូវបានចាប់ផ្តើមដោយឧបករណ៍មេវានឹងអាចបញ្ជូនឬទទួលទិន្នន័យពីទាសកររបស់វា។ ទាសករនឹងមិនអាចផ្តួចផ្តើមការប្រាស្រ័យទាក់ទងបានទេមានតែមេទេដែលអាចធ្វើវាបានហើយទាសករទាំងនោះក៏មិនអាចនិយាយគ្នាដោយផ្ទាល់បានដែរបើគ្មានអន្តរាគមន៏ពីម្ចាស់។
ប្រសិនបើអ្នកមាន។ គ្រូមួយចំនួននៅលើឡានក្រុងមានតែមនុស្សម្នាក់ទេដែលអាចដើរតួជាគ្រូបង្រៀនក្នុងពេលតែមួយ ប៉ុន្តែវាមិនសមនឹងវាទេចាប់តាំងពីការផ្លាស់ប្តូរគ្រូទាមទារភាពស្មុគស្មាញខ្ពស់ដូច្នេះវាមិនញឹកញាប់ទេ។
សូមចងចាំថាឯកសារ មេផ្តល់សញ្ញានាឡិកាដើម្បីធ្វើសមកាលកម្មឧបករណ៍ទាំងអស់នៅលើឡានក្រុង។ នោះលុបបំបាត់នូវតំរូវការរបស់ខ្ញុំបម្រើម្នាក់ៗដែលមាននាឡិការផ្ទាល់ខ្លួន។
ពិធីសារឡានក្រុងអាយអាយស៊ីក៏មើលឃើញជាមុនផងដែរនូវការប្រើប្រាស់រេស៊ីស្តង់ទាញក្នុងខ្សែវ៉ុលផ្គត់ផ្គង់ (វីស៊ី) ទោះបីជាឧបករណ៍ទប់ទាំងនេះមិនត្រូវបានប្រើជាធម្មតាជាមួយអាឌូណូក៏ដោយ ទាញឡើងព្រោះបណ្ណាល័យកម្មវិធី ដូចជាលួសធ្វើឱ្យផ្នែកខាងក្នុងសកម្មជាមួយនឹងតម្លៃ 20-30 គី។ នេះប្រហែលជាទន់ពេកសម្រាប់គម្រោងមួយចំនួនដូច្នេះគែមដែលកើនឡើងនៃសញ្ញានឹងយឺតជាងដូច្នេះល្បឿនទាបនិងចម្ងាយទំនាក់ទំនងខ្លីអាចត្រូវបានប្រើ។ ដើម្បីកែតម្រូវអ្នកប្រហែលជាត្រូវកំណត់ឧបករណ៍ចាប់ទាញខាងក្រៅពី 1k ទៅ 4k7 ។
សញ្ញា
La ស៊ុមទំនាក់ទំនង ដែលសញ្ញាឡានក្រុងអាយអាយស៊ីមានប៊ីតឬរដ្ឋ (ឧបករណ៍ទាំងនោះត្រូវបានប្រើនៅក្នុងអារីដូដូចាប់តាំងពីស្តង់ដារអាយអាយស៊ីអនុញ្ញាតឱ្យអ្នកដទៃ):
- ៨ ប៊ីត ៧ នៃពួកវា ទិស នៃឧបករណ៍ទាសករដែលអ្នកចង់ចូលប្រើដើម្បីផ្ញើឬទទួលទិន្នន័យពីវា។ ជាមួយ ៧ ប៊ីតអាស័យដ្ឋានរហូតដល់ ១២៨ ផ្សេងគ្នាអាចត្រូវបានបង្កើតដូច្នេះឧបករណ៍ ១២៨ អាចចូលដំណើរការតាមទ្រឹស្តីប៉ុន្តែមានតែ ១១២ ប៉ុណ្ណោះដែលអាចចូលបានព្រោះ ១៦ គ្រឿងត្រូវបានបម្រុងទុកសម្រាប់ការប្រើប្រាស់ពិសេស។ ហើយប៊ីតបន្ថែមដែលចង្អុលបង្ហាញប្រសិនបើអ្នកចង់បាន ផ្ញើឬទទួល ព័ត៌មានឧបករណ៍ទាសករ។
- ក៏មាន ប៊ីតសុពលភាពមួយប្រសិនបើវាមិនសកម្មការប្រាស្រ័យទាក់ទងនឹងមិនមានសុពលភាពទេ។
- បន្ទាប់មក ទិន្នន័យបៃ ដែលពួកគេចង់បញ្ជូនឬទទួលដោយទាសករ។ បៃនីមួយៗដូចដែលអ្នកបានដឹងហើយត្រូវបានបង្កើតឡើងដោយ ៨ ប៊ីត។ ចំណាំថាសម្រាប់រាល់ ៨ ប៊ីតឬ ១ បៃនៃទិន្នន័យដែលបានផ្ញើឬទទួលបានត្រូវមាន ១៨ សុពលភាពបន្ថែមទៀតនៃសុពលភាពអាស័យដ្ឋាន។ ល។ ដែលមានន័យថារថយន្តក្រុងមានល្បឿនកំណត់។
- បន្តិចចុងក្រោយ សុពលភាព។ នៃការរួបរួមគ្នា។
លើសពីនេះទៀតប្រេកង់នាឡិកាសម្រាប់ ការបញ្ជូនគឺ ១០០ មេហ្គាហឺតជាស្តង់ដារ, ទោះបីជាមានរបៀបលឿនជាងមុននៅ 400 Mhz ។
គុណសម្បត្តិនិងគុណវិបត្តិនៃឡានក្រុង I2C
នេះ គុណសម្បត្តិ ពួកគេមាន:
- ភាពសាមញ្ញ។ ដោយប្រើតែពីរខ្សែប៉ុណ្ណោះ។
- វាមាន យន្ដការដើម្បីដឹងថាតើសញ្ញាបានមកដល់ហើយឬនៅ បើប្រៀបធៀបទៅនឹងពិធីសារទំនាក់ទំនងផ្សេងទៀត។
នេះ គុណវិបត្តិ ពួកគេមាន:
- ល្បឿន ការបញ្ជូនទាបទាប។
- វាមិនមែនជាឌុយពេញទេនោះគឺអ្នកមិនអាចផ្ញើនិងទទួលក្នុងពេលដំណាលគ្នាបានទេ។
- មិនប្រើសមភាព ហើយក៏មិនមានយន្តការផ្ទៀងផ្ទាត់ប្រភេទផ្សេងទៀតដើម្បីដឹងថាតើទិន្នន័យដែលទទួលបានគឺត្រឹមត្រូវដែរឬទេ។
អាយ។ ស៊ី។ ស៊ីស្តីពីអារីដូណូ
En Arduino អាស្រ័យលើម៉ូដែល, ម្ជុលដែលអាចត្រូវបានអនុញ្ញាតឱ្យប្រើរថយន្ដក្រុង I2C នេះខុសគ្នា។ ឧទាហរណ៍:
- Arduino UNO, ណាណូ, មីនី Pro៖ អេ ៤ ត្រូវបានប្រើសម្រាប់អេសអេអេអេ (ទិន្នន័យ) និងអេ ៥ សម្រាប់អេសខេ (ម៉ោង) ។
- Arduino មេហ្គា: លេខ ២០ សំរាប់អេឌីអេសអេសនិងលេខ ២១ សំរាប់អេសខេ។
ចងចាំថាដើម្បីប្រើវាអ្នកត្រូវតែ ប្រើបណ្ណាល័យ wire.h សម្រាប់លេខកូដ Arduino IDE របស់អ្នកទោះបីជាមានលេខផ្សេងទៀតក៏ដោយ I2C y i2cdevlib។ អ្នកអាចអានឯកសារនៃបណ្ណាល័យទាំងនេះឬអត្ថបទរបស់យើងអំពីគម្រោងដែលអ្នកចាប់អារម្មណ៍ដើម្បីទទួលបានលេខកូដនៃរបៀបដែលវាត្រូវបានសរសេរកម្មវិធី។
តើធ្វើដូចម្តេចដើម្បីដឹងពីអាសយដ្ឋានរបស់ឧបករណ៍ដើម្បីប្រើវាជាមួយ I2C?
ការព្រមានចុងក្រោយមួយហើយនោះគឺថានៅពេលអ្នកទិញអាយស៊ីអេសពីអ្នកផលិតអ៊ឺរ៉ុបជប៉ុនជប៉ុនឬអាមេរិកអ្នក ចង្អុលបង្ហាញទិសដៅ ដែលអ្នកគួរប្រើសម្រាប់ឧបករណ៍។ ម៉្យាងវិញទៀតពេលខ្លះជនជាតិចិនមិនបាននិយាយលម្អិតពីវាឬវាមិនត្រឹមត្រូវដូច្នេះវានឹងមិនដំណើរការទេ។ វាអាចត្រូវបានដោះស្រាយយ៉ាងងាយស្រួលជាមួយម៉ាស៊ីនស្កេនអាសយដ្ឋានដើម្បីដឹងទិសដៅដែលអ្នកគួរយោងទៅក្នុងគំនូរព្រាងរបស់អ្នក។
La សហគមន៍ arduino បានបង្កើតនេះ លេខកូដដើម្បីស្កេនអាសយដ្ឋាននិងកំណត់អត្តសញ្ញាណ តាមរបៀបសាមញ្ញ។ ទោះបីខ្ញុំបង្ហាញលេខកូដអោយអ្នកនៅទីនេះ៖
#include "Wire.h" extern "C" { #include "utility/twi.h" } void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) { byte rc; byte data = 0; for( byte addr = from_addr; addr <= to_addr; addr++ ) { rc = twi_writeTo(addr, &data, 0, 1, 0); callback( addr, rc ); } } void scanFunc( byte addr, byte result ) { Serial.print("addr: "); Serial.print(addr,DEC); Serial.print( (result==0) ? " Encontrado!":" "); Serial.print( (addr%4) ? "\t":"\n"); } const byte start_address = 8; const byte end_address = 119; void setup() { Wire.begin(); Serial.begin(9600); Serial.print("Escaneando bus I2C..."); scanI2CBus( start_address, end_address, scanFunc ); Serial.println("\nTerminado"); } void loop() { delay(1000); }