วิธีการเชื่อมต่ออุปกรณ์ i2c-interface หลายตัวเข้ากับ A4 pin (SDA) และ A5 (SCL) บน Arduino เดียว


31

ฉันต้องการเพิ่มโมดูลนาฬิกาเรียลไทม์ในโครงการเล็ก ๆ ของฉัน ฉันต้องการแสดงทั้งวันและเวลาบนโมดูล LCD i2c 2x16 ที่มีอยู่ของฉัน

ทั้งโมดูลนาฬิกาเรียลไทม์ของ i2c-interface และโมดูล LCD 2x16 ใช้ pin A4 (SDA) และ A5 (SCL) เดียวกันบน Arduino Uno หลังจากผ่านไปหลายชั่วโมงของการค้นหาบนเน็ตบัส i2c สามารถใช้อุปกรณ์ซีเรียลมากมาย สิ่งนี้เป็นไปได้เนื่องจากอุปกรณ์แต่ละเครื่องมีที่อยู่เฉพาะของตนเอง

คำถามของฉันคือวิธีการเชื่อมต่ออุปกรณ์ i2c-interface สองตัวเข้ากับ A4 และ A5 เดี่ยวหรือไม่? ขอบคุณ


2
คำตอบสั้น ๆ : สายพวกเขาในแบบคู่ขนาน ผูก SDAs เข้าด้วยกันและเชื่อมต่อกับ A4 และ SCL กับ A5 แน่นอนว่ามีปัญหาเรื่องการดึงที่บางครั้งช่วยได้
SDsolar

คำตอบ:


32

บางคนกำลังมีปัญหาในการมองเห็นสิ่งต่าง ๆ เชื่อมต่อกันดังนั้นนี่คือรูปภาพ:

(ข้อเสนอแนะการให้บริการ)

แผนผัง

จำลองวงจรนี้ - วงจรที่สร้างขึ้นโดยใช้CircuitLab I2C เป็นบัสดังนั้นสัญญาณที่มีชื่อเหมือนกันจึงเชื่อมต่อเข้าด้วยกัน รูปแบบการกำหนดแอดเดรสช่วยให้ไมโครคอนโทรลเลอร์เลือกอุปกรณ์ที่กำลังสนทนาด้วย บน Arduino ตัวต้านทานแบบดึงขึ้น 10k goto "VDD" ซึ่งเป็น 5V หรือ 3.3V


สวัสดีนี่อาจธรรมดามาก แต่ฉันยังใหม่กับอุปกรณ์อิเล็กทรอนิกส์และลงจอดหน้านี้จากการค้นหาของกูเกิ้ล uC หมายถึงอะไร?
Ciasto piekarz

ฉันเชื่อว่าการอ้างอิงคือ uC ใด ๆ เนื่องจากรูปแบบการเชื่อมต่อควรเหมือนกันเว้นแต่จะระบุไว้เป็นอย่างอื่น
KingsInnerSoul

uC สามารถเป็น Arduino ได้ SDA คือ pin A4 และ SCL คือ pin A5
SDsolar

8
@Ciastopiekarz μCย่อมาจาก "microcontroller" ตัวอักษรกรีกμเป็นตัวย่อของไมโคร เนื่องจากμดูเหมือนว่า u ผู้คนมากมายแค่เขียน "uC"
foobarbecue

9

สำหรับ I2C หากอุปกรณ์สลาฟทั้งหมดมีที่อยู่อุปกรณ์ต่างกันพิน SDA ทั้งหมดควรเชื่อมต่อเข้าด้วยกันและพิน SCL ทั้งหมดควรเชื่อมต่อเข้าด้วยกัน มันง่ายอย่างที่คิด

โดยปกติคุณควรมีตัวต้านทานแบบดึงขึ้นบนทั้งสองบรรทัดตามที่จำเป็นสำหรับ I2C วิธีการเลือกค่าความต้านทานที่ได้รับการกล่าวถึงที่นี่ก่อน


ฉันพบว่าตราบใดที่อุปกรณ์หนึ่งเป็น DS3231 RTC แล้วไม่จำเป็นต้องใช้พูลอัพภายนอก
SDsolar

3
@SDsolar นั่นอาจหมายถึงว่า DS3231 มี pull-ups ภายในดังนั้นเมื่อใช้อุปกรณ์นั้นคุณจะได้รับ pull-ups สำหรับบัส นั่นไม่ใช่สิ่งที่ดีเพราะมัน จำกัด เสรีภาพของคุณในการปรับความต้านทานแรงดึงขึ้นอยู่กับจำนวนของอุปกรณ์บนบัส
โฟตอน

ความคิดของฉันอย่างแน่นอน การเพิ่มพูลอัพภายนอกจะขนานกับสิ่งที่อยู่ใน DS3231 และอาจจบลงด้วยความไม่เพียงพอที่ I2C จะมีความสุข
SDsolar

@SDSolar สิ่งนี้เกี่ยวข้องกับคำถามของ OP หรือคำตอบของฉัน นี่ไม่ใช่เว็บไซต์การสนทนาทั่วไป หากคุณต้องการเพียงแค่การพูดคุยเกี่ยวกับสิ่งที่คุณสามารถเข้าร่วมของเราห้องแชท
โฟตอน

3

เชื่อมต่อสองพิน A4-sda เข้ากับ A5-scl (ทั้งบนบอร์ด uno-uno) และเชื่อมต่อตัวต้านทานจาก 5v จากแต่ละเส้น sda-scl ที่สอดคล้องกัน

ป้อนคำอธิบายรูปภาพที่นี่


โหวตลงเพราะคำตอบไม่ตอบคำถามเดิมคือ "เชื่อมต่ออุปกรณ์ i2c-interface ทั้งสองเข้าด้วยกันใน A4 และ A5 เดียว"
Oleg Mazurov

ฉันไม่สามารถลบดังนั้นฉันแก้ไขไป (อาจจะ) ตอบที่น่าพอใจมากขึ้น
daedalucian

ไม่จำเป็นต้องแชร์แรงดันไฟฟ้าใช่ไหม?
clankill3r

0

I2C เป็นโปรโตคอลการถ่ายโอนข้อมูลที่พัฒนาโดย Philips หรือที่เรียกว่าอินเตอร์เฟซสองสายเนื่องจากใช้สายสองเส้นในการสื่อสาร สายนาฬิกาแบบอนุกรม SCL SDL-Serial Data Line ดังนั้นคุณต้องเชื่อมต่อพินที่สอดคล้องกันของอุปกรณ์ i2c ไม่ว่าจะเป็น eeprom หรือ lcd กับขา SCL และ SDL ของตัวควบคุมขนาดเล็กที่คุณใช้กับตัวต้านทานแบบ pullup ถึง VDD เนื่องจากเป็นโปรโตคอลที่อยู่ที่มีที่อยู่ 7 บิตสำหรับแต่ละอุปกรณ์ที่เชื่อมต่อคุณจึงสามารถระบุที่อยู่ได้ถึง 2 ^ 7 อุปกรณ์ที่แตกต่างกัน แต่โดยปกติแล้วที่อยู่ I2C ของอุปกรณ์สลาฟจะถูกกำหนดไว้ล่วงหน้าด้วยบิตบางส่วนที่นักพัฒนาจะต้องเดินสาย สิ่งนี้จะช่วยในการเชื่อมต่ออุปกรณ์ประเภทเดียวกันกับส่วนที่อยู่เดินสายที่แตกต่างกันบนรถบัสเดียวกัน


1
จริงทั้งหมด แต่มันดูดถ้าคุณต้องการมากกว่าหนึ่งอย่างเช่นหน่วยความเข้มแสง BH1750 ฉันต้องการ 4 ของพวกเขาและไม่ต้องการจัดการกับ I2C dual-bus switching .. นอกจากนี้อุปกรณ์บางอย่างเช่น DS3231 มี pullups ภายในดังนั้น pullups ภายนอกใด ๆ จะขนานกับพวกเขา
SDsolar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.