พวงมาลัย LED สำหรับ MK attiny2313. พวงมาลัย LED บนไมโครคอนโทรลเลอร์ และนี่คือตัวอย่างที่จะพูดสด

วันหยุดปีใหม่กำลังใกล้เข้ามาและในโอกาสนี้ฉันอยากจะทำอะไรที่สดใสและรื่นเริง! ฉันตัดสินใจทำพวงมาลัยปีใหม่ อะไรจะสดใสและรื่นเริงไปกว่าพวงมาลัยปีใหม่? - ฉันตัดสินใจที่จะไม่ทำพวงมาลัยธรรมดา แต่เป็นพวงมาลัยที่ซับซ้อน! 12 ช่องพร้อมการควบคุมจากรีโมทคอนโทรล IR เพื่อไม่ให้พวงมาลัยตั้งแต่เริ่มต้นจึงตัดสินใจใช้ผู้บริจาค อวัยวะภายใน สำหรับอะไหล่ให้ใช้มาลัยจีนสำเร็จรูป สิ่งนี้สมเหตุสมผลด้วยเหตุผลดังต่อไปนี้:
— ราคาของมาลัย พูดตามตรงนะ ราคาก็เพียงเล็กน้อย ลองซื้อสายไฟ ไฟ LED อะไหล่ด้วยเงินเท่าเดิม... และถ้าคุณไม่ยึดถือพวงมาลัย LED เป็นเป้าหมาย ตอนนี้มาลัยหลอดไฟก็ขายได้แทบจะไม่มีอะไรเลย
— ปัจจัยสำคัญคือการบัดกรีเส้น LED สำเร็จรูปเข้าด้วยกัน การบัดกรีตัวเอง การหดตัวด้วยความร้อน การทำผิดพลาด และการทำซ้ำ 12 บรรทัดถือเป็นงานที่น่าเบื่อ
- แต่ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันมีมาลัยที่ไม่ทำงานจำนวนหนึ่งวางอยู่รอบ ๆ (พวกเขามักถูกพามาให้ฉันซ่อม - และพวกมันก็จบลง) คุณไม่สามารถใช้เงินกับอันใหม่ได้เลย แต่จงรวบรวมมันจากสิ่งที่คุณมี

ในการเริ่มต้น โปรดดูวิดีโอ:

ความสนใจ!
อันตรายจากแรงดันไฟ 220V!

อันตรายถึงชีวิต!
นั่นเป็นเหตุผล:




ถ้าคุณ ตระหนักถึงอันตรายการประกอบพวงมาลัยดังกล่าวและ ดำเนินการปฏิบัติตามกฎความปลอดภัยเมื่อทำงานกับแรงดันไฟฟ้าที่เป็นอันตรายคุณสามารถอ่านเพิ่มเติมเกี่ยวกับวิธีประกอบพวงมาลัยซุปเปอร์ได้

ผู้ป่วยการ์แลนด์ 1 ราย

เพื่อเป็นการเสียสละ มีการซื้อมาลัย LED ใหม่ 3 อัน - สวยงามมาก :)

ราคา $3 ต่อชิ้น (100 LEDs) แต่ถ้าจีนไม่ช่วยก็จะโกงตัวเอง! อันที่จริงมาลัยมี 3 ช่อง นั่นคือตัวควบคุมนั้นเป็นสี่ช่องทาง แต่มีไทริสเตอร์สามตัวและเส้น LED สามเส้น เพื่อปกปิดความอับอายดังกล่าว จีนจึงผสมไฟ LED สองสีในบรรทัดเดียว สรุปฉันต้องซื้ออีกอัน :( แต่นี่ไม่ใช่ขีดจำกัดของการออมมักมีสองช่องทาง! ระวัง - เปิดกล่องแล้วดูว่าไทริสเตอร์ราคาเท่าไหร่

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

2 โครงการ

นี่คือไดอะแกรมของพวงมาลัยดั้งเดิม:

แผนภาพแสดงการหรี่แสงของช่อง LED โดยไทริสเตอร์ PCR406

เอกสารข้อมูลสำหรับไทริสเตอร์ PCR406

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

แผนผังของตัวควบคุมพวงมาลัยใหม่:

6 การประกอบบอร์ดจ่ายไฟ

ก่อนที่จะประกอบบอร์ดจ่ายไฟ คุณต้องทำการวัดบางอย่างเพื่อคำนวณค่าของตัวต้านทานการดับ ในการดำเนินการนี้ เราเชื่อมต่อบอร์ดคอนโทรลเลอร์แบบบัดกรีกับไมโครคอนโทรลเลอร์เฟิร์มแวร์เข้ากับแหล่งจ่ายไฟภายนอก 5 โวลต์ (แพด +5v และ -5v) และวัดปริมาณการใช้กระแสไฟ ไม่จำเป็นต้องต่อสายไฟ LED เพราะแทบไม่มีผลกระทบต่อการสิ้นเปลืองกระแสไฟ สำหรับไมโครคอนโทรลเลอร์ ATtiny2313 ปกติที่ไม่มีดัชนีตัวอักษร ปริมาณการใช้กระแสไฟควรอยู่ที่ประมาณ 7 - 9 mA สำหรับไมโครคอนโทรลเลอร์ ATtiny2313 ที่มีดัชนี (อาจเป็น A, P...) กระแสจะแตกต่างออกไป

จากการสิ้นเปลืองกระแสไฟที่ได้รับ (Ipot) เราคำนวณความต้านทานของตัวต้านทานการดับในแบตเตอรี่ (เรายอมรับค่าที่ใหญ่กว่าจากช่วงมาตรฐาน):

R = 430 / ไอพอต

ตัวอย่างเช่น ปริมาณการใช้ปัจจุบันของฉันคือ 9 mA ซึ่งหมายถึง R = 430 / 0.009 = 47777 โอห์ม (สมมติว่า 47 kOhm)

การเรียงซ้อนของตัวต้านทานดับไฟได้รับการออกแบบเพื่อกระจายการกระจายพลังงานและลดความร้อน ตัวต้านทานจะต้องมีกำลังอย่างน้อย 0.5 W (และโดยเฉพาะอย่างยิ่ง 1 W แต่ละตัว)

ไดโอดเรียงกระแสและตัวต้านทานดับจะถูกย้ายจากวงจรดั้งเดิม ส่วนที่เหลือจะต้องซื้อ เราวางบอร์ดที่เสร็จแล้วไว้ในตัวพวงมาลัย

เราเชื่อมต่อแหล่งจ่ายไฟและบอร์ดควบคุม (เราใช้สายไฟและปลั๊กจากพวงมาลัยเดิม) อย่าลืมยึดสายไฟที่บัดกรีเข้ากับบอร์ดด้วยกาวร้อน เนื่องจากสายไฟที่คนจีนใช้นั้น ค่อนข้างจะห่วยและอาจหลุดออกได้ทุกเมื่อ

7 การก่อตัวของเส้น LED

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

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

การอธิบายเป็นคำพูดใช้เวลานาน - ดูรูปหรือคิดเองว่าจะบิดมัดอย่างไร:

สายรัดบิดเบี้ยว - ตอนนี้เราประสานเข้ากับคอนโทรลเลอร์เพื่อให้ไฟ LED ของช่องเรียงต่อกันเป็นอนุกรม

8 คำอธิบายการทำงานของพวงมาลัย

เมื่อคุณเสียบพวงมาลัยเข้ากับเครือข่าย พวงมาลัยจะเริ่มทำงานทันทีโดยมีเอฟเฟกต์แบบสุ่ม ในระหว่างการดำเนินการ เอฟเฟกต์จะสุ่มเปลี่ยนซึ่งกันและกัน หากคุณกดปุ่ม เอฟเฟกต์จะสลับกันตามลำดับ:
1 คลื่น
2 ดาวยิง
3 สปาร์ค
4 ล้นช้า
5 ไฟวิ่ง
ไฟกระพริบ 6 ดวง
7 ทุกอย่างไหม้และดับไป
8 ทุกอย่างลุกเป็นไฟ
0 ปิดทั้งหมด

เมื่อคุณเลือกเอฟเฟ็กต์ด้วยปุ่ม มันจะค้างอยู่เป็นเวลานาน แต่ต่อมาเอฟเฟ็กต์จะเริ่มแทนที่กันอีกครั้ง

การทำงานจากรีโมทคอนโทรลจะคล้ายกับการทำงานของปุ่มบนตัวควบคุม (กดปุ่มบนรีโมทคอนโทรล - เอฟเฟกต์จะเปลี่ยนตามลำดับ) หากต้องการศึกษาปุ่มของรีโมทคอนโทรล IR คุณต้องกดปุ่มบนตัวควบคุมค้างไว้จนกว่าพวงมาลัยจะดับลง (ประมาณ 3 วินาที) จากนั้นคุณจะต้องกดปุ่มที่เลือกบนรีโมทคอนโทรล รหัสปุ่มจะถูกเขียนลงในหน่วยความจำแบบไม่ลบเลือนและพวงมาลัยจะกลับสู่เอฟเฟกต์ เนื่องจากรหัสถูกจัดเก็บไว้ในหน่วยความจำแบบไม่ลบเลือน พวงมาลัยจะ "จดจำ" รีโมทคอนโทรลแม้ว่าจะตัดการเชื่อมต่อจากเครือข่ายแล้วก็ตาม

สุดท้ายนี้ ฉันคิดว่ามันคุ้มค่าที่จะเตือน:

ความสนใจ!
วงจรพวงมาลัยไม่ได้ถูกแยกโดดทางไฟฟ้าจากเครือข่าย อันตรายจากแรงดันไฟ 220V!
การสัมผัสส่วนนำไฟฟ้าของพวงมาลัยที่เชื่อมต่อกับเครือข่าย
อันตรายถึงชีวิต!
นั่นเป็นเหตุผล:

- หากคุณไม่เชี่ยวชาญเรื่องไฟฟ้าอย่าทำการออกแบบนี้ซ้ำ
- การดำเนินการใด ๆ (การบัดกรี การวัด ฯลฯ) กับวงจรจะต้องดำเนินการหลังจากตัดการเชื่อมต่อจากเครือข่ายเท่านั้น
— การเขียนโปรแกรมไมโครคอนโทรลเลอร์จะต้องทำแยกจากบอร์ด (เช่น ในเขียงหั่นขนมที่ประกอบเป็นพิเศษเพื่อจุดประสงค์นี้) หรือโดยการจ่ายไฟให้กับบอร์ดพวงมาลัยจาก แหล่งภายนอกแรงดันไฟฟ้า 5 โวลต์ (เช่นจากแบตเตอรี่)
การออกแบบเสร็จแล้วจะต้องแยกออกจากกันอย่างดีและไม่สามารถเข้าถึงได้สำหรับเด็กเล็กและสัตว์
- ระมัดระวังในการประกอบโครงสร้าง!

และนี่คือตัวอย่างที่จะพูดสด:

ส่งของคุณแล้วฉันจะเพิ่มพวกเขาที่นี่

ต้นคริสต์มาสจาก AndreevKV.มันกลายเป็นเรื่องใหญ่!

ต้นคริสต์มาสจาก บอยก้า59- เพื่อนของฉันทุกคนและโดยเฉพาะลูก ๆ รู้สึกยินดีกับเธอ)

และอื่นๆ อีกมากมาย!

สวัสดีปีใหม่!

ทุกคน อารมณ์ดีและสุขสันต์วันหยุด!

อัปเดต 1 (2013)

ฉันไม่ได้วางแผนที่จะทำอะไรกับพวงมาลัยนี้เป็นพิเศษเนื่องจากฉันไม่มีเวลาในปีนี้ แต่ตามคำร้องขอของผู้อ่านฉันยังคงตัดสินใจอัปเดตเล็กน้อย!

มีการเปลี่ยนแปลงเล็กน้อย
เพิ่มเอฟเฟกต์ใหม่ 6 แบบ:
— คลื่นของไฟ LED 2 ดวงวิ่งไปในทิศทางที่ต่างกัน
— การเติมและการลดลงตามลำดับ
— การเติมตามลำดับและการลดลงด้วยคลื่นการเคลื่อนที่แบบแปรผัน
- การเติมและการลบแบบสุ่ม
- การเติมและการกำจัดแบบสุ่มด้วยคลื่นการเคลื่อนที่แบบแปรผัน
- การสั่นไหวที่รุนแรง
เวลาในการทำงานของเอฟเฟกต์เมื่อบังคับเปลี่ยน (รีโมทคอนโทรลหรือปุ่ม) เกือบสองเท่า
นั่นคือทั้งหมดที่ วงจรและฟิวส์ยังคงเหมือนเดิม จำเป็นต้องเติมเงิน เฟิร์มแวร์ใหม่.
- พวงมาลัยซุปเปอร์ 12 ช่อง (อัปเดต 2013)
- ที่มาของการอัพเดตซุปเปอร์การ์แลนด์

มีความสุขมาตอนนี้ 2014!!!

ตัวเลือกซุปเปอร์มาลัยจากผู้อ่านบล็อก

เซอร์เกย์ เชอร์นี (Bleck_S)
พวงมาลัยถูกนำไปใช้บนบอร์ดเดียวโดยใช้ส่วนประกอบ SMD

โครงการพวงมาลัย LED บนไมโครคอนโทรลเลอร์นี้เหมาะอย่างยิ่งสำหรับผู้เริ่มต้น วงจรมีความโดดเด่นด้วยความเรียบง่ายและมีองค์ประกอบขั้นต่ำ

อุปกรณ์นี้ควบคุมไฟ LED 13 ดวงที่เชื่อมต่อกับพอร์ตไมโครคอนโทรลเลอร์ ไมโครคอนโทรลเลอร์ ATMEL ถูกใช้เป็นไมโครคอนโทรลเลอร์: . ด้วยการใช้ออสซิลเลเตอร์ภายใน พิน 4 และ 5 จึงถูกใช้เป็นพอร์ตเพิ่มเติมของไมโครคอนโทรลเลอร์ PA0, PA1 วงจรนี้จัดให้มีการทำงานของโปรแกรมเอฟเฟกต์ 12 โปรแกรม โดย 11 โปรแกรมเป็นโปรแกรมผสมกัน และโปรแกรมที่ 12 เป็นการทำซ้ำเอฟเฟกต์ก่อนหน้าหนึ่งครั้งตามลำดับ การสลับไปยังโปรแกรมอื่นทำได้โดยการกดปุ่ม SB1 โปรแกรมเอฟเฟ็กต์ต่างๆ ได้แก่ การเรียกใช้ไฟเดี่ยว การเพิ่มไฟ การรันเงา และอื่นๆ อีกมากมาย

อุปกรณ์มีความสามารถในการปรับความเร็วของการเปลี่ยนแปลงชุดค่าผสมเมื่อรันโปรแกรมซึ่งทำได้โดยการกดปุ่ม: SB2 - เพิ่มความเร็วและ SB3 - ลดความเร็วโดยที่สวิตช์ SA1 อยู่ในตำแหน่ง "ความเร็วของโปรแกรม" นอกจากนี้ยังสามารถปรับความถี่ไฟ LED ได้ (จากแสงคงที่ไปจนถึงการสั่นไหวเล็กน้อย) ซึ่งทำได้โดยการกดปุ่ม: SB2 - ลดลง (เป็นการกะพริบ) และ SB3 - เพิ่มขึ้น โดยมีเงื่อนไขว่าสวิตช์ SA1 อยู่ใน "การกะพริบ" ตำแหน่งความถี่” สำหรับสวิตช์ SA2 ตำแหน่งปิดจะสอดคล้องกับโหมดสำหรับปรับความเร็วการทำงานของโปรแกรม และตำแหน่งเปิดจะสอดคล้องกับโหมดสำหรับปรับความถี่ของไฟ LED

ลำดับหมายเลขของ LED ในวงจรจะสอดคล้องกับลำดับการส่องสว่างระหว่างการทำงานของโปรแกรม หากจำเป็น สามารถใช้พิน RESET เพื่อรีเซ็ตได้ แต่จะไม่ได้ใช้เป็นพอร์ต PA2 เมื่อตั้งโปรแกรมอุปกรณ์จะเลือกความถี่สัญญาณนาฬิกา 8 MHz จากออสซิลเลเตอร์ภายใน (ฟิวส์ CKSEL3..0 - 0100) แม้ว่าจะเป็นไปได้ที่จะใช้ความถี่ 4 MHz (ฟิวส์ CKSEL3..0 - 0010) โดยมีการเปลี่ยนแปลงที่สอดคล้องกัน ช่วงเวลาของวงจร

ประเภทของไฟ LED ที่ระบุในแผนภาพถูกใช้ในต้นแบบ ไฟ LED ใด ๆ ที่มีแรงดันไฟฟ้า 2-3 โวลต์เหมาะสำหรับวงจร สามารถใช้ตัวต้านทาน R1-R17 เพื่อปรับความสว่างของไฟ LED

คุณสามารถดาวน์โหลดเฟิร์มแวร์ HEX รวมถึงไฟล์โปรแกรมในแอสเซมเบลอร์ได้ด้านล่าง

รายชื่อธาตุกัมมันตภาพรังสี

การกำหนด พิมพ์ นิกาย ปริมาณ บันทึกร้านค้าสมุดบันทึกของฉัน
ดีดี1 MK AVR 8 บิต

เอทีนี่2313

1 ไปยังสมุดบันทึก
ค1 ตัวเก็บประจุด้วยไฟฟ้า100 µF 10 V1 ไปยังสมุดบันทึก
R1-R17 ตัวต้านทาน

1 โอห์ม

17 ไปยังสมุดบันทึก
LED1-LED13 นำLD57113 ไปยังสมุดบันทึก
SB1-SB3 ปุ่ม 3 ไปยังสมุดบันทึก
SA1 สวิตช์ 1

เราได้เรียนรู้ไปแล้วก่อนหน้านี้ แต่มันน่าสนใจกว่ามากในการควบคุมกระบวนการนี้โดยใช้ปุ่มต่างๆ และพวงมาลัย LED จะทำหน้าที่เป็นตัวอย่างภาพที่ดี

การเชื่อมต่อปุ่มเข้ากับไมโครคอนโทรลเลอร์

แผนภาพพวงมาลัยแสดงไว้ด้านล่าง

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

ในการกำหนดค่าพินบางตัวของ MK เป็นอินพุต ควรเขียนเลขศูนย์ลงในบิตที่สอดคล้องกันของรีจิสเตอร์ DDR อย่างไรก็ตามหากไม่ได้ใช้หมุด MK ขอแนะนำให้กำหนดค่าสำหรับอินพุตด้วย เนื่องจากเราจะเชื่อมต่อปุ่มเข้ากับพอร์ต B เท่านั้น เราจะเขียนเลขศูนย์ทั้งหมดลงในการลงทะเบียน DDRB ด้วยคำสั่งต่อไปนี้:

DDRB = 0b00000000;

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

หากบิตรีจิสเตอร์ PORT ถูกตั้งค่าเป็นศูนย์ แสดงว่าพินนั้นมีอิมพีแดนซ์อินพุตสูง

เมื่อบิตถูกตั้งค่าเป็นหนึ่ง ตัวต้านทานแบบดึงขึ้นจะเชื่อมต่อกับพิน MK ตัวต้านทานถูกเรียกเช่นนั้นเนื่องจากมีศักยภาพสูง (+ 5 V) ที่ถูก "ดึงขึ้น" ไปยังจุดที่สอดคล้องกัน วงจรไฟฟ้า- ในกรณีนี้ - ไปที่พินของไมโครคอนโทรลเลอร์

ตรวจสอบสถานะของเอาต์พุต MK โดยใช้ PINx

หากต้องการทราบเมื่อใดก็ตามที่มีศักยภาพอยู่ที่พิน คุณควรตรวจสอบ (อ่าน) บิตที่เกี่ยวข้องในการลงทะเบียน PIN

โดยการเปรียบเทียบ รีจิสเตอร์นี้สามารถเปรียบเทียบได้กับเซ็นเซอร์ คุณสามารถอ่านข้อมูลจากมันเท่านั้น คุณไม่สามารถเขียนอะไรลงไปได้ PIN ตรงกันข้ามกับการลงทะเบียน PORT ซึ่งจะเขียนเฉพาะข้อมูลแต่ไม่ได้อ่านข้อมูล

จะดีกว่าถ้าตั้งค่าการลงทะเบียน PORT เป็นหนึ่งนั่นคือ การใช้ตัวต้านทานแบบดึงขึ้นภายใน MK ตัวเลือกนี้มีการป้องกันเสียงรบกวนอย่างมีนัยสำคัญ เนื่องจากหากต้องการเปลี่ยนศักยภาพสูงไปเป็นค่าต่ำ เอาต์พุตจะต้องเชื่อมต่อโดยตรงกับกราวด์หรือสายทั่วไป

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

เราเชื่อมต่อหน้าสัมผัสหนึ่งของคีย์เข้ากับกราวด์ (สายสามัญ) และอันที่สองกับพินของไมโครคอนโทรลเลอร์ เมื่อเปิดกุญแจ เอาต์พุตจะมีศักย์ไฟฟ้าสูง (+ 5 V) ซึ่งถูกดึงขึ้นโดยตัวต้านทานภายในของ MK ในกรณีนี้ บิตที่สอดคล้องกันของการลงทะเบียน PIN จะถูกตั้งค่าเป็นหนึ่ง

เมื่อคุณกดปุ่ม พินนี้จะเชื่อมต่อกับสายไฟทั่วไป (“ลบ”) และจะมีศักยภาพต่ำปรากฏขึ้น และบิตการลงทะเบียน PIN จะถูกตั้งค่าเป็นศูนย์โดยอัตโนมัติ

โปรดทราบว่าตัวต้านทานแบบดึงขึ้นยังป้องกันวงจรจากการลัดวงจรเมื่อกดปุ่ม

พวงมาลัย LED ในรหัส

ตอนนี้เรามาเขียนโค้ดโปรแกรมทั้งหมดแล้วดูที่แต่ละองค์ประกอบ อัลกอริธึมของโปรแกรมมีดังนี้: เมื่อปิดคีย์แรก "ไฟ" จะเปิดขึ้นในลำดับเดียว และเมื่อปิดคีย์ที่สอง "ไฟ" จะสว่างแตกต่างออกไป หากกดทั้งสองปุ่ม ไฟ LED ทั้งหมดควรจะดับลง

#กำหนด F_ซีพียู 1000000UL // ประกาศความถี่การทำงานของไมโครคอนโทรลเลอร์ 1 MHz

#รวม

#รวม // เชื่อมต่อไลบรารีความล่าช้า

#define Z 300 // ตั้งชื่อค่าดีเลย์ Z

#define VD PORTD // กำหนดชื่อ VD ให้กับพอร์ต D

#define K PORTB // กำหนดชื่อ K ให้กับพอร์ต B ซึ่งปุ่มต่างๆ เชื่อมต่ออยู่

int main (เป็นโมฆะ)

DDRB = 0b00000000; // กำหนดค่าพอร์ต B สำหรับอินพุต

DDRD = 0b11111111; // กำหนดค่าพอร์ต D สำหรับเอาต์พุต

วีดี = 0b00000000; //ปิดไฟทั้งหมด

เค = 0b11111111; // เปิดตัวต้านทานแบบดึงขึ้น

ในขณะที่ (1)

ถ้า (PINB == 0b11111110) // ตรวจสอบว่ากดปุ่มที่ 1 หรือไม่

วีดี = 0b11111111; // ถ้าปิดกุญแจแล้วเราจะกระพริบ "ไฟ"

_ล่าช้า_ms(ซ);

วีดี = 0b00000000;

_ล่าช้า_ms(ซ);

อื่น

วีดี = 0b00000000; // หากกุญแจเปิดอยู่ ไฟ LED ทั้งหมดจะดับลง

ถ้า (PINB == 0b11111101) // ตรวจสอบว่ากดปุ่มที่ 2 หรือไม่

วีดี = 0b00000001; // หากกดปุ่มแล้วให้เปิดไฟ LED ทีละดวง

_ ล่าช้า_ นางสาว(ซ); // ด้วยความล่าช้า 0.3 วินาที

วีดี = 0b00000011;

_ล่าช้า_ms(ซ);

วีดี = 0b00000111;

_ล่าช้า_ms(ซ);

วีดี = 0b00001111;

_ล่าช้า_ms(ซ);

ไฟ LED = 0b00011111;

_ล่าช้า_ms(ซ);

วีดี = 0b00111111;

_ล่าช้า_ms(ซ);

วีดี = 0b01111111;

_ ล่าช้า_ms(ซ);

วีดี = 0b11111111;

_ล่าช้า_ms(ซ);

วีดี = 0b00000000;

_ ล่าช้า_ นางสาว(ซ);

อื่น

วีดี = 0b00000000; - หากไม่ได้ปิดกุญแจ ไฟ LED ทั้งหมดจะดับลง

ผู้ประกอบการ ถ้า และ อื่น

วัตถุประสงค์ของตัวประมวลผลล่วงหน้าและเป็นที่ทราบกันดีจากบทความก่อนหน้านี้ สิ่งใหม่ของเราที่นี่คือคำสั่ง if ถ้า แปลจากภาษาอังกฤษว่า "ถ้า" หากตรงตามเงื่อนไขที่ระบุในวงเล็บ เช่น จริง จากนั้นโค้ดโปรแกรมภายในเครื่องหมายปีกกาจะถูกดำเนินการ ตัวอย่างเช่น หากตัวแปร a มากกว่า 1 หน่วย ตัวแปร c จะถูกกำหนดค่า a + b

ถ้า (ก >1)

ค = ก + ข;

มิฉะนั้น เมื่อค่าของ a น้อยกว่าหรือเท่ากับหนึ่ง โค้ดโปรแกรมในเครื่องหมายปีกกาจะไม่ถูกดำเนินการ

หากมีการดำเนินการเพียงคำสั่งเดียวในวงเล็บปีกกา ไวยากรณ์ C จะช่วยให้คุณสามารถลดความซับซ้อนของสัญลักษณ์และดำเนินการโดยไม่ต้องใช้เครื่องหมายปีกกา:

ถ้า (a >1) c = a + b;

คำสั่ง if ยังทำงานร่วมกับคำสั่ง else ได้ด้วย

ถ้า (a >1) → ถ้า a >1 แล้ว = a + b

ค = ก + ข;

อื่น → มิฉะนั้น c = a - b

ค = ก - ข;

มันทำงานเช่นนี้ ถ้า a > 1 แล้ว c = a + b มิฉะนั้นนั่นคือ เมื่อ a น้อยกว่าหรือเท่ากับ 1 แล้ว c = a – b

อธิบายโค้ดโปรแกรม

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

โปรดทราบว่าคำสั่งการกำหนดประกอบด้วยเครื่องหมายเท่ากับ "=" และคำสั่งเงื่อนไขเท่ากันประกอบด้วยเครื่องหมายเท่ากับสองตัวที่เขียนโดยไม่มีช่องว่าง "=="

เมื่อไม่ได้กดปุ่ม บิตรีจิสเตอร์ PINB จะแสดงบิตที่เกิดจากตัวต้านทานแบบดึงขึ้นสูง ในกรณีนี้ การควบคุมจะส่งผ่านไปยังคำสั่ง else และไฟ LED ทั้งหมดจะถูกปิด

เมื่อปิดคีย์ที่สอง เอาต์พุตที่เชื่อมต่อกับพอร์ต PB1 โค้ดโปรแกรมที่สองจะถูกดำเนินการ และไฟ LED จะเริ่มเปิดทีละดวงโดยมีการหน่วงเวลา 0.3 วินาที

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

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

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

อย่างที่ใครๆ พูดกัน - เตรียมเลื่อนของคุณให้พร้อมในฤดูร้อน...
คุณอาจตกแต่งต้นคริสต์มาสด้วยมาลัยทุกประเภทสำหรับปีใหม่และเป็นไปได้มากว่าพวกเขาจะเบื่อกับความซ้ำซากจำเจของการกระพริบตามานานแล้ว ฉันอยากจะทำอะไรสักอย่าง ว้าว มันกระพริบเหมือนบนต้นคริสต์มาสในเมืองหลวงแต่ในระดับที่เล็กกว่าเท่านั้น หรือวิธีสุดท้ายคือแขวนไว้บนหน้าต่างเพื่อให้ความงามนี้ส่องเมืองจากชั้น 5
แต่อนิจจาไม่มีมาลัยแบบนี้ขาย

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

ผลลัพธ์ที่ได้คือการออกแบบโมดูลแต่ละตัวที่ค่อนข้างเรียบง่ายพร้อมไฟ LED และโมดูลทั่วไปที่ส่งคำสั่งจากคอมพิวเตอร์ไปยังเครือข่ายของโมดูลเหล่านี้

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

ทุกอย่างทำงานอย่างไร

เครือข่ายที่พัฒนาแล้วสามารถรองรับโมดูลทาสได้มากถึง 254 โมดูลซึ่งจะเรียกต่อไปว่า SLAVE - เชื่อมต่อกันด้วยสายเพียง 3 เส้นตามที่คุณเดา - สายสองเส้นเป็นแหล่งจ่ายไฟ +12V สายร่วมและสายที่สามเป็นสัญญาณ
พวกเขามีรูปแบบง่ายๆ:


อย่างที่คุณเห็น รองรับ 4 ช่องทาง ได้แก่ แดง เขียว น้ำเงิน และม่วง
จริงอยู่ ตามผลการทดสอบภาคปฏิบัติ สีม่วงจะมองเห็นได้ชัดเจนในระยะใกล้เท่านั้น แต่อย่างไร! นอกจากนี้เนื่องจากสีอยู่ห่างจากกันมากเกินไป การผสมสีจึงสามารถมองเห็นได้จากระยะไกลเพียง 10 เมตร หากคุณใช้ไฟ LED RGB สถานการณ์จะค่อนข้างดีขึ้น
เพื่อให้การออกแบบง่ายขึ้น เรายังต้องละทิ้งการรักษาเสถียรภาพของควอตซ์ - ประการแรก เอาท์พุตพิเศษจะถูกลบออก และประการที่สอง ค่าใช้จ่ายของเครื่องสะท้อนกลับของควอตซ์ค่อนข้างสังเกตได้ชัดเจน และประการที่สาม ไม่มีความจำเป็นเร่งด่วนสำหรับมัน
น้ำตกป้องกันถูกประกอบบนทรานซิสเตอร์เพื่อไม่ให้พอร์ตคอนโทรลเลอร์ถูกกระแทกโดยไฟฟ้าสถิตย์ - เส้นอาจยังค่อนข้างยาวในกรณีที่รุนแรงมีเพียงทรานซิสเตอร์เท่านั้นที่จะทนทุกข์ทรมาน การเรียงซ้อนคำนวณใน MicroCap และมีเกณฑ์การตอบสนองโดยประมาณที่ประมาณ 7 โวลต์ และขึ้นอยู่กับเกณฑ์อุณหภูมิเล็กน้อย

ตามธรรมเนียมที่ดีที่สุด โมดูลทั้งหมดจะตอบสนองต่อที่อยู่หมายเลข 255 ด้วยวิธีนี้ คุณสามารถปิดโมดูลทั้งหมดได้พร้อมกันด้วยคำสั่งเดียว

โมดูลที่เรียกว่า MASTER ยังเชื่อมต่อกับเครือข่ายด้วย - เป็นตัวกลางระหว่างพีซีและเครือข่ายของโมดูลทาส SLAVE เหนือสิ่งอื่นใด มันเป็นแหล่งที่มาของเวลาอ้างอิงสำหรับการซิงโครไนซ์โมดูลทาสในกรณีที่ไม่มีความเสถียรของควอตซ์

โครงการ:

วงจรประกอบด้วยโพเทนชิโอมิเตอร์เสริม - สามารถใช้ในโปรแกรมบนพีซีเพื่อความสะดวกและรวดเร็วในการปรับพารามิเตอร์ที่ต้องการ ในขณะนี้ ใช้งานเฉพาะในโปรแกรมทดสอบในรูปแบบของความสามารถในการกำหนดโพเทนชิโอมิเตอร์ใด ๆ ให้กับ ช่องใดก็ได้ทั้ง 4 ช่อง วงจรนี้เชื่อมต่อกับพีซีผ่านตัวแปลงอินเทอร์เฟซ USB-UART บนชิป FT232

ตัวอย่างแพ็กเก็ตที่ส่งไปยังเครือข่าย:

จุดเริ่มต้น:

ลักษณะทางไฟฟ้าของสัญญาณ: log.0 สอดคล้องกับ +9...12V และ log.1 สอดคล้องกับ 0...5V

อย่างที่คุณเห็น ข้อมูลจะถูกส่งตามลำดับด้วยความเร็วคงที่ 4 บิต นี่เป็นเพราะส่วนต่างที่จำเป็นสำหรับข้อผิดพลาดในความเร็วในการรับข้อมูล - โมดูล SLAVE ไม่มีความเสถียรของควอตซ์ และวิธีนี้รับประกันการรับข้อมูลโดยมีความเบี่ยงเบนในความเร็วในการส่งข้อมูลสูงถึง +-5% เกินกว่าที่ได้รับการชดเชย โดยวิธีซอฟต์แวร์ซึ่งอิงจากการวัดช่วงเวลาที่สอบเทียบตั้งแต่เริ่มต้นการส่งข้อมูล ซึ่งให้ความต้านทานต่อการดริฟท์ความถี่อ้างอิงอีก +-10%

ที่จริงแล้วอัลกอริทึมการทำงานของโมดูล MASTER นั้นไม่น่าสนใจนัก (มันค่อนข้างง่าย - เราได้รับข้อมูลผ่าน UART และส่งต่อไปยังเครือข่ายของอุปกรณ์ทาส) โซลูชันที่น่าสนใจที่สุดทั้งหมดถูกนำไปใช้ในโมดูล SLAVE ซึ่งอนุญาตจริง ๆ คุณต้องปรับให้เข้ากับความเร็วในการส่งข้อมูล

อัลกอริธึมหลักและสำคัญที่สุดคือการใช้ซอฟต์แวร์ PWM 4 แชนเนล 8 บิตซึ่งช่วยให้คุณควบคุม LED 4 ดวงที่มีการไล่ระดับความสว่าง 256 สำหรับแต่ละอัน การใช้อัลกอริธึมนี้ในฮาร์ดแวร์ยังกำหนดอัตราการถ่ายโอนข้อมูลบนเครือข่าย - เพื่อความสะดวกของซอฟต์แวร์ จะมีการส่งข้อมูลหนึ่งบิตสำหรับการดำเนินการ PWM แต่ละขั้นตอน การใช้งานอัลกอริธึมเบื้องต้นแสดงให้เห็นว่าอัลกอริธึมทำงานในรอบ 44 นาฬิกา ดังนั้นจึงตัดสินใจใช้ตัวจับเวลาที่กำหนดค่าให้ขัดจังหวะทุกๆ 100 รอบนาฬิกา วิธีนี้จะทำให้การขัดจังหวะมีเวลารับประกันว่าจะดำเนินการก่อนรอบถัดไปและดำเนินการส่วนต่างๆ ของโค้ดโปรแกรมหลัก
ที่ความถี่สัญญาณนาฬิกาที่เลือกของออสซิลเลเตอร์ภายใน 4.8 MHz การขัดจังหวะจะเกิดขึ้นที่ความถี่ 48 kHz - นี่คือความเร็วบิตที่เครือข่ายของอุปกรณ์ทาสมีและ PWM จะถูกเติมด้วยความเร็วเดียวกัน - ด้วยเหตุนี้ความถี่ของ สัญญาณ PWM คือ 187.5 Hz ซึ่งค่อนข้างเพียงพอที่จะไม่สังเกตเห็นการกะพริบของ LED นอกจากนี้ในตัวจัดการการขัดจังหวะหลังจากดำเนินการอัลกอริธึมที่รับผิดชอบในการสร้าง PWM สถานะของบัสข้อมูลจะถูกบันทึก - ปรากฎว่าอยู่ในช่วงกลางของช่วงเวลาโอเวอร์โฟลว์ของตัวจับเวลาโดยประมาณซึ่งช่วยลดความยุ่งยากในการรับข้อมูล เมื่อเริ่มรับแพ็กเก็ต 4 บิตถัดไป ตัวจับเวลาจะถูกรีเซ็ตซึ่งจำเป็นสำหรับการซิงโครไนซ์การรับที่แม่นยำยิ่งขึ้นและความต้านทานต่อการเบี่ยงเบนความเร็วในการรับ
ผลลัพธ์ที่ได้คือภาพต่อไปนี้:

การใช้อัลกอริธึมในการปรับความเร็วในการส่งข้อมูลนั้นน่าสนใจ ที่จุดเริ่มต้นของการส่งสัญญาณ MASTER จะส่งพัลส์ด้วยระยะเวลา 4 บิตของ log.0 ซึ่งโมดูลทาสทั้งหมดจะกำหนดความเร็วในการรับที่ต้องการโดยใช้อัลกอริธึมง่ายๆ:

LDI tmp2, st_syn_delay ธ.ค. tmp2 ;<+ BREQ bad_sync ; | SBIC PINB, cmd_port; | RJMP PC-0x0003 ;-+

St_syn_delay = 60 - ค่าคงที่ที่กำหนดระยะเวลาสูงสุดของพัลส์เริ่มต้นซึ่งถือเป็นประมาณ 2 เท่าของค่าเล็กน้อย (เพื่อความน่าเชื่อถือ)

โดยใช้วิธีการทดลอง การพึ่งพาตัวเลขผลลัพธ์ใน tmp2 ต่อไปนี้จะถูกสร้างขึ้นเมื่อความถี่สัญญาณนาฬิกาเบี่ยงเบนไปจากค่าที่ระบุ:

4.3Mhz (-10%) 51 ยูนิต (0x33) สอดคล้องกับตัวจับเวลา 90 ตัวเพื่อคืนความเร็วในการรับให้เป็นค่าปกติ
4.8Mhz (+00%) 43 ยูนิต (0x2B) - สอดคล้องกับนาฬิกาจับเวลา 100 ตัว (ระบุ)
5.3Mhz (+10%) 35 ยูนิต (0x23) - สอดคล้องกับตัวจับเวลา 110 ตัวเพื่อคืนความเร็วในการรับให้เป็นค่าเล็กน้อย

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

Y(x) = 110-x*20/16
x = tmp2 - 35 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
Y(x) = (110, 108.75, 107.5, 106.25, 105, 103.75, 102.5, 101.25, 100, 98.75, 97.5, 96.25, 95, 93.75, 92.5, 91.25, 90)

ตัวเลขจะถูกปัดเศษเป็นจำนวนเต็มและจัดเก็บไว้ใน EEPROM

หากเมื่อใช้แรงดันไฟฟ้ากับโมดูลให้ถือสายไว้ในสถานะโลจิคัล "1" รูทีนย่อยการสอบเทียบจะถูกเปิดใช้งานซึ่งจะช่วยให้คุณสามารถวัดระยะเวลาของสัญญาณ PWM ด้วยเครื่องวัดความถี่หรือออสซิลโลสโคปโดยไม่มีการแก้ไขและตาม ในการวัดให้ตัดสินความเบี่ยงเบนของความถี่นาฬิกาของตัวควบคุมโมดูลจากค่าเล็กน้อยโดยมีค่าเบี่ยงเบนมากกว่า 15% อาจจำเป็นต้องปรับค่าคงที่การสอบเทียบ RC oscillator ในตัว แม้ว่าผู้ผลิตสัญญาว่าจะมีการสอบเทียบที่โรงงานและเบี่ยงเบนไปจากค่าที่ระบุไม่เกิน 10%

ในขณะนี้โปรแกรม Delphi ได้รับการพัฒนาซึ่งช่วยให้คุณสามารถสร้างรูปแบบที่คอมไพล์ไว้ก่อนหน้านี้สำหรับ 8 โมดูลด้วยความเร็วที่กำหนด รวมถึงยูทิลิตี้สำหรับการทำงานกับโมดูลแยกต่างหาก (รวมถึงการกำหนดที่อยู่โมดูลใหม่)

เฟิร์มแวร์
สำหรับโมดูล SLAVE จะต้องแฟลชเฉพาะฟิวส์ CKSEL1 = 0 และ SUT0 = 0 ส่วนที่เหลือไม่ควรกะพริบ เนื้อหาของ EEPROM ถูกแฟลชจากไฟล์ RGBU-slave.eep หากจำเป็น คุณสามารถตั้งค่าที่อยู่ที่ต้องการของโมดูลบนเครือข่ายได้ทันที - ไบต์ที่ 0 ของ EEPROM โดยค่าเริ่มต้นจะกะพริบเป็น $FE = 254 ที่อยู่ 0x13 มีค่าคงที่การสอบเทียบของ RC oscillator ในตัวของคอนโทรลเลอร์ที่ความถี่ 4.8 MHz จะไม่โหลดโดยอัตโนมัติดังนั้นจึงจำเป็นต้องอ่านค่าการสอบเทียบจากโรงงานด้วยโปรแกรมเมอร์และเขียนลงในเซลล์นี้ - ค่านี้เป็นค่าเฉพาะสำหรับคอนโทรลเลอร์แต่ละตัว โดยมีการเบี่ยงเบนความถี่มากจากค่าที่กำหนด คุณสามารถเปลี่ยนการสอบเทียบผ่านเซลล์นี้ได้โดยไม่ส่งผลกระทบต่อค่าจากโรงงาน

สำหรับโมดูล MASTER จำเป็นต้องแฟลชเฉพาะฟิวส์ SUT0 = 0, BOOTSZ0 = 0, BOOTSZ1 = 0, CKOPT = 0 ส่วนที่เหลือไม่กะพริบ

สุดท้ายนี้ สาธิตพวงมาลัยเล็กๆ ที่ระเบียง:

อันที่จริงแล้วฟังก์ชันการทำงานของพวงมาลัยนั้นถูกกำหนดโดยโปรแกรมบนพีซี - คุณสามารถสร้างเพลงสี ระบบไฟในห้องที่มีสีรุ้งอย่างมีสไตล์ (หากคุณเพิ่มไดรเวอร์ LED และใช้ LED ที่ทรงพลัง) - ฯลฯ ฉันวางแผนจะทำอะไรในอนาคต? แผนดังกล่าวประกอบด้วยตาราง 12 โมดูลพร้อมไฟ LED RGB 3 วัตต์ และระบบไฟส่องสว่างภายในห้องโดยอิงจากเทป RGB 12 โวลต์ (คุณต้องการเพียงทรานซิสเตอร์เอฟเฟกต์สนามเพื่อสลับเทปสำหรับแต่ละโมดูล 3 ชิ้นหรือ 4 ชิ้นหากคุณเพิ่ม เทปสีม่วงความแตกต่างอื่น ๆ จากนั้นจะไม่มีต้นฉบับ)

ในการจัดการเครือข่ายคุณสามารถเขียนโปรแกรมของคุณเองได้แม้ในภาษาพื้นฐาน - สิ่งสำคัญที่ภาษาโปรแกรมที่เลือกควรทำคือสามารถเชื่อมต่อกับพอร์ต COM อมตะและกำหนดค่าพารามิเตอร์ได้ แทนที่จะใช้อินเทอร์เฟซ USB คุณสามารถใช้อะแดปเตอร์ที่มี RS232 ได้ ซึ่งจะช่วยให้สามารถควบคุมเอฟเฟกต์แสงจากอุปกรณ์หลากหลายประเภทที่สามารถตั้งโปรแกรมโดยทั่วไปได้
โปรโตคอลการแลกเปลี่ยนกับอุปกรณ์ MASTER นั้นค่อนข้างง่าย - เราส่งคำสั่งและรอการตอบสนองเกี่ยวกับความสำเร็จหรือความล้มเหลว หากไม่มีการตอบสนองนานกว่าสองสามมิลลิวินาที แสดงว่ามีปัญหากับการเชื่อมต่อหรือการทำงานของอุปกรณ์ MASTER ซึ่งในกรณีนี้จำเป็นต้องดำเนินขั้นตอนการเชื่อมต่อใหม่

คำสั่งต่อไปนี้มีอยู่ในปัจจุบัน:

0x54; สัญลักษณ์ “T” - คำสั่ง “ทดสอบ” - ตรวจสอบการเชื่อมต่อ คำตอบควรเป็น 0x2B
0x40; สัญลักษณ์ "@" คือคำสั่ง "ดาวน์โหลดและถ่ายโอน" หลังจากออกคำสั่งแล้วต้องรอการตอบกลับ "?" ตามด้วยข้อมูล 6 ไบต์:
+0: ​​ที่อยู่ทาส 0..255
+1: คำสั่งไปยังอุปกรณ์
0x21 - ไบต์ 2...5 มีความสว่างของช่องสัญญาณที่ต้องนำไปใช้ทันที
0x14 - ตั้งค่าการหมดเวลาหลังจากนั้นความสว่างของทุกช่องจะเป็น
รีเซ็ตเป็น 0 หากไม่ได้รับคำสั่งในช่วงเวลานี้ ค่าหมดเวลาอยู่ในเซลล์ช่องสีแดง เช่น เป็นไบต์ที่ออฟเซ็ต +2 ค่า 0-255 สอดคล้องกับการหมดเวลา 0-25.5 วินาทีตามค่าเริ่มต้น การหมดเวลา = 5 วินาที (เขียนใน EEPROM ระหว่างเฟิร์มแวร์ สามารถเปลี่ยนได้ในไบต์ด้วยออฟเซ็ต +1)
0x5A - เปลี่ยนที่อยู่อุปกรณ์
เพื่อความน่าเชื่อถือ ขั้นตอนในการเปลี่ยนที่อยู่จะต้องดำเนินการสามครั้ง จากนั้นจึงจะใช้และลงทะเบียนที่อยู่ใหม่ใน EEPROM เท่านั้น ในเวลาเดียวกันคุณต้องระวัง - หากคุณกำหนดที่อยู่เดียวกันให้กับอุปกรณ์สองเครื่องอุปกรณ์ทั้งสองจะตอบสนองพร้อมกันและคุณสามารถ "แยก" อุปกรณ์เหล่านั้นได้โดยการถอดโมดูลพิเศษออกจากเครือข่ายทางกายภาพเท่านั้นและเปลี่ยนที่อยู่ของส่วนที่เหลือ หรือใช้โปรแกรมเมอร์ ค่าของที่อยู่ใหม่จะถูกส่งในเซลล์ช่องสีแดง - เช่น เป็นไบต์ที่ออฟเซ็ต +2

2: ความสว่างสีแดง 0...255
+3: ความสว่างสีเขียว 0...255
+4: ความสว่างสีน้ำเงิน 0...255
+5: ความสว่างสีม่วง 0...255

0x3D; สัญลักษณ์ "=" - คำสั่ง ADC หลังจากออกคำสั่งแล้วต้องรอการตอบกลับ "?" ดังนั้นควรส่ง 1 ไบต์ - หมายเลขช่อง ADC 0..7 ในรูปแบบไบนารี (หมายเลข ASCII 0..9 ก็เหมาะสำหรับความจุนี้เนื่องจาก 4 บิตสูงสุดจะถูกละเว้น)
ในการตอบสนอง คำสั่งจะส่งคืนผลลัพธ์การวัด 2 ไบต์ในช่วง 0...1023

การตอบสนองต่อคำสั่งที่เป็นไปได้:
0x3F; เครื่องหมาย "?" - พร้อมสำหรับการป้อนข้อมูลหมายความว่าอุปกรณ์พร้อมรับอาร์กิวเมนต์คำสั่ง
0x2B; สัญลักษณ์ "+" การตอบสนอง - ดำเนินการคำสั่งแล้ว
0x2D; สัญลักษณ์ "-" การตอบสนอง - คำสั่งไม่ได้ถูกกำหนดไว้หรือไม่ถูกต้อง

สามารถดูรายละเอียดเพิ่มเติมได้จากซอร์สโค้ดที่อยู่บน GitHub ซึ่งมีเฟิร์มแวร์สำเร็จรูปเวอร์ชันล่าสุดอยู่ด้วย

พวงมาลัย ATtiny2313 ประกอบง่ายมาก ในบทความง่ายๆ นี้ เราจะสร้างพวงมาลัยขนาดเล็กที่มีไฟ LED 4 ดวง

คุณคือปุ่มของเรา กดหรือปล่อย?” – นี่คือคำถามที่เราถามในบทความที่แล้ว และขึ้นอยู่กับสถานะของปุ่ม เราได้สร้างเอฟเฟกต์ของไฟ LED 4 ดวง ในบทความนี้เราจะวิเคราะห์สถานการณ์ที่คล้ายกัน ไปกันเลย!

จำพวงมาลัยจีนราคา 100 รูเบิลได้ไหม?

เรากดปุ่มและเอฟเฟกต์การกะพริบจะแตกต่างไปจากเดิมอย่างสิ้นเชิง ;-) นี่คือสิ่งที่เราจะทำในบทความนี้ ;-)

เราจะไม่สร้างพวงมาลัยแบบจีนที่มีหลอดไฟจำนวน N แต่จะสร้างไดอะแกรมแบบง่ายของพวงมาลัยดังกล่าวโดยใช้ AVR Tiny2313 MK และ LED สี่ดวง การใช้ปุ่มเราจะเปลี่ยนเอฟเฟกต์การกะพริบ

ดังนั้นงานของเราจึงมีลักษณะดังนี้:

สร้างพวงมาลัยบน AVR Tiny2313 MK จากไฟ LED สี่ดวงและปุ่มย้อนกลับอัตโนมัติหนึ่งปุ่ม (ปุ่มที่กดแล้วปล่อยเอง) เรากดปุ่มหนึ่งครั้ง - เอฟเฟกต์การกะพริบครั้งแรกของปุ่มจะปรากฏขึ้น กดปุ่มอีกครั้ง - เอฟเฟกต์การกะพริบครั้งที่สองจะปรากฏขึ้นและอื่น ๆ เราจะมีเอฟเฟกต์ทั้งหมดเจ็ดประการ เงื่อนไขคือในขณะที่ไฟ LED กะพริบ MK ของเราไม่ตอบสนองต่อปุ่ม นั่นคือจนกว่าเอฟเฟกต์จะผ่านไป การกดปุ่มจะไม่ส่งผลต่อเอฟเฟกต์แต่อย่างใด เอฟเฟกต์จะไม่ถูกขัดจังหวะ เมื่อเอฟเฟกต์สิ้นสุดลง MK จะประมวลผลการกดปุ่มเท่านั้น

ดูเหมือนงานจะชัดเจน ก่อนอื่น เรามาสร้างวงจรง่ายๆ ใน Proteus กันก่อน แผนภาพจะมีลักษณะดังนี้ (คลิกเพื่อขยาย และเปิดในหน้าต่างใหม่):


ทั้งหมด? ไม่ ไม่ใช่ทั้งหมด! ตอนนี้เราเย็บ MK ของเราด้วยไฟล์ HEX ฉันจะหามันได้ที่ไหน? จาก Atmel Studio 6 แต่เพื่อสร้างมันขึ้นมา เราต้องเขียนโปรแกรมที่ MK ของเราจะใช้ก่อน วิธีทำทั้งหมดนี้ดูในบทความนี้

ด้านล่างนี้เป็นข้อความพร้อมความคิดเห็น:



ให้ความสนใจกับบรรทัดโค้ดด้วย:

(_delay_ms(50); // เปิดใช้งานการหน่วงเวลา 50 มิลลิวินาทีเพื่อป้องกันการตีกลับ

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

ปุ่มทำหน้าที่อะไรในวงจรตามการออกแบบวงจร MK? มันจ่ายศูนย์ตรรกะหรือหนึ่งให้กับพิน MK ดังนั้น? ดังนั้น. แต่ในวงจรจริงมันไม่ได้ปิดและเปิดวงจรทันที เมื่อปิดหรือเปิดปุ่ม เราไม่มีการสลับระดับสัญญาณจากโลจิคัลหนึ่งเป็นศูนย์อย่างชัดเจน และในทางกลับกัน การสลับโดยใช้ปุ่มมีลักษณะดังนี้:

จากตรรกะหนึ่งถึงศูนย์บางสิ่งเช่นนี้


จากศูนย์ถึงหนึ่งบางอย่างเช่นนี้:


ป้ายโฆษณาทั้งหมดนี้เมื่อเปลี่ยนปุ่มเรียกว่าการตีกลับแบบสัมผัสและรบกวนนักพัฒนาอุปกรณ์ลอจิก ความจริงก็คือ MK สามารถนับแรงกระตุ้นที่วุ่นวายเหล่านี้ว่าเป็นค่าตรรกะหรือศูนย์ก็ได้ ความเข้าใจผิดนี้ได้รับการแก้ไขแล้วโดยใช้โค้ดเพียงบรรทัดเดียว

ฉันกำลังแนบไฟล์ SIshnik, HEX และ Proteus เข้ากับโครงการ