สารบัญ:
- ขั้นตอนที่ 1: ฮาร์ดแวร์ที่จำเป็น
- ขั้นตอนที่ 2: ภาพรวมของกรณีทดสอบ
- ขั้นตอนที่ 3: ATtiny84 กรณีที่ 1 - แยกเอาต์พุตแอปพลิเคชัน
- ขั้นตอนที่ 4: ATtiny84 กรณีที่ 2 - แยกอินพุตแอปพลิเคชัน
- ขั้นตอนที่ 5: ATtiny85 Case 1 - แยกเอาต์พุตแอปพลิเคชัน
- ขั้นตอนที่ 6: ATtiny85 กรณีที่ 2 - แยกอินพุตแอปพลิเคชัน
วีดีโอ: ATtiny84/85 พินอินเทอร์เฟซ SPI นำมาใช้ใหม่: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
คำแนะนำนี้เป็นการติดตาม "ATtiny84/85 In-circuit Debugging พร้อม Serial Output" ที่สอนได้และขยายการกำหนดค่าฮาร์ดแวร์และซอฟต์แวร์นั้นเพื่อแก้ไขปัญหาการใช้พินดาวน์โหลดการเขียนโปรแกรมซ้ำโดยโปรแกรมแอปพลิเคชัน โดยรวมแล้ว ระหว่างสิ่งนี้กับส่วนที่ 1 ที่สอนได้ มีการอภิปราย/สาธิตหัวข้อต่อไปนี้:
หัวข้อ | ATtiny84 | ATtiny85 |
---|---|---|
การสื่อสารแบบอนุกรมโดยใช้คลาส SoftwareSerial | NS | NS |
การแชร์พินอุปกรณ์ระหว่างแอปพลิเคชันและการดาวน์โหลด | NS | NS |
ปักหมุด เปลี่ยน อินเตอร์รัปต์ | NS | |
ขัดจังหวะภายนอก | NS | |
สลีปในโหมด POWER_DOWN; ตื่นมาขัดจังหวะ | NS | |
วิธีแก้ปัญหาสำหรับข้อผิดพลาดลิงก์เวกเตอร์ขัดจังหวะ "กำหนดแบบทวีคูณ" ที่เกี่ยวข้องกับ SoftwareSerial | NS | |
แก้ไข, ดาวน์โหลด, ดีบัก, … วงจรการพัฒนาสำหรับอุปกรณ์ ATtiny | NS | NS |
การเพิ่มส่วนประกอบฮาร์ดแวร์ I/O ให้กับหมุดตัวใดตัวหนึ่งที่ทุ่มเทให้กับอินเทอร์เฟซการเขียนโปรแกรม SPI ในบางครั้งอาจทำได้ แต่บางครั้งก็ไม่ ตัวอย่างเช่น การเพิ่ม LED ให้กับ MISO จะทำให้ LED กะพริบระหว่างการดาวน์โหลด และจากนั้นจะพร้อมใช้งานสำหรับแอปพลิเคชัน อย่างไรก็ตาม การเพิ่ม Piezo Buzzer ให้กับ MISO จะส่งผลให้มีเสียงกรี๊ดที่น่ากลัวตามมาด้วยการดาวน์โหลดล้มเหลว
คำแนะนำนี้จะอธิบายวิธีใช้มัลติเพล็กเซอร์ 4x2:1 เพื่อ "กู้คืน" การใช้พินที่กำหนดให้กับสัญญาณอินเทอร์เฟซ SPI MISO, MOSI และ SCK โดยการป้องกันระหว่างการดาวน์โหลด การใช้พิน RESET ซ้ำต้องมีการเปลี่ยนฟิวส์และไม่ครอบคลุมในแนวทางนี้ การกำหนดพินแบบคู่ทำได้โดยใช้มัลติเพล็กเซอร์เพื่อสลับระหว่างแอปพลิเคชันและอินพุตการเขียนโปรแกรมขึ้นอยู่กับว่ากำลังดาวน์โหลดอยู่หรือไม่ มีโค้ดและแผนผังสำหรับทั้ง ATtiny84 และ ATtiny85 การกำหนดค่า ATiny84 ได้รับการแก้ไขก่อน เนื่องจากมีพอร์ต I/O สองพอร์ต และสามารถใช้เพื่อแสดงปัญหา/วิธีแก้ไขเพิ่มเติม หลังจากการสนทนาของ tiny84 ได้มีการพูดถึงสถานการณ์เดียวกันสำหรับ ATtiny85
ขั้นตอนที่ 1: ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็นส่วนใหญ่แสดงอยู่ในส่วนที่ 1 ที่สอนได้ ดังนั้นเฉพาะฮาร์ดแวร์ใหม่ที่ระบุไว้ด้านล่าง
ชื่อ | แหล่งที่เป็นไปได้ | ใช้อย่างไร |
---|---|---|
4x2:1 มัลติเพล็กเซอร์ | Mouser | ประกอบด้วยสวิตช์ 2 อินพุต 1 เอาต์พุต 4 ตัว ซึ่งเป็นกลไกที่ใช้สัญญาณอินเทอร์เฟซ SPI และ I/O ของแอปพลิเคชันร่วมกัน |
สวิตช์ SPST | สวิตช์ประเภทใดก็ได้ (ชั่วขณะหรือสลัก) จะทำงาน สวิตช์นี้ใช้เพื่อแสดงการแชร์พินสำหรับอินพุตแอปพลิเคชัน | |
ตัวต้านทาน 10K | ตัวต้านทานแบบดึงลงสำหรับสวิตช์ SPST เพื่อหลีกเลี่ยงอินพุตแบบลอยตัว |
มัลติเพล็กเซอร์เป็นกุญแจสำคัญในการแยกการใช้งานการดาวน์โหลดพินออกจากการใช้แอพพลิเคชั่น ฟังก์ชันการทำงานโดยรวมของมัลติเพล็กเซอร์ 4x2:1 ค่อนข้างตรงไปตรงมา ประกอบด้วยสัญญาณควบคุม 2 ตัวและสวิตช์ที่ทำงานเหมือนกัน 4 ตัว ลักษณะการทำงานของพินมัลติเพล็กเซอร์แต่ละพินมีการกล่าวถึงด้านล่าง:
เข็มหมุด | ชื่อ | การทำงาน |
---|---|---|
15 | NS | ตามที่ระบุไว้ในตารางความจริง มัลติเพล็กเซอร์จะทำงานเมื่อพินเปิดใช้งาน G ต่ำเท่านั้น เนื่องจากเราไม่ต้องการปิดใช้งานมัลติเพล็กเซอร์โดยสิ้นเชิง พิน 15 จะเชื่อมต่อโดยตรงกับกราวด์ |
2-4; 5-7; 9-11;12-14 | A(อินพุต), B (อินพุต), Y(เอาต์พุต) | มี 4 อินพุต 2 ตัว; สวิตช์ 1 เอาต์พุตโดยแต่ละกลุ่มมี 3 พินที่มีหมายเลขเรียงตามลำดับ A (อินพุต), B (อินพุต), Y (เอาต์พุต) เช่น สำหรับสวิตช์ 1; พิน 2=1A; พิน 3=1B; พิน 4=1Y. |
1 | เลือก | เมื่อ Select ต่ำ สวิตช์อินพุต A จะเชื่อมต่อกับพินเอาต์พุตของสวิตช์ที่เกี่ยวข้อง Y เมื่อตัวเลือกสูง สวิตช์อินพุต B จะเชื่อมต่อกับเอาต์พุตแทน สวิตช์ควบคุมพร้อมกันโดยสัญญาณ Select และทำงานเหมือนกันหมด |
8 | GND | มัลติเพล็กเซอร์ IC กราวด์ |
16 | VCC | เพาเวอร์ไอซีมัลติเพล็กเซอร์ |
ขั้นตอนที่ 2: ภาพรวมของกรณีทดสอบ
สองสถานการณ์สำหรับการใช้พินซ้ำนั้นขึ้นอยู่กับว่าพินนั้นเป็นอินพุตหรือเอาต์พุตของแอปพลิเคชัน ขั้นตอนในการจัดการอินพุตจะเหมือนกันเสมอ ขั้นตอนสำหรับผลลัพธ์ของแอปพลิเคชันจะเหมือนกันโดยไม่คำนึงถึงส่วนประกอบฮาร์ดแวร์ ถึงกระนั้น คำอธิบายก็ง่ายขึ้นและหวังว่าจะชัดเจนขึ้นหากมีตัวอย่างเฉพาะเจาะจง เลย์เอาต์ที่เรียบง่ายสำหรับทั้งสองกรณีแสดงไว้ด้านบน สำหรับการตั้งค่าโดยละเอียดในภายหลังในการเชื่อมต่อจะกลายเป็นรังของกระรอก ดังนั้นอาจเป็นประโยชน์ที่จะอ้างอิงกลับไปที่ไดอะแกรมที่สะอาดกว่านี้
RESET เป็นตัวเลือกที่สมบูรณ์แบบสำหรับสัญญาณมัลติเพล็กเซอร์ Select เนื่องจากสัญญาณจะต่ำระหว่างการดาวน์โหลด แต่จะกลับไปสูงเมื่อการดาวน์โหลดเสร็จสิ้น โปรดทราบว่าสวิตช์มัลติเพล็กเซอร์ใด ๆ สามารถใช้ได้สำหรับทั้งสองกรณี เนื่องจากสวิตช์ทั้งหมดทำงานเหมือนกัน นอกจากนี้ ไม่มีตัวอย่างใดที่ "สมจริง"; พวกเขาได้รับเลือกให้เป็นวิธีที่ตรงไปตรงมาที่สุดในการแสดงเทคนิคการแยกตัว
-
กรณีเอาต์พุต: เอาต์พุต LED จาก ATtiny84 พิน 4 (SCK) ถูกแยกโดยใช้สวิตช์มัลติเพล็กเซอร์ 2
- เชื่อมต่อมัลติเพล็กเซอร์พิน 2A กับกราวด์
- เชื่อมต่อมัลติเพล็กเซอร์พิน 2B กับ ATtiny85 พิน 4
-
เชื่อมต่อเอาต์พุต 2Y กับ LED anode
-
ผลลัพธ์ที่คาดหวัง:
- ไฟ LED ดับระหว่างการดาวน์โหลดเนื่องจากเชื่อมต่อกับ 2A กราวด์
- LED ติดอยู่กับเอาต์พุตของแอปพลิเคชั่นพิน 4 หลังจากดาวน์โหลดผ่าน 2B และเริ่มกะพริบ
-
-
กรณีอินพุต: อินพุตสวิตช์ SPST เป็น ATtiny84 พิน 6 (MOSI) ถูกแยกโดยใช้สวิตช์มัลติเพล็กเซอร์ 3
- ลวดตะกั่ว MOSI จากส่วนหัวของโปรแกรมเมอร์ AVR ถูกย้ายไปที่ 3A
- สวิตช์อินพุต 3B เชื่อมต่อกับเอาต์พุต SPST
-
เอาต์พุต 3Y เชื่อมต่อกับ ATtiny84 พิน 6
- 3A, MOSI, เชื่อมต่อกับพิน 6 ระหว่างการดาวน์โหลด
- 3B, เอาต์พุต SPST, เชื่อมต่อกับพิน 6 หลังจากดาวน์โหลด
กรณีที่ 1 สำเร็จหากไฟ LED ไม่กะพริบระหว่างการดาวน์โหลดโปรแกรม จากนั้นจะกะพริบทุกๆ สองวินาทีหลังจากดาวน์โหลดตามที่คาดไว้ภายใต้การควบคุมของโปรแกรม หากไม่มีการแยก LED จะกะพริบระหว่างการดาวน์โหลดเนื่องจากเชื่อมต่อโดยตรงกับสัญญาณ SCK ซึ่งจะเปลี่ยนสถานะเป็นการรับ/ส่งข้อมูลนาฬิกา
กรณีที่ 2 สำเร็จหากสัญญาณ MOSI ถูกส่งต่อไปยัง ATtiny84 ระหว่างการดาวน์โหลด นั่นคือ การดาวน์โหลดไม่ล้มเหลว และ LED จะตอบสนองต่อการเปิด/ปิด SPST หลังจากดาวน์โหลด กรณีที่ 2 ป้องกันความล้มเหลวในการดาวน์โหลดที่ไม่น่าจะเกิดขึ้นได้ หากไม่มีการแยก สวิตช์ SPST จะทำให้เกิดความล้มเหลวหาก 1) ใช้สวิตช์แบบสลัก และ 2) สวิตช์ถูกปล่อยไว้ที่ตำแหน่งเปิดระหว่างการดาวน์โหลด เมื่อแยกโดยมัลติเพล็กเซอร์ สวิตช์จะไม่ทำให้การดาวน์โหลดล้มเหลวไม่ว่าในกรณีใดๆ ยาวหน่อยแต่ก็สบายใจสำหรับคนแก่อย่างเรา
ผลที่ตามมาอย่างหนึ่งของการใช้มัลติเพล็กเซอร์คือส่วนประกอบฮาร์ดแวร์ไม่สามารถเชื่อมต่อโดยตรงกับพิน I/O ของไมโครคอนโทรลเลอร์ได้อีกต่อไป สิ่งนี้ค่อนข้างไม่สะดวก แต่อนุญาตให้ส่วนประกอบยังคงอยู่บนเขียงหั่นขนมระหว่างการทดสอบพร้อมกับฮาร์ดแวร์แอปพลิเคชันอื่น ๆ และสามารถย้ายกลับไปที่ตำแหน่งที่ถูกต้องเมื่อการทดสอบเสร็จสิ้น
ขั้นตอนที่ 3: ATtiny84 กรณีที่ 1 - แยกเอาต์พุตแอปพลิเคชัน
ขั้นตอนนี้อธิบายการตั้งค่าสำหรับการแชร์พินเอาต์พุตของแอปพลิเคชันพร้อมสัญญาณดาวน์โหลด ตัวอย่างที่ใช้คือ LED ที่ต่อกับพิน 4 (SCK) การใช้ LED ที่มีอยู่เป็นตัวอย่างช่วยให้เน้นการเพิ่มมัลติเพล็กเซอร์ไปยังสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ส่วนที่ 1
-
ฮาร์ดแวร์
- เพิ่มมัลติเพล็กเซอร์ไปที่เขียงหั่นขนมในตำแหน่งสัมพัทธ์ที่แสดงในแผนภาพด้านบน มัลติเพล็กเซอร์อยู่ในตำแหน่งตรงกลางเพื่อให้มีที่ว่างสำหรับสวิตช์ SPST ที่จำเป็นสำหรับกรณีที่ 2
- ขยายสัญญาณ RESET ไปยังมัลติเพล็กเซอร์โดยเพิ่มสายตะกั่ว (แนะนำสีเหลือง) จาก ATtiny84 พิน 11 ไปยังมัลติเพล็กเซอร์พิน 1
-
การตั้งค่าฮาร์ดแวร์ที่เหลือเป็นไปตามขั้นตอนที่2
- เชื่อมต่อมัลติเพล็กเซอร์พิน 2A โดยตรงกับกราวด์
- เชื่อมต่อพิน 2B กับ ATtiny84 พิน 4
-
เชื่อมต่อเอาต์พุต 2Y กับ LED anode
-
ผลลัพธ์ที่คาดหวัง:
- ระหว่างการดาวน์โหลด 2Y เชื่อมต่อกับกราวด์ (2A) ดังนั้น LED ยังคงดับอยู่
- หลังจากดาวน์โหลด 2Y เชื่อมต่อกับ ATtiny84 pin 4 - แอปพลิเคชั่น LED control
-
-
ซอฟต์แวร์
- รหัสส่วนที่ 1 ถูกนำมาใช้ซ้ำ ได้จากส่วนที่ 1 สอนได้มากกว่าทำซ้ำที่นี่
- โหลดและคอมไพล์โปรแกรมส่วนที่ 1 ใน Arduino IDE
- เสียบโปรแกรมเมอร์ Tiny AVR เข้ากับพอร์ต USB ของ PC
-
เสียบสาย Adafruit USB เข้ากับสาย Serial เข้ากับพอร์ต USB ตัวที่สอง
- พอร์ต COM ถูกสร้างขึ้นและพร้อมใช้งานโดยอัตโนมัติในรายการพอร์ต IDE
- เปิดหน้าต่าง COM
- ดาวน์โหลดโค้ดที่คอมไพล์ไปยัง ATtiny84
ผลลัพธ์ของโปรแกรมแอปพลิเคชันเหมือนกับส่วนที่ 1 เนื่องจากการเปลี่ยนแปลงเพียงอย่างเดียวคือการย้าย LED ไปยังตำแหน่งที่ "มีการป้องกัน": ไฟ LED จะกะพริบทุกๆ 2 วินาที; เอาต์พุตแบบอนุกรมจะเหมือนกัน ข้อแตกต่างประการหนึ่งที่ควรเกิดขึ้นคือ LED จะไม่กะพริบอีกต่อไประหว่างการดาวน์โหลด เนื่องจากในระหว่างนั้น ไฟ LED จะเชื่อมต่อกับกราวด์ผ่านพินมัลติเพล็กเซอร์ 2A
ขั้นตอนที่ 4: ATtiny84 กรณีที่ 2 - แยกอินพุตแอปพลิเคชัน
ขั้นตอนนี้สร้างขึ้นจากการตั้งค่าสำหรับกรณีการแยกเอาต์พุตก่อนหน้า การเปลี่ยนแปลงฮาร์ดแวร์ประกอบด้วยการติดตั้งสวิตช์ SPST กับ ATtiny84 พิน 6 (MOSI) ผ่านมัลติเพล็กเซอร์ ดังนั้นการเปลี่ยนแปลงฮาร์ดแวร์จึงมีน้อย แต่มีการเปลี่ยนแปลงซอฟต์แวร์หลายอย่างเพื่อให้สวิตช์ SPST ควบคุม LED โดยใช้การขัดจังหวะการเปลี่ยนพิน รหัสที่อัปเดตจะอยู่ที่ด้านล่างของส่วนนี้ ควรคัดลอกโค้ดลงใน Arduino IDE แนะนำให้บันทึกภายใต้ชื่อ Multiplexer_Input (ฉันขอโทษสำหรับความยาวของส่วนนี้ แต่มันเป็นหัวใจของจุดประสงค์ของผู้สอนและคิดว่ามันอ่านได้ดีกว่าเป็นเสาหินมากกว่าที่จะแทรกตัวแบ่งเทียม)
อัปเดต | ที่ตั้ง | วัตถุประสงค์ |
---|---|---|
รวมซอฟต์แวร์ "ถูกแฮ็ก" คลาสซีเรียล | รวมมาตรา | ตอนนี้ LED ถูกควบคุมโดยสวิตช์ SPST ผ่านการขัดจังหวะการเปลี่ยนพิน ต้องแก้ไขคลาส SoftwareSerial มิฉะนั้นจะจัดสรรเวกเตอร์ขัดจังหวะการเปลี่ยนพินทั้งหมด ซึ่งทำให้เกิดข้อผิดพลาดในการเชื่อมโยง "หลายคำจำกัดความ" สำหรับเวกเตอร์ (พอร์ต 0) ที่กำหนดให้กับสวิตช์ SPST ควรวางเวอร์ชัน SoftwareSerial ที่ถูกแฮ็กไว้ในไดเร็กทอรีเดียวกันกับโปรแกรม เพื่อให้มีผลกับแอปพลิเคชันนี้เท่านั้น |
คำจำกัดความของพินอินพุต SPST | รวม/ส่วนคำจำกัดความ | การกำหนดอินพุต SPST ให้กับพินอุปกรณ์ พินเป็นอุปกรณ์เฉพาะจึงถูกเพิ่มไปยังส่วน #ifdef ATtiny8x |
โหมดพินอินพุต SPST | ฟังก์ชั่นการตั้งค่า | พิน SPST ได้รับการกำหนดค่าเป็น INPUT |
กำหนดค่าการขัดจังหวะพิน SPST | ฟังก์ชั่นการตั้งค่า | เวกเตอร์ขัดจังหวะถูกกำหนดให้กับพินอินพุต SPST เพื่อให้การเปลี่ยนแปลงสถานะสวิตช์ทำให้เกิดการขัดจังหวะ การลงทะเบียนการกำหนดค่าและประเภทการขัดจังหวะเป็นอุปกรณ์เฉพาะ เพื่อให้โค้ดตรงไปตรงมาที่สุด ความแตกต่างจะได้รับการจัดการภายในส่วน #if ที่กำหนดไว้ |
ตั้งค่าข้อความซีเรียลที่สมบูรณ์ | ฟังก์ชั่นการตั้งค่า | ข้อความเอาต์พุตอนุกรมที่สมบูรณ์ของการตั้งค่ามีการเปลี่ยนแปลงเพื่อสะท้อนถึงแอปพลิเคชัน Multiplexer Input |
เพิ่มฟังก์ชัน ISR ของสวิตช์ SPST | ส่วนรหัส | มีการเพิ่ม ISR สำหรับการขัดจังหวะการเปลี่ยนพิน SPST รหัสเป็นเรื่องปกติ แต่เวกเตอร์ที่ใช้เป็นอุปกรณ์เฉพาะและถูกกำหนดไว้ในส่วนที่ขึ้นกับอุปกรณ์ที่ด้านบนของโปรแกรม เพื่อตรวจสอบว่า ISR เปิดใช้งานอยู่ สถานะ LED จะเปลี่ยนไป แม้ว่าจะไม่มีการห้ามในแอปพลิเคชันจริง แต่ข้อความเอาต์พุตแบบอนุกรมจะถูกสร้างขึ้นเพื่อสะท้อนถึงสถานะ LED ใหม่ |
แก้ไขการประมวลผลแบบวนซ้ำ | ฟังก์ชันลูป | ตอนนี้ ISR ควบคุมการเปิดและปิดไฟ LED เพื่อให้ฟังก์ชันถูกลบออกจากรูทีนลูป เพิ่มการเรียกรูทีนการนอนหลับสำหรับ ATtiny84 เป็น "พิเศษ" สำหรับแอปพลิเคชันนี้ การนอนหลับของ ATtiny85 จะไม่ทำงาน อาจเป็นเพราะการรบกวนของคลาส Software Serial เนื่องจากมันทำงานกับ SoftwareSerial ที่ถูกลบออก |
เพิ่มกิจวัตรการนอนหลับ | ส่วนรหัส | ฟังก์ชันสลีปไม่จำเป็นต้องสาธิตการใช้มัลติเพล็กเซอร์ เพิ่งเพิ่มเข้ามาเพราะโดยปกติแล้วจะต้องการรออินพุตในโหมด POWER_DOWN เพื่อประหยัดพลังงานแทนที่จะทำงานต่อไปผ่านลูปโปรแกรมไม่ทำอะไรเลยจนกว่าอินพุตจะเกิดขึ้น |
แก้ไขรหัสคลาส SoftwareSerial
ต้องเปลี่ยนคลาส SoftwareSerial เพื่อไม่ให้พินเปลี่ยนพอร์ตขัดจังหวะทั้งหมด รหัสคลาส SoftwareSerial อยู่ที่
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src
ค้นหาบน PCINT0_vect ใน SoftwareSerial.cpp เพื่อค้นหาตำแหน่งเริ่มต้นสำหรับการเปลี่ยนแปลงโค้ด เพิ่มโค้ดต่อไปนี้ก่อนคำสั่ง #if ที่กำหนดไว้ (PCINT0_vect) ที่มีอยู่
#if กำหนดไว้ (_AVR_ATtiny84_)
#define MYPORT PCINT1_vect #elif กำหนด (_AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) { SoftwareSerial::handle_interrupt (); }
ตอนนี้แสดงความคิดเห็นในบล็อกของรหัสที่มีอยู่ซึ่งจัดสรรเวกเตอร์ขัดจังหวะพอร์ตตามที่ระบุด้านล่าง (เพียงเพิ่มสัญลักษณ์ความคิดเห็นเริ่มต้นและสิ้นสุดบล็อก /* และ */):
/*
#if กำหนด (PCINT0_vect) ISR (PCINT0_vect) { SoftwareSerial:: handle_interrupt (); } #endif #if กำหนด (PCINT1_vect) ISR (PCINT1_vect) { //SoftwareSerial:: handle_interrupt (); ISR(PCINT1_vect, ISR_ALIASOF(PCINT0_vect)); } #endif #if กำหนด (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF(PCINT0_vect)); #endif #if กำหนด (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF(PCINT0_vect)); #เอนดิฟ */
กำหนดค่าฮาร์ดแวร์
สวิตช์ SPST ต่ออยู่กับ ATtiny84 pin 6 (MOSI) ตามที่ระบุไว้ในขั้นตอนที่ 2 ขั้นตอนนี้จะทำซ้ำที่นี่เพื่อความสะดวก
- เชื่อมต่อสวิตช์อินพุต 3A กับส่วนหัวของโปรแกรมเมอร์ Tiny AVR MOSI lead
- เชื่อมต่อ 3B กับสวิตช์ SPST บนพินเอาต์พุต
-
เชื่อมต่อ 3Y กับ ATtiny84 พิน 6
-
ผลลัพธ์:
- 3A, MOSI จะถูก gate ผ่าน ATtiny84 pin 6 ระหว่างการดาวน์โหลด
- 3B, เอาต์พุต SPST จะถูกเชื่อมต่อกับพิน 6 หลังจากดาวน์โหลด
-
เรียกใช้โปรแกรม
ก่อนวิ่ง ให้วางสวิตช์ SPST ไว้ที่ตำแหน่งปิด มิฉะนั้น LED จะเปิดขึ้นเมื่อปิดสวิตช์และในทางกลับกัน ทำตามขั้นตอนสำหรับขั้นตอนที่ 3 เพื่อโหลด คอมไพล์ และดาวน์โหลดแอพพลิเคชั่นอินพุตโปรแกรมโดยใช้ Arduino IDE ดังเช่นเมื่อก่อน ไฟ LED ไม่ควรกะพริบระหว่างการดาวน์โหลด ดังนั้นการบ่งชี้เพียงอย่างเดียวว่าโปรแกรมกำลังทำงานอยู่จะเป็นข้อความซีเรียลเมื่อสิ้นสุดขั้นตอนการตั้งค่า: SETUP Complete - Input Example
ณ จุดนี้โปรแกรมกำลังรออินพุตจากสวิตช์ SPST การวางสวิตช์ในตำแหน่งเปิดจะทำให้ไฟ LED เปิดขึ้น การเปลี่ยนกลับเป็นตำแหน่งปิดจะทำให้ LED ดับลง ข้อความเอาต์พุตตรวจสอบว่า ISR ถูกเรียกใช้ (ISR: Led HIGH, ISR: Led LOW) สังเกตลำดับของข้อความอนุกรมคือ GO TO SLEEP ก่อนรอการเปลี่ยนแปลงสถานะสวิตช์ เมื่อได้รับอินพุตสวิตช์ ISR จะถูกเรียกใช้ สลับ LED และบันทึกการเปลี่ยนแปลง จากนั้นการประมวลผลจะรับสายหลังจากการเรียกสลีปเนื่องจากการขัดจังหวะปลุกโปรเซสเซอร์
โปรแกรมสำหรับคำแนะนำนี้:
//************************************************************************
// ส่วนที่ 2: แอปพลิเคชัน/ดาวน์โหลดการแชร์พินอุปกรณ์ //. แก้ไขโค้ดส่วนที่ 1 เพื่อรองรับการใช้พินซ้ำของแอปพลิเคชัน // กำหนดให้กับอินเทอร์เฟซการเขียนโปรแกรม SPI // รหัส "Comon" สำหรับ ATtiny85 และ ATtiny84 //****************************************** ******************************** #include "SoftwareSerial.h" // Modified Arduino SoftwareSerial class #include // ในขณะที่ รหัสการประมวลผลเป็นเรื่องปกติ พินที่ใช้เป็นอุปกรณ์เฉพาะ #if กำหนด (_AVR_ATtiny84_) || กำหนด (_AVR_ATtiny84A_) #define ledPin 4 // สลับเพื่อเปิด/ปิด Led ที่เชื่อมต่อ #define rxPin 9 // พินที่ใช้สำหรับ Serial รับ #define txPin 10 // พินที่ใช้สำหรับการส่งแบบอนุกรม #define SpstPin 6 // อินพุตจากสวิตช์ SPST (MOSI) #define ISR_VECT PCINT0_vect // สวิตช์ SPST Pin เปลี่ยนเวกเตอร์ขัดจังหวะ #elif ที่กำหนด (_AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // อินพุตจากสวิตช์ SPST (INT0) #define ISR_VECT INT0_vect // SPST switch Pin เปลี่ยนเวกเตอร์ขัดจังหวะ #else #error โปรเจ็กต์นี้รองรับ ATiny84 และ ATtiny85 เท่านั้น #endif // สร้างอินสแตนซ์ของ Software Serial class ที่ระบุอุปกรณ์ // พินที่จะใช้สำหรับรับและส่ง SoftwareSerial mySerial (rxPin), txPin); //------------------------------------------------ ------------------------ // เริ่มต้นทรัพยากรการประมวลผล //-------------------------------- -------------------------------------------------- --- การตั้งค่าเป็นโมฆะ () { mySerial.begin (9600); // เริ่มการหน่วงเวลาการประมวลผลแบบอนุกรม (2000); // ให้เวลาพอร์ต Serial Com เพื่อเริ่มต้นใช้งานให้เสร็จสิ้น // มิฉะนั้น เอาต์พุตที่ 1 อาจหายไปหรือ pinMode ที่อ่านไม่ออก (ledPin, OUTPUT); // กำหนดค่าพินนำสำหรับ OUTPUT pinMode (SpstPin, INPUT); // กำหนดค่าพินสวิตช์ SPST เป็น INPUT #if กำหนดไว้ (_AVR_ATtiny84_) || (_AVR_ATtiny84A_) // ตั้งค่าการขัดจังหวะการเปลี่ยนพินเพื่อจัดการอินพุตสวิตช์บนพิน 6 (MOSI) GIMSK |= (1<
ขั้นตอนที่ 5: ATtiny85 Case 1 - แยกเอาต์พุตแอปพลิเคชัน
แทนที่จะสร้างการตั้งค่าฮาร์ดแวร์ที่ซ้ำกันสำหรับ ATtiny85 มันอาจจะง่ายกว่าที่จะเริ่มต้นด้วยการกำหนดค่าเสร็จสิ้นสำหรับ ATtiny84 จากขั้นตอนที่ 4 และแทนที่ชิป tiny84 ด้วย tiny85 ฮาร์ดแวร์ที่จำเป็นทั้งหมดมีอยู่แล้ว หากใช้วิธีนี้ ให้หาตำแหน่ง tiny85 เพื่อให้พิน 3 และ 4 เข้าแถวกับสายเคเบิลอนุกรม tx และรับสายไฟ จากนั้นจึงเป็นเรื่องของการย้ายสายตะกั่วอินเทอร์เฟซ SPI เพื่อให้ตรงกับตำแหน่งที่จำเป็นสำหรับ ATtiny85
หากเริ่มจากศูนย์ เพียงทำตามขั้นตอนทั่วไปจากขั้นตอนที่ 3 และแผนภาพด้านบน รหัสเหมือนกับที่ใช้กับ ATtiny84 ในขั้นตอนที่ 3 โดยคาดหวังผลลัพธ์แบบเดียวกัน - ไม่มีการสั่นไหวระหว่างการดาวน์โหลด เมื่อใช้งาน LED จะกะพริบทุกๆ 2 วินาที และข้อความเอาต์พุตแบบอนุกรมจะเป็นไปตามสถานะ LED
ขั้นตอนที่ 6: ATtiny85 กรณีที่ 2 - แยกอินพุตแอปพลิเคชัน
สำหรับการตั้งค่าฮาร์ดแวร์ ให้เริ่มด้วยการกำหนดค่าจากขั้นตอนที่ 5 และเพิ่มสวิตช์ SPST ตามที่ระบุไว้ในแผนภาพด้านบน ฉันใช้สวิตช์ชั่วขณะสำหรับรุ่น tiny85 และทำให้การตรวจสอบง่ายขึ้นเล็กน้อย สังเกตว่าเอาต์พุตของสวิตช์หมุน 180 องศาจากการกำหนดค่า ATtiny84 การเปลี่ยนแปลงนี้ทำให้กำหนดเส้นทางสายเชื่อมต่อได้ง่ายขึ้น เนื่องจากสัญญาณ SPI ทั้ง 3 ตัวอยู่ด้านเดียวกันสำหรับ ATtiny85
ใช้โปรแกรมเดียวกับ ATtiny84 ขั้นตอนที่ 4 คาดหวังผลลัพธ์ทั่วไปเหมือนกัน - LED เปลี่ยนสถานะเมื่อเปิด/ปิดสวิตช์ SPST และข้อความเอาต์พุตแบบอนุกรมบันทึกการเปลี่ยนแปลง ข้อความ GO TO SLEEP หายไป เนื่องจากไม่ได้เรียกใช้ฟังก์ชันการนอนหลับสำหรับ ATtiny85 แม้ว่าจะใช้โปรแกรมเดียวกัน แต่ก็มีความแตกต่างกันอย่างมากในการดำเนินการ เนื่องจาก ATtiny85 มีเพียงหนึ่งพอร์ตรีจิสเตอร์ (พอร์ต 0):
- SoftwareSerial ตอนนี้จัดสรรพอร์ต 0 พินเปลี่ยนการขัดจังหวะสำหรับการสื่อสารแบบอนุกรม (จำได้ว่าเราสามารถใช้พอร์ต 1 สำหรับ ATtiny84)
- การขัดจังหวะสวิตช์ SPST จะต้องใช้กับการขัดจังหวะภายนอก 0 (INT0) เนื่องจาก SoftwareSerial จัดสรรหนึ่งและตัวเดียวเท่านั้นที่ขัดจังหวะการเปลี่ยนพิน สิ่งนี้แสดงให้เห็นจุดที่การขัดจังหวะการเปลี่ยนพินและการขัดจังหวะภายนอกมีความเป็นอิสระทางตรรกะและสามารถใช้ได้ภายในพอร์ตรีจิสเตอร์เดียวกัน
- ไม่มีอะไรได้มาโดยการใช้ SoftwareSerial เวอร์ชันดัดแปลง - มีเพียงพอร์ตเดียวและคลาส SoftwareSerial จะคว้ามันไว้ อย่างไรก็ตาม คลาสที่ถูกดัดแปลงยังคงถูกใช้เพื่อหลีกเลี่ยงการเปลี่ยนแปลงที่ไม่เกี่ยวข้องโดยตรงกับเป้าหมายของขั้นตอนนี้
แนะนำ:
ATTiny84 ไดร์เวอร์ LED 3A Step-Down ที่ใช้ ATTiny84: 7 ขั้นตอน (พร้อมรูปภาพ)
ATTiny84 ไดร์เวอร์ LED 3A Step-Down ที่ใช้ ATTiny84: หากคุณต้องการจ่ายไฟ LED 10W คุณสามารถใช้ไดรเวอร์ 3A LED นี้ได้ ด้วย LED Cree XPL 3 ดวง คุณสามารถบรรลุ 3000 ลูเมน
จอ LCD I2C / IIC - ใช้ SPI LCD กับจอแสดงผล LCD I2C โดยใช้โมดูล SPI เป็น IIC กับ Arduino: 5 ขั้นตอน
จอ LCD I2C / IIC | ใช้ SPI LCD กับจอแสดงผล LCD I2C โดยใช้โมดูล SPI เป็น IIC กับ Arduino: สวัสดีทุกคน เนื่องจาก SPI LCD 1602 ปกติมีสายเชื่อมต่อมากเกินไป ดังนั้นจึงยากมากที่จะเชื่อมต่อกับ Arduino แต่มีโมดูลเดียวในตลาดที่สามารถทำได้ แปลงจอแสดงผล SPI เป็นจอแสดงผล IIC ดังนั้นคุณต้องเชื่อมต่อเพียง 4 สายเท่านั้น
เบื้องต้น* SPI บน Pi: การสื่อสารด้วยตัวตรวจวัดความเร่งแบบ 3 แกน SPI โดยใช้ Raspberry Pi: 10 ขั้นตอน
เบื้องต้น* SPI บน Pi: การสื่อสารด้วยตัวตรวจวัดความเร่งแบบ 3 แกน SPI การใช้ Raspberry Pi: คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีตั้งค่า Raspbian และสื่อสารกับอุปกรณ์ SPI โดยใช้ไลบรารี bcm2835 SPI (ไม่ใช่บิตกระแทก!) นี่ยังคง เบื้องต้นมาก… ฉันต้องเพิ่มรูปภาพของการเชื่อมต่อทางกายภาพให้ดีขึ้น และทำงานผ่านรหัสที่น่าอึดอัดใจบางอย่าง
Arduino Uno เป็นโปรแกรม ATTINY84 (Arduino V. 1.8.5): 6 ขั้นตอน
Arduino Uno ไปยังโปรแกรม ATTINY84 (Arduino V. 1.8.5): การใช้ Arduino Uno เพื่อตั้งโปรแกรม ATTINY84-20PU (รายการ Digikey # ATTINY84-20-PU-ND) คำแนะนำนี้แสดงวิธีใช้แพลตฟอร์ม Arduino เพื่อทำงานกับโปรเซสเซอร์ที่มีขนาดเล็กลง เช่น ATtiny84 (84/44/24) ตัวอย่างนี้มีไว้สำหรับ
การเขียนโปรแกรม ATTiny85, ATTiny84 และ ATMega328P: Arduino As ISP: 9 ขั้นตอน (พร้อมรูปภาพ)
การเขียนโปรแกรม ATTiny85, ATTiny84 และ ATMega328P: Arduino As ISP: คำนำ ฉันเพิ่งพัฒนาโปรเจ็กต์ IoT ที่ใช้ ESP8266 สองสามโปรเจ็กต์ และพบว่าตัวประมวลผลหลักกำลังดิ้นรนเพื่อทำงานทั้งหมดที่ฉันต้องการเพื่อจัดการ ดังนั้นฉันจึงตัดสินใจแจกจ่ายบางส่วน กิจกรรมที่มีความสำคัญน้อยกว่าสำหรับไมโครอื่น