ใช้พินทั้งหมดเป็นดิจิตอล I / O


11

เพิ่มจำนวนพินดิจิตอล

มีโพสต์มากมายที่อธิบายวิธีการใช้งานมากกว่าพินมาตรฐานในอาร์ดิโนต่าง ๆ แต่ไม่มีใครอธิบายข้อ จำกัด และโพรเซสได้อย่างถูกต้อง

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

Arduino Uno:

1. คุณสามารถใช้หมุดอะนาล็อก

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2. คุณไม่สามารถใช้ทั้ง SDA, SCL และ A4, A5 ได้เหมือนกัน (18,19)

3. คุณสามารถใช้ TX / RX

"อย่าทำอย่างนั้นคุณทำลายการสื่อสารแบบอนุกรม ... "

"ไม่เคยใช้พิน 0 และ 1"

"คุณไม่สามารถใช้พิน TX / Rx ได้"

คุณสามารถ ... แต่คุณต้องใช้ความระมัดระวัง อันไหน?

ควรมีซอฟต์แวร์อนุกรมผ่าน USB ใช่ไหม

หรือฉันจะทำลายอนุกรม USB

มีปัญหาชิปภายในหรือไม่หากฉันใช้ TX / RX

ในฐานะที่เป็นผู้ใช้ i หมุด TX / RX ในรหัสฉันอาจจะไม่ควรใช้Serial.print()?

จะเกิดอะไรขึ้นถ้าฉันลืมลบSerial.print()หลังจากอัปโหลดรหัสที่ใช้พิน 0,1

ฮาร์ดแวร์จะรีเซ็ต arduino / bootloader อย่างไรถ้ามีอะไรผิดปกติ?

เนื่องจากมี Arduino อื่น ๆ อีกมากมายที่ใช้ชิปที่แตกต่างกันข้างต้นจึงใช้ได้กับชิป Atmel ทั้งหมดหรือไม่

ดังนั้นสิ่งที่ฉันรู้ก่อนที่จะใช้ TX / RX เหล่านั้นหรือเข็มแอนะล็อกอื่น ๆ

มี shiftregisters ราคาถูก, ไดรเวอร์ pwm, ไดรเวอร์ led, spi, i2c และ ic อื่น ๆ เพื่อขยาย I / O ของคุณ


แต่ถ้าไม่มีปัญหาใหญ่หมายความว่า arduino มีหมุด 20 I / O ...

คุณสามารถควบคุมตามหลักวิชาได้:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// yes it would flicker

ช่วยแก้ให้ด้วยนะถ้าฉันผิด. นั่นหมายความว่าคุณสามารถควบคุม 380 "อะไรก็ได้" โดยใช้ไดโอดและอาร์ดิโนหนึ่งอัน

คำตอบ:


8

ปัญหาหลักคือด้วยหมุด 0 และ 1

หมุดจำนวนมากมีฟังก์ชั่นหลายอย่างที่ได้รับมอบหมายเช่น A4 และ A5 นอกจากนี้ยังมีหมุด I2C, หมุด 10/11/12/13 ยังเป็นหมุด SPI เป็นต้น แต่หมุด 0 และ 1 เป็นหมุดอเนกประสงค์ที่จริงเท่านั้น มีสิ่งที่แนบมากับพวกเขาบนกระดาน

หมุดอื่น ๆ ทั้งหมดในขณะที่เป็นมัลติฟังก์ชั่นจะมีฟังก์ชั่นการใช้งานที่กำหนดไว้ตามสิ่งที่คุณแนบไว้ เนื่องจากพิน 0 และ 1 เชื่อมต่อกับบอร์ดไปยังชิปอินเตอร์เฟส USB แล้วความเป็นไปได้ในการใช้งานจึงค่อนข้าง จำกัด

  • ทันทีที่คุณเปิดใช้งาน Serial ในร่างของคุณ ( Serial.begin()) พินทั้งสองนั้นจะไม่สามารถใช้กับ Digital IO ได้อย่างเชื่อถือได้อีกต่อไป

นั่นหมายความว่าคุณสามารถทั้งใช้พอร์ตฮาร์ดแวร์อนุกรมหรือคุณสามารถใช้หมุดสำหรับดิจิตอล IO แต่ไม่ใช่ทั้งสอง

  • อุปกรณ์ที่เชื่อมต่อกับพิน 0 และ 1 สามารถรบกวนการเชื่อมต่อแบบอนุกรม

ซึ่งรวมถึงการอัปโหลดภาพร่าง คุณมีข้อมูลซีเรียลเข้ามาจากพีซีในขณะที่หมุดเดียวกันได้รับผลกระทบจากสิ่งอื่น ๆ ที่เชื่อมต่อกับพวกเขา สิ่งที่พบบ่อยที่สุดคือโมดูล GPS ซึ่งเชื่อมต่อกับหมุดเหล่านั้นและส่งข้อมูลอนุกรมอย่างต่อเนื่อง ข้อมูลอนุกรมนั้นจะขัดแย้งกับข้อมูลอนุกรมของพีซีและจะไม่ถูกต้อง

  • คุณจะอัปโหลดภาพร่างได้อย่างไรหากซีเรียลของคุณถูกรบกวน คุณจะ "รีเซ็ต" บอร์ดได้อย่างไร

คุณทำไม่ได้ ไม่ใช่ร่างของคุณที่รบกวนอนุกรม แต่เป็นสิ่งที่เชื่อมต่อทางกายภาพกับหมุด IO สองตัวที่รบกวน เพียงปลดหมุดสองอันนี้ออกจากสิ่งที่เชื่อมต่ออยู่และคุณจะสามารถอัพโหลดภาพร่างได้อีกครั้ง ขณะนี้มีหลายโล่เริ่มเพิ่มสวิตช์ขนาดเล็กเพื่อปลดหมุดเหล่านั้นเพื่อให้คุณสามารถอัปโหลดภาพร่างโดยไม่ต้องถอดปลั๊กโล่ นอกจากนี้คุณยังสามารถใช้เคล็ดลับเดียวกันกับอุปกรณ์อื่น ๆ ที่ต่อสายเข้ากับพินเหล่านั้นได้ - เพิ่มการโยนสองขั้วเดี่ยวหรือสองเสาสองครั้ง (และไม่ใช้ตำแหน่งเดียว) เพื่อแยกขาทั้งสองออกจากส่วนที่เหลือของ ฮาร์ดแวร์ของคุณเมื่อคุณต้องการ

  • สิ่งนี้มีผลต่อบอร์ด Arduino ทั้งหมดหรือไม่?

ไม่เฉพาะผู้ที่ใช้ชิป USB to Serial bridge - นั่นคือ Uno, Due, Mega, ฯลฯ บอร์ดที่มีการเชื่อมต่อ USB โดยตรงไม่ได้ใช้หมุด TX และ RX สำหรับการอัปโหลดภาพร่าง - พวกเขาใช้ USB เฉพาะ หมุด D + และ D- บอร์ดนั่นคือเลโอนาร์โดบอร์ดเล็ก (มินิไมโครฉันลืมที่) เป็นต้น


"ตอนนี้มีหลายโล่เริ่มเพิ่มสวิตช์เล็ก ๆ " เท่ Micro มี "USB to Serial bridge chip" หรือไม่? หมายความว่าฉันสามารถใช้พิน 0,1 กับ uno แต่ไม่ใช่ micro ได้หรือไม่?
cocco

คุณสามารถใช้พวกมันกับสิ่งใดก็ตามที่ไม่มี USB to Serial bridge Uno มีหนึ่ง, Mega มีหนึ่ง, มินิไม่มีหนึ่ง, แต่คุณจำเป็นต้องเชื่อมต่อหนึ่งภายนอกกับหมุด TX / RX เพื่อตั้งโปรแกรม สิ่งเหล่านั้นหมดแล้ว Micro และ Leonardo ไม่มีอยู่ดังนั้นคุณสามารถใช้มันได้
Majenko

นั่นคือ @Nick Gammon กำลังพูดถึงอะไร Uno และคนอื่น ๆ ที่คุณจดไว้มีตัวต้านทาน pullup ที่ไม่อนุญาตให้คุณใช้ pin 0 และ 1 อย่างถูกต้อง แต่ Micro ไม่มีตัวต้านทาน pullup และหมุด 0 และ 1 ทำงานได้อย่างเหมาะสมและ usb เพื่ออัปโหลดภาพร่างใหม่หรือไม่
cocco

สำหรับครั้งหนึ่ง Nick ถูกเข้าใจผิดในจุดนั้น ไม่มีตัวต้านทานแบบดึงขึ้น สิ่งที่มีตัวต้านทานแบบอินไลน์เล็ก ๆ คู่หนึ่งเพื่อป้องกันปัญหาหาก MCU หลักและชิป USB ทั้งคู่ลองขับสายเดียวกันไปยังระดับตรงข้ามในเวลาเดียวกัน คุณสามารถดูได้ใน Uno schematic เป็น RN4A และ RN4B
Majenko

หากชิป USB ลองขับหมุด RX (คุณมีพอร์ต USB เสียบอยู่และคุณเปิดการเชื่อมต่อแบบอนุกรม [หรืออาจเป็นเพียงแค่เสียบปลั๊กไม่แน่ใจ]) ก็สามารถส่งผลต่อแรงดันไฟฟ้าที่ขา RX ได้ คุณกำลังทำในแบบร่างของคุณดังนั้นจึงอาจไม่ปลอดภัยที่จะใช้พินนั้นสำหรับสิ่งต่าง ๆ เช่นการดูดไขมัน
Majenko

1

ฉันไม่สามารถแสดงความคิดเห็นเนื่องจากชื่อเสียงไม่เพียงพอ แต่ฉันต้องการชี้ให้เห็นว่าพิน OP มีความผิดอย่างน้อยหนึ่งครั้ง!

PB6 ควรเป็น PB5

ฉันใช้เวลาค่อนข้างพยายามคิดว่าทำไมฉันไม่เห็น SCK บนขอบเขต (บัส SPI) ฉันทำงานในระดับต่ำไม่ใช่กับ IDE

นี่เป็นภาพแรกที่เกิดขึ้นเมื่อ googling ฉันต้องการหลีกเลี่ยงปัญหาแบบเดียวกันกับคนอื่น ๆ ...


0

20x (20-1) = 380 ไฟ LED (charlieplexing, สูงต่ำ); ช่วยแก้ให้ด้วยนะถ้าฉันผิด. นั่นหมายความว่าคุณสามารถควบคุม 380 "อะไรก็ได้" โดยใช้ไดโอดและ Arduino หนึ่งตัว

อย่างแรกตัวเลข 380 นั้นถูกต้องสำหรับ 20 พิน (20 2 - 20) อย่างไรก็ตามหมุด 0 และ 1 เชื่อมต่อกับตัวต้านทานแบบดึงขึ้นบน Atmega16U2 ดังนั้นพวกมันจึงไม่เคยที่ 0V หากคุณโหลดภาพร่างเปล่าคุณจะวัด 5 V บนพิน 0 และ 1

ประการที่สองคุณไม่สามารถขับ " นักประดาน้ำ" 380 คุณสามารถขับไฟ LED 380 ดวงผ่าน Charlieplexing คุณสมบัติของ LED ที่กระแสไหลทางเดียวเท่านั้นมันมีความสำคัญต่อวิธีการทำงานของมัน

คำถามที่เกี่ยวข้องมีวิธีที่จะมีมากกว่า 14 พินเอาต์พุตบน arduino หรือไม่?


ข้อแรก: จะเกิดอะไรขึ้นถ้าฉันใส่ 2 leds inverted (พร้อมตัวต้านทาน) ที่ pin 0 และ 1, ตั้ง pin 0 high pin 1 low delay 1 วินาทีและ set pin 0 low และ pin 1 high delay 1sec?
cocco

ประการที่สอง: โดย "whatevers" ฉันหมายถึงสวิตช์ ... คลิกสวิตช์สวิตช์ลิ้นเซ็นเซอร์หรืออินพุตทุกประเภทของเอาต์พุตอินพุตที่สนับสนุนสูงต่ำ electronicdesign.com/site-files/electronicdesign.com/files/…ทำด้วยไดโอด
cocco

ก็ไม่ได้จริงๆ Charlieplexing เป็นรูปแบบของมัลติเพล็กซิ่งดังนั้นหากคุณไม่ต้องการให้สวิตช์ของคุณคลิกอย่างบ้าคลั่งมันจะไม่ทำงานสำหรับพวกเขา และมันเป็นสถานการณ์เอาท์พุทดังนั้นคุณจะไม่ทำอินพุตเหมือนที่คุณคิด ฉันแนะนำให้คุณอ่านลิงค์อื่น ๆ การลงทะเบียน Shift หรือตัวขยายพอร์ตนั้นใช้งานได้จริงมากกว่า Charlieplexing ที่นี่
Nick Gammon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.