Სარჩევი:
- ნაბიჯი 1: აპარატურის მოთხოვნა
- ნაბიჯი 2: დაფარული თემები
- ნაბიჯი 3: I2C ავტობუსის საფუძვლები
- ნაბიჯი 4: TCA9548A I2C მულტიპლექსერის მოდული
- ნაბიჯი 5:
- ნაბიჯი 6: როგორ აგზავნის და იღებს ოსტატი მონაცემებს
- ნაბიჯი 7: კოდი
- ნაბიჯი 8: I2C სკანერი
- ნაბიჯი 9: გაყვანილობა და დემო
- ნაბიჯი 10: უპირატესობები და უარყოფითი მხარეები
- ნაბიჯი 11: მადლობა
ვიდეო: TCA9548A I2C მულტიპლექსერული მოდული - არდუინოსა და კვანძთან ერთად MCU: 11 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:19
ოდესმე მოხვედით სიტუაციაში, როდესაც თქვენ უნდა მიაერთოთ ორი, სამი ან მეტი I2C სენსორი თქვენს Arduino– ში მხოლოდ იმის გასაგებად, რომ სენსორებს აქვთ ფიქსირებული ან იგივე I2C მისამართი. უფრო მეტიც, თქვენ არ შეგიძლიათ გქონდეთ ერთი და იგივე მისამართის ორი მოწყობილობა იმავე SDA/SCL ქინძისთავებზე!
მაშ, რა არის თქვენი არჩევანი? განათავსეთ ისინი ყველა TCA9548A 1-დან -8 I2C მულტიპლექსერზე, რათა ყველამ ერთსა და იმავე ავტობუსში ისაუბროს ერთმანეთთან! TCA9548A Breakout საშუალებას აძლევს კომუნიკაციას მრავალჯერადი I2C მოწყობილობებთან, რომლებსაც აქვთ ერთი და იგივე მისამართი, რაც ამარტივებს მათთან ურთიერთობას.
ნაბიჯი 1: აპარატურის მოთხოვნა
ამ გაკვეთილისთვის ჩვენ გვჭირდება:
- პურის დაფა
- TCA9548A I2C მულტიპლექსერი
- არდუინო უნო/ნანო რაც მოსახერხებელია
- NodeMCU
- რამდენიმე 0.91 და 0.96 I2C OLED ეკრანი
- ჯუმბერის კაბელები და
- USB კაბელი კოდის ასატვირთად
ნაბიჯი 2: დაფარული თემები
ჩვენ დავიწყებთ ჩვენს დისკუსიას I2C ტექნოლოგიის საფუძვლების გაგებით
შემდეგ ჩვენ შევისწავლით TCA9548A მულტიპლექსერს და როგორ აგზავნის და იღებს მონათმფლობელი და მონაცემი მონაცემებს I2C ტექნოლოგიის გამოყენებით, შემდეგ ჩვენ შევამოწმებთ, თუ როგორ შეგვიძლია დავპროგრამოთ და გამოვიყენოთ მულტიპლექსერი ჩვენს პროექტში Arduino და NodeMCU გამოყენებით, შემდეგ მე გაჩვენებთ სწრაფად დემო 8 I2C OLED დისპლეის გამოყენებით და ბოლოს ჩვენ დავასრულებთ სახელმძღვანელოს TCA9548A მულტიპლექსერის უპირატესობებისა და უარყოფითი მხარეების განხილვით
ნაბიჯი 3: I2C ავტობუსის საფუძვლები
ინტეგრირებული წრე გამოითქმის I- კვადრატში- C (I²C) ან I2C არის ორი მავთულის ავტობუსის ტექნოლოგია (კარგად არის 4 მავთული, რადგან თქვენ ასევე გჭირდებათ VCC და Ground), რომელიც გამოიყენება მრავალ პროცესორსა და სენსორს შორის კომუნიკაციისთვის.
ორი მავთული არის:
* SDA - სერიული მონაცემები (მონაცემთა ხაზი) და
* SCL - სერიული საათი (საათის ხაზი)
გახსოვდეთ, ორივე ეს ხაზი არის "სინქრონული" ორმხრივი "ღია გადინება" და "გაყვანილია რეზისტენტებით".
I2C ავტობუსის ტექნოლოგია თავდაპირველად შეიქმნა Philips Semiconductors– ის მიერ 80 – იანი წლების დასაწყისში, რათა შესაძლებელი ყოფილიყო მარტივი კომუნიკაცია კომპონენტებს შორის, რომლებიც ერთსა და იმავე მიკროსქემზეა განთავსებული.
I2C– ით თქვენ შეგიძლიათ დაუკავშიროთ მრავალი მონა ერთ სამაგისტროს (მაგალითად, SPI) ან გყავთ მრავალი სამაგისტრო, რომლებიც აკონტროლებენ ერთ ან მრავალ მონას. ბატონებსა და მონებს შეუძლიათ მონაცემების გადაცემა და მიღება. ამრიგად, მოწყობილობა I2C ავტობუსზე შეიძლება იყოს ამ ოთხივე მდგომარეობიდან ერთში:
* სამაგისტრო გადაცემა - სამაგისტრო კვანძი მონაცემებს უგზავნის მონას* სამაგისტრო მიღება - სამაგისტრო კვანძი იღებს მონას
* მონა გადაცემა - მონა კვანძი მონაცემებს უგზავნის ოსტატს
* მონა იღებს - მონა კვანძი იღებს მონაცემებს სამაგისტროდან
I2C არის "მოკლე მანძილის" სერიული საკომუნიკაციო პროტოკოლი, ამიტომ მონაცემები გადადის "ბიტი-ბიტი" ერთი მავთულის ან SDA ხაზის გასწვრივ. ბიტების გამომავალი სინქრონიზებულია ბიტების სინჯთან საათის სიგნალით, რომელიც „გაზიარებულია“ოსტატსა და მონას შორის. საათის სიგნალს ყოველთვის აკონტროლებს ოსტატი. ოსტატი ქმნის საათს და იწყებს კომუნიკაციას მონებთან.
ასე რომ, შეჯამება>
გამოყენებული მავთულის რაოდენობა: 2
სინქრონული ან ასინქრონული: სინქრონული
სერიული ან პარალელური: სერიული
საათის სიგნალი აკონტროლებს: სამაგისტრო კვანძს
გამოყენებული ძაბვები: +5 V ან +3.3 V
სამაგისტროების მაქსიმალური რაოდენობა: შეუზღუდავი
მონების მაქსიმალური რაოდენობა: 1008
მაქსიმალური სიჩქარე: სტანდარტული რეჟიმი = 100 kbps
სწრაფი რეჟიმი = 400 kbps
მაღალი სიჩქარის რეჟიმი = 3.4 Mbps
ულტრა სწრაფი რეჟიმი = 5 Mbps
ნაბიჯი 4: TCA9548A I2C მულტიპლექსერის მოდული
TCA9548A არის რვაარხიანი (ორმხრივი) I2C მულტიპლექსერი, რომელიც რვა ცალკეულ I2C მოწყობილობას აკონტროლებს ერთი მასპინძელი I2C ავტობუსით. თქვენ უბრალოდ უნდა დააკავშიროთ I2C სენსორები SCn / SDn მულტიპლექსურ ავტობუსებზე. მაგალითად, თუ რვა იდენტური OLED ჩვენება არის საჭირო პროგრამაში, თითოეული ჩვენების ერთი შეიძლება იყოს დაკავშირებული თითოეულ ამ არხზე: 0-7.
მულტიპლექსერი აკავშირებს მიკროკონტროლის VIN, GND, SDA და SCL ხაზებს. ბრეაკოუტ დაფა იღებს VIN– ს 1.65 ვ - დან 5.5 ვ - მდე. ორივე შემავალი SDA და SCL ხაზები დაკავშირებულია VCC– სთან 10K გამწევ რეზისტორის საშუალებით (გამწევ რეზისტორის ზომა განისაზღვრება I2C ხაზებზე ტევადობის რაოდენობით). მულტიპლექსერი მხარს უჭერს როგორც ნორმალურ (100 kHz), ასევე სწრაფ (400 kHz) I2C პროტოკოლებს. TCA9548A– ს ყველა I/O ქინძისთავები 5 ვოლტის ტოლერანტულია და ასევე შეიძლება გამოყენებულ იქნას მაღალიდან დაბალიდან ან დაბალიდან მაღალ ძაბვებზე.
კარგი იდეაა TCA9548A– ს ყველა არხზე გამწევი რეზისტორების დაყენება, თუნდაც ძაბვები იგივე იყოს. ამის მიზეზი არის შიდა NMOS გადამრთველი. ის არ გადასცემს მაღალ ძაბვას ძალიან კარგად, მეორეს მხრივ ის ძალიან კარგად გადასცემს დაბალ ძაბვებს. TCA9548A ასევე შეიძლება გამოყენებულ იქნას ძაბვის თარგმანისთვის, რაც საშუალებას იძლევა გამოიყენოს სხვადასხვა ავტობუსის ძაბვა თითოეულ SCn/SDn წყვილზე ისე, რომ 1.8-V, 2.5-V, ან 3.3-V ნაწილებს შეეძლოთ დაუკავშირდნენ 5-V ნაწილებს. ეს მიიღწევა გარე გამწევი რეზისტორების გამოყენებით, რათა ავტობუსი გაიყვანოს სასურველ ძაბვამდე სამაგისტრო და თითოეული მონა არხისათვის.
თუ მიკროკონტროლერი აღმოაჩენს ავტობუსის კონფლიქტს ან სხვა არასათანადო ოპერაციას, TCA9548A შეიძლება გადატვირთოთ RESET პინზე დაბალი მტკიცებით.
ნაბიჯი 5:
TCA9548 საშუალებას აძლევს ერთ მიკროკონტროლერს დაუკავშირდეს '64 სენსორს ', ყველა იგივე და განსხვავებული I2C მისამართით, თითოეული სენსორული მონა ავტობუსისთვის უნიკალური არხის მინიჭებით.
როდესაც ჩვენ ვსაუბრობთ მონაცემების გაგზავნაზე 2 მავთულზე მრავალ მოწყობილობაზე, ჩვენ გვჭირდება მათი მიმართვის საშუალება. იგივეა, რაც ფოსტალიონი ერთ გზაზე მოდის და საფოსტო პაკეტებს სხვადასხვა სახლებში აგდებს, რადგან მათ სხვადასხვა მისამართი აქვთ დაწერილი.
თქვენ შეგიძლიათ გქონდეთ ამ მულტიპლექსერის მაქსიმუმ 8 დაკავშირებული 0x70-0x77 მისამართებზე, რათა გააკონტროლოთ 64 იგივე I2C მიმართული ნაწილი. სამი მისამართის ბიტის A0, A1 და A2 VIN– თან შეერთებით შეგიძლიათ მიიღოთ მისამართების განსხვავებული კომბინაცია. ასე გამოიყურება TCA9548A მისამართის ბაიტი. პირველი 7 ბიტიანი კომბინაცია ქმნის მონა მისამართს. მონა მისამართის ბოლო ბიტი განსაზღვრავს შესასრულებელ ოპერაციას (წაკითხვა ან წერა). როდესაც ის მაღალია (1), ამოირჩევა კითხვა, ხოლო დაბალი (0) ირჩევს ჩაწერის ოპერაციას.
ნაბიჯი 6: როგორ აგზავნის და იღებს ოსტატი მონაცემებს
ქვემოთ მოცემულია ზოგადი პროცედურა სამაგისტრო მონა მოწყობილობაზე წვდომისათვის:
1. თუ სამაგისტრო სურს მონაცემების გაგზავნა მონა (WRITES):
-სამაუწყებლო გადამცემი აგზავნის START მდგომარეობას, რასაც მოყვება მონა-მიმღების მისამართები და R/W დაყენებულია 0
-სამაუწყებლო გადამცემი აგზავნის მონაცემებს "8 ბიტიანი საკონტროლო რეგისტრებში" მონა მიმღებზე, როდესაც მონა აღიარებს, რომ ის მზად არის
-სამაგისტრო გადამცემი წყვეტს გადაცემას STOP პირობით
2. თუ ოსტატს სურს მონას მიიღოს ან წაიკითხოს მონაცემი (იკითხება):
სამაგისტრო მიმღები აგზავნის START მდგომარეობას, რასაც მოყვება მონა-მიმღების მისამართები და R/W დაყენებულია 1
-მთავარი მიმღები აგზავნის მოთხოვნილ რეგისტრს მონა-გადამცემს წასაკითხად
-სამაგისტრო მიმღები იღებს მონაცემებს მონა გადამცემისგან
- მას შემდეგ, რაც ყველა ბაიტი მიიღება, ოსტატი აგზავნის NACK სიგნალს მონას, რომ შეწყვიტოს კომუნიკაცია და გაუშვას ავტობუსი
- სამაგისტრო მიმღები წყვეტს გადაცემას STOP პირობით
ავტობუსი ითვლება უსაქმურად, თუ ორივე SDA და SCL ხაზი მაღალია STOP მდგომარეობის შემდეგ.
ნაბიჯი 7: კოდი
ახლა, Int კოდი იწყებს "მავთულის" ბიბლიოთეკის ჩართვით და მულტიპლექსერების მისამართის განსაზღვრით.
#მოიცავს "Wire.h"
#მოიცავს "U8glib.h"
#განსაზღვრეთ MUX_ მისამართი 0x70 // TCA9548A კოდირების მისამართი
შემდეგ ჩვენ უნდა შევარჩიოთ პორტი, რომელთანაც გვინდა ურთიერთობა და გავაგზავნოთ მასზე მონაცემები ამ ფუნქციის გამოყენებით:
ბათილია selectI2CC არხები (uint8_t i) {
თუ (i> 7) დაბრუნდება;
Wire.beginTransmission (MUX_Address);
Wire.write (1 << i);
Wire.endTransmission ();
}
შემდეგი ჩვენ ვიწყებთ ჩვენებას კონფიგურაციის განყოფილებაში დარეკვით "u8g.begin ();" MUX- ზე მიმაგრებული თითოეული ჩვენებისათვის "tcaselect (i);"
ინიციალიზაციის შემდეგ, ჩვენ შეგვიძლია გავაკეთოთ ის, რაც გვსურს მხოლოდ ფუნქციის გამოძახებით "tcaselect (i);" სადაც "i" არის მულტიპლექსური ავტობუსის მნიშვნელობა და შემდეგ მონაცემების და საათის შესაბამისად გაგზავნა.
ნაბიჯი 8: I2C სკანერი
თუ არ ხართ დარწმუნებული თქვენი I2C ფარის მოწყობილობის მისამართში, გაუშვით თანდართული 'I2C სკანერის' კოდი თქვენი მოწყობილობის ექვსკუთხა მისამართის საპოვნელად. არდუინოში ჩატვირთვისას, ესკიზი სკანირებს I2C ქსელს, აჩვენებს მისამართებს, რომლებიც პასუხობენ.
ნაბიჯი 9: გაყვანილობა და დემო
გაყვანილობა:
დავიწყოთ მულტიპლექსერის NodeMCU დაფასთან დაკავშირებით. დაკავშირება:
VIN 5V (ან 3.3V)
GND მიწაზე
SDA to D2 და
SCL to D1 ქინძისთავები შესაბამისად
Arduino დაფისთვის დააკავშირეთ:
VIN 5V (ან 3.3V)
GND მიწაზე
SDA to A4 და
SCL to A5 ქინძისთავები შესაბამისად
მას შემდეგ, რაც MUX მიერთებულია მიკროკონტროლერთან, თქვენ უბრალოდ უნდა დაუკავშიროთ სენსორები SCn / SDn წყვილებს.
ახლა მოდით შევამოწმოთ ეს სწრაფი დემო, რომელშიც მე დავუკავშირე 8 OLED დისპლეი TCA9548A მულტიპლექსერთან. რადგან ეს ეკრანები იყენებენ I2C კომუნიკაციას, ისინი არდუინოსთან ურთიერთობენ მხოლოდ 2 ქინძისთავის გამოყენებით.
ნაბიჯი 10: უპირატესობები და უარყოფითი მხარეები
უპირატესობები
* კომუნიკაციისთვის საჭიროა მხოლოდ ორი ავტობუსის ხაზი (მავთული)
* მარტივი ბატონის/მონა ურთიერთობები არსებობს ყველა კომპონენტს შორის
* არ არის მკაცრი მოთხოვნები ბაუდზე, მაგალითად RS232– ით, ოსტატი ქმნის ავტობუსის საათს
* აპარატურა ნაკლებად რთულია ვიდრე UARTs
* მხარს უჭერს მრავალ ბატონს და მრავალ მონას
* ACK/NACK ბიტი იძლევა დადასტურებას, რომ თითოეული ჩარჩო წარმატებით არის გადატანილი
* I2C არის "ნამდვილი მრავალ სამაგისტრო ავტობუსი", რომელიც უზრუნველყოფს არბიტრაჟს და შეჯახების გამოვლენას
* თითოეული მოწყობილობა, რომელიც დაკავშირებულია ავტობუსთან, არის პროგრამული უზრუნველყოფის მისამართით უნიკალური მისამართით
* I2C მოწყობილობების უმეტესობას შეუძლია კომუნიკაცია 100kHz ან 400kHz
* I²C შესაფერისია პერიფერიული მოწყობილობებისთვის, სადაც სიმარტივე და დაბალი წარმოების ღირებულება უფრო მნიშვნელოვანია ვიდრე სიჩქარე
* კარგად ცნობილი და ფართოდ გავრცელებული პროტოკოლი
უარყოფითი მხარეები
* მონაცემთა გადაცემის უფრო ნელი მაჩვენებელი ვიდრე SPI
* მონაცემთა ჩარჩოს ზომა შეზღუდულია 8 ბიტით
* უფრო რთული აპარატურაა საჭირო განსახორციელებლად, ვიდრე SPI ტექნოლოგია
გირჩევთ:
როგორ გამოვიყენოთ RFID-RC522 მოდული არდუინოსთან ერთად: 5 ნაბიჯი
როგორ გამოვიყენოთ RFID-RC522 მოდული Arduino– სთან ერთად: ამ ინსტრუქციებში მე განვიხილავ RFID მოდულის ფუნდამენტურ პრინციპს, მის ტეგებსა და ჩიპებთან ერთად. მე ასევე მოვიყვან იმ პროექტის მოკლე მაგალითს, რომელიც მე გავაკეთე ამ RFID მოდულის გამოყენებით RGB LED– ით. ჩვეულებისამებრ ჩემს ინსინებთან
ინტერფეისის ულტრაბგერითი მოდული HC-SR04 არდუინოსთან ერთად: 5 ნაბიჯი
ულტრაბგერითი ჩართვის მოდული HC-SR04 არდუინოსთან ერთად: ჰეი, რა ხდება, ბიჭებო! აქარში აქ CETech– დან. ეს ჩემი პროექტი ცოტა უფრო მარტივი მხარეა, მაგრამ ისეთივე სახალისოა, როგორც სხვა პროექტები. ამ პროექტში ჩვენ ვაპირებთ HC-SR04 ულტრაბგერითი მანძილის სენსორის მოდულის ინტერფეისს. ეს მოდული მუშაობს გენერატინის მიერ
ინტერფეისის TM1637 ჩვენების მოდული Arduino– სთან ერთად: 3 ნაბიჯი
ინტერფეისის TM1637 ჩვენების მოდული Arduino– სთან ერთად: As-Salam-O-Aleykum! ჩემი ეს ინსტრუქცია ეხება TM1637 ჩვენების მოდულის Arduino– სთან დაკავშირებას. ეს არის ოთხნიშნა ციფრის შვიდი სეგმენტის ჩვენების მოდული. იგი მოდის სხვადასხვა ფერებში. ჩემი არის წითელი ფერი. იგი იყენებს Tm1637 Ic
SD ბარათის მოდული არდუინოსთან ერთად: როგორ წავიკითხოთ/დავწეროთ მონაცემები: 14 ნაბიჯი
SD ბარათის მოდული Arduino– ით: როგორ წავიკითხოთ/დავწეროთ მონაცემები: მიმოხილვა მონაცემთა შენახვა ყველა პროექტის ერთ -ერთი ყველაზე მნიშვნელოვანი ნაწილია. მონაცემთა შენახვის რამდენიმე გზა არსებობს მონაცემების ტიპისა და ზომის მიხედვით. SD და მიკრო SD ბარათები ერთ -ერთი ყველაზე პრაქტიკულია შენახვის მოწყობილობებს შორის, რომლებიც გამოიყენება
როგორ გამოვიყენოთ GY511 მოდული არდუინოსთან ერთად [გააკეთეთ ციფრული კომპასი]: 11 ნაბიჯი
როგორ გამოვიყენოთ GY511 მოდული Arduino– სთან ერთად [გააკეთეთ ციფრული კომპასი]: მიმოხილვა ელექტრონიკის ზოგიერთ პროექტში, ჩვენ უნდა ვიცოდეთ გეოგრაფიული მდებარეობა ნებისმიერ მომენტში და შესაბამისად გავაკეთოთ კონკრეტული ოპერაცია. ამ გაკვეთილში თქვენ ისწავლით თუ როგორ გამოიყენოთ LSM303DLHC GY-511 კომპასის მოდული Arduino– თან ციფრული კომპასის შესაქმნელად