สารบัญ:

วิธีอ่านสวิตช์จำนวนมากด้วยหมุด MCU เดียว: 4 ขั้นตอน
วิธีอ่านสวิตช์จำนวนมากด้วยหมุด MCU เดียว: 4 ขั้นตอน

วีดีโอ: วิธีอ่านสวิตช์จำนวนมากด้วยหมุด MCU เดียว: 4 ขั้นตอน

วีดีโอ: วิธีอ่านสวิตช์จำนวนมากด้วยหมุด MCU เดียว: 4 ขั้นตอน
วีดีโอ: มือใหม่หัดซ่อม อินเวอร์เตอร์ ตอน 1 2024, มิถุนายน
Anonim
วิธีอ่านสวิตช์หลายตัวด้วยหมุด MCU เดียว
วิธีอ่านสวิตช์หลายตัวด้วยหมุด MCU เดียว

คุณเคยเลิกยุ่งกับโปรเจ็กต์หนึ่งๆ และโปรเจ็กต์ก็เติบโตขึ้นเรื่อยๆ ในขณะที่คุณเพิ่มสิ่งต่างๆ เข้าไป (เราเรียกว่า Feaping Creaturism) หรือไม่? ในโครงการล่าสุด ฉันกำลังสร้างเครื่องวัดความถี่และเพิ่มเครื่องกำเนิดสัญญาณ/เครื่องสังเคราะห์ความถี่ห้าฟังก์ชัน ในไม่ช้าฉันก็มีสวิตช์มากกว่าที่ฉันมีหมุดเหลืออยู่แล้วผู้ชายต้องทำอย่างไร?

อย่างไรก็ตาม ในไม่ช้าฉันก็มีสวิตช์อีกเจ็ดตัวบน Funbox ของฉัน (ใช่แล้ว นั่นคือสิ่งที่ฉันเรียกว่าตัวสร้างฟังก์ชันของฉัน…ฉันรู้ ฉันไม่มีความคิดสร้างสรรค์) และนี่คือคำแนะนำสั้นๆ ที่แสดงให้คุณเห็นว่าคุณจะทำเช่นเดียวกันได้อย่างไร ไม่ต้องใช้ shift register หรือ IC เฉพาะ อันที่จริง ไม่จำเป็นต้องใช้ไมโครคอนโทรลเลอร์เช่นกัน หากเซมิคอนดักเตอร์แบบแยกเป็นวิธีการหมุนของคุณ นี่เป็นวิธีหนึ่งที่คุณสามารถอ่าน/จัดการสวิตช์หลายตัวโดยใช้พินเดียวบน AVR ของคุณ (หรือไมโครคอนโทรลเลอร์อื่น…ฉันได้ยินมาว่ามีไมโครคอนโทรลเลอร์อื่นนอกเหนือจาก AVR แต่ฉันนึกไม่ออก…):)

ขั้นตอนที่ 1: สิ่งจำเป็น (ไม่จริง)

คุณต้องมีส่วนประกอบสองสามอย่างจึงจะสำเร็จได้ ช่วยให้มีสวิตช์มากมายที่คุณต้องจัดการ คุณจะต้องใช้ตัวต้านทานบางตัวและไมโครคอนโทรลเลอร์ที่มี ADC (การแปลงแอนะล็อกเป็นดิจิทัล) หรือวิธีอื่นที่คุณต้องการระบุว่ามีสวิตช์เปิดใช้งานอยู่และเป็นสวิตช์ตัวใด

หากคุณต้องการ คุณสามารถใช้ออสซิลเลเตอร์ที่ควบคุมด้วยแรงดันไฟฟ้าเพื่อระบุสิ่งนี้ อาจมีไฟกะพริบหรือเสียง ใน ible นี้ ฉันจะแกล้งทำเป็นว่าเรากำลังใช้ AVR แต่ในโลกของคุณ คุณสามารถแสร้งทำเป็นอะไรก็ได้ที่ทำให้คุณมีความสุข ฉันคิดถึงบ๊อบรอส

ขั้นตอนที่ 2: ตัวแบ่งแรงดัน

ตัวแบ่งแรงดัน
ตัวแบ่งแรงดัน
ตัวแบ่งแรงดัน
ตัวแบ่งแรงดัน

โดยพื้นฐานแล้ว วิธีที่เราจะทำเช่นนี้คือการใช้เทคนิคและวงจรที่เรียกว่าตัวแบ่งแรงดันไฟ ตัวแบ่งแรงดันทำอย่างที่คุณอาจเดาได้ แบ่ง V,, in,, แรงดันไฟตามค่าที่คุณกำหนด คุณสามารถแบ่งแรงดันไฟด้วยส่วนประกอบต่างๆ ได้ รวมถึงตัวเก็บประจุและตัวเหนี่ยวนำ แต่ในที่นี้ ฉันจะทำกับตัวต้านทาน 'ol ที่ดี แนวคิด สิ่งที่เรากำลังทำคือการใส่สององค์ประกอบในอนุกรมซึ่งจะทำให้เกิดแรงดันไฟฟ้าตกข้ามส่วนประกอบแต่ละส่วน ดูรูปแรกถ้าไม่เข้าใจ มีความแตกต่างที่อาจเกิดขึ้นจากรางถึงราง 9V ระหว่าง 9V ถึง 0V มีตัวต้านทานสองตัวต่ออนุกรมกัน สิ่งเหล่านี้จะประสบกับแรงดันตกคร่อมตัวเอง ขึ้นอยู่กับความต้านทาน ตามที่คุณอาจจำได้จาก V = IR หากคุณทำการวัดแรงดันไฟระหว่างตัวต้านทานสองตัว คุณจะได้ค่าระหว่าง 9V ถึง 0V ขึ้นอยู่กับว่าแรงดันตกคร่อมตัวต้านทานตัวแรกมากน้อยแค่ไหน มีสูตรที่ตรงไปตรงมาสำหรับการคำนวณแรงดันตกคร่อมตัวต้านทานในสถานการณ์นี้ และดูเหมือนว่านี้ ให้แรงดันไฟฟ้าเหนือตัวต้านทาน 1 (R1) เป็น V1 และแรงดันไฟฟ้าเหนือตัวต้านทานสองตัว (R2) เป็น V2 เนื่องจากฉันไม่สามารถใช้การจัดรูปแบบได้อีกต่อไป ให้ดูที่รูปที่ 2 ด้านล่างสำหรับสูตร… ดังนั้นในตัวต้านทานแบบหารของเรา แรงดัน Vout สามารถกำหนดได้โดยสูตรของเราสำหรับ V2 (เนื่องจากเราจะอ้างอิง GND ถึง 0V) สิ่งนี้เกี่ยวข้องกับการตรวจพบสวิตช์จำนวนมากจากพินเดียว เอาล่ะเปิดหน้าแล้วฉันจะแสดงให้คุณเห็น!

ขั้นตอนที่ 3: บันไดแบ่งแรงดัน

บันไดแบ่งแรงดัน
บันไดแบ่งแรงดัน

ทีนี้ สมมติว่าเรามีสวิตช์ทั้งหมดของเรา บางทีอาจจะหกหรือแปดหรือสิบหก ทั้งหมดเชื่อมต่อผ่านตัวต้านทานซึ่งแต่ละตัวทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้า ดังนั้นเมื่อสถานะของขาสวิตช์เปลี่ยนไป แรงดันไฟฟ้าจะถูกอ่านและขึ้นอยู่กับระดับแรงดันไฟฟ้า เรา สามารถทราบได้ว่าสวิตช์ใดเพิ่งเปิดใช้งาน ดูด้านล่าง ในภาพด้านล่าง ฉันได้เชื่อมต่อสวิตช์สองช่วงตึก บล็อกบนสุดมีสวิตช์สองตัว และบล็อกล่างสุดมีสวิตช์ห้าตัว คุณสามารถเชื่อมต่อสวิตช์แยก ชั่วขณะ สัมผัส ฯลฯ ในลักษณะเดียวกันได้ สิ่งสำคัญที่ควรสังเกตคือตัวต้านทานที่สวิตช์ของคุณเชื่อมต่ออยู่ ในตัวอย่างของฉัน ฉันได้เพิ่มความต้านทานของตัวต้านทานตัวถัดไปเกือบสองเท่าเพื่อสร้างช่องว่างแรงดันไฟที่วัดได้ง่ายและไม่ผิดเพี้ยนสำหรับสวิตช์ก่อนหรือหลัง หากคุณไม่เคยสังเกตมาก่อน ให้มองอีกครั้ง และตระหนักว่าเรากลับมาที่ตัวแบ่งแรงดันไฟฟ้าแบบต้านทานเพื่อนเก่าของเรา ตัวต้านทานตัวแรกคือ 10k ohm เชื่อมต่อกับ 5V และตัวต้านทานตัวที่ 2 ซึ่งเป็นตัวต้านทานที่จะกำหนด Vออก สำหรับพิน SWITCH_ADC เชื่อมต่อกับสวิตช์แต่ละตัว ดังนั้น สวิตช์แต่ละตัวจึงเชื่อมโยงกับแรงดันไฟฟ้า Vout เฉพาะที่สามารถอ่านได้จากพิน ADC ที่เชื่อมต่อที่ SWITCH_ADC ถัดไป กำหนด Vout ที่คาดหวังจากสวิตช์แต่ละตัวเช่นนั้น

Vout = วิน * (R2 / (R1 + R2))

สำหรับสวิตช์หนึ่ง:

Vout = 5V * (500 / (10000 + 500)) = 5*0.048 = 0.24V หรือ 240 mV

สำหรับสวิตช์สอง:

Vout = 5V * (2200 / (10000 + 2200)) = 5 * 0.18 = 0.9V หรือ ~ 900mV

และอื่น ๆ.. คุณสามารถแทนที่ค่าของคุณเองสำหรับ R2 ได้หากคุณมีตัวต้านทานบางตัวเท่านั้น…สิ่งสำคัญที่นี่คือการรักษาช่องว่างระหว่างแรงดันไฟฟ้าที่กว้างเพียงพอระหว่างสวิตช์เพื่อให้เกิดข้อผิดพลาดใด ๆ บน ADC นำคุณเข้าสู่แรงดันไฟฟ้าที่คาดหวังจากสวิตช์ข้างเคียง ฉันพบสิ่งที่ง่ายที่สุดที่จะทำคือสร้างบันไดแบ่งและวางมัลติมิเตอร์/โวลต์มิเตอร์บนพิน ADC แล้วกดแต่ละพินแล้วดูว่าคุณจะได้ค่าใด พวกเขาควรจะเป็นจุดที่ดีในสิ่งที่คุณคำนวณ เมื่อคุณมีค่าแรงดันที่คาดหวังทั้งหมดจากสวิตช์แต่ละตัวโดยใช้ตัวต้านทานเฉพาะแล้ว คุณสามารถให้ MCU ของคุณอ่านพิน ADC และเปรียบเทียบกับค่าที่ทราบของคุณเพื่อพิจารณาว่าสวิตช์ตัวใดถูกกด ตัวอย่างเช่น สมมติว่าคุณได้ลงทะเบียนรูทีนบริการขัดจังหวะซึ่งจะถูกเรียกเมื่อใดก็ตามที่มีการเปลี่ยนแปลงที่ตรวจพบบนพิน ADC ภายใน ISR นั้น คุณสามารถอ่าน ADC และเปรียบเทียบค่านั้นกับตารางสวิตช์ของคุณได้ หากคุณใช้ค่า ADC 8 บิต แรงดันไฟฟ้าของคุณจะถูกแปลงเป็นตัวเลขระหว่าง 0 ถึง 255 ซึ่งสอดคล้องกับแรงดันไฟฟ้าระหว่าง 0V ถึง 5V ถือว่าคุณได้กำหนดค่า ADC ด้วยวิธีนี้

ขั้นตอนที่ 4: สรุป

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

แนะนำ: