ติดต่อ

การเขียนโปรแกรม attiny13 สำหรับผู้เริ่มต้น เราแฟลช AVR ด้วยตนเอง อินเทอร์เฟซ MK ในโหมดการเขียนโปรแกรม

ถึงเวลาสำหรับเฟิร์มแวร์ตัวแรกแล้ว เฟิร์มแวร์นี้เป็นการทดสอบ มันไม่ได้สร้างการกระทำที่เป็นประโยชน์ใด ๆ ยกเว้นการกระตุกขาตามอัลกอริทึมบางอย่าง ด้วยเฟิร์มแวร์นี้ คุณสามารถตรวจสอบประสิทธิภาพของไมโครคอนโทรลเลอร์ทั้งหมดและโดยเฉพาะพอร์ต I/O
ในการตรวจสอบไมโครคอนโทรลเลอร์ คุณต้องดาวน์โหลดเฟิร์มแวร์และดูว่าเกิดอะไรขึ้นที่ขา คุณสามารถ "ดู" ด้วยมัลติมิเตอร์หรือด้วยโพรบธรรมดา - LED ในชุดพร้อมตัวต้านทาน 300 โอห์ม - 1 kOhm มันไม่คุ้มที่จะตรวจสอบหากไม่มีตัวต้านทาน - คุณสามารถเบิร์นพอร์ต I / O ได้ ระดับสัญญาณที่ขาเปลี่ยนจาก "1" ถึงสถานะ "Z" เป็น "0" และย้อนกลับ สถานะ "Z" ถูกป้อนในลำดับเพื่อตรวจสอบความสมบูรณ์ของพอร์ตในโหมดอินพุต

ทดสอบเฟิร์มแวร์สำหรับไมโครคอนโทรลเลอร์ ATMega48/88/168
อัลกอริทึมการทำงานของเฟิร์มแวร์ ATMega48/88/168 แสดงในรูปภาพ (มีการติดตั้งไมโครคอนโทรลเลอร์บนตัวที่อธิบายไว้ก่อนหน้านี้)

ไมโครคอนโทรลเลอร์ใช้พลังงานจากออสซิลเลเตอร์ภายใน จึงไม่จำเป็นต้องใช้คริสตัลภายนอก ไม่ใช้ขา 9 และ 10 (เชื่อมต่อควอตซ์ภายนอก) ในกรณีที่มีควอตซ์ภายนอก นอกจากนี้ยังไม่ใช้พิน 1 (รีเซ็ต) และ 21 (แรงดันอ้างอิงสำหรับ ADC) คุณสามารถตรวจสอบประสิทธิภาพได้สองวิธี (ดูรูป) - ดูการเปลี่ยนแปลงของระดับสัญญาณเทียบกับกราวด์ (GND) หรือเทียบกับพินพลังงาน (VCC)
- ทดสอบเฟิร์มแวร์สำหรับ ATMega48/88/168

วิธีแฟลชไมโครคอนโทรลเลอร์ >


ทดสอบเฟิร์มแวร์สำหรับไมโครคอนโทรลเลอร์ ATTiny2313
อัลกอริทึมของเฟิร์มแวร์ ATTiny2313 แสดงในรูปภาพ (มีการติดตั้งไมโครคอนโทรลเลอร์ในอันที่อธิบายไว้ก่อนหน้านี้)

ไมโครคอนโทรลเลอร์ใช้พลังงานจากออสซิลเลเตอร์ภายใน จึงไม่จำเป็นต้องใช้อุปกรณ์ภายนอก ไม่ใช้ขา 4 และ 5 (เชื่อมต่อควอตซ์ภายนอก) ในกรณีที่มีควอตซ์ภายนอก นอกจากนี้ยังไม่ได้ใช้พิน 1 (รีเซ็ต) คุณสามารถตรวจสอบประสิทธิภาพได้สองวิธี - ดูการเปลี่ยนแปลงของระดับสัญญาณที่สัมพันธ์กับกราวด์ (GND) และเทียบกับพินพลังงาน (VCC)
- ทดสอบเฟิร์มแวร์สำหรับ ATTiny2313

วิธีแฟลชไมโครคอนโทรลเลอร์ >


ทดสอบเฟิร์มแวร์สำหรับไมโครคอนโทรลเลอร์ ATTiny13
อัลกอริทึมของเฟิร์มแวร์ ATTiny13 แสดงในรูปภาพ (มีการติดตั้งไมโครคอนโทรลเลอร์ในอันที่อธิบายไว้ก่อนหน้านี้)

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

วิธีแฟลชไมโครคอนโทรลเลอร์ >


การตรวจสอบความสมบูรณ์ของสถานะ "Z" ของพอร์ตอินพุต-เอาต์พุต


สถานะ "Z" คือสถานะเมื่อขาถูกกำหนดค่าสำหรับอินพุตและไม่มีระดับบน (ดูเหมือนลอยอยู่ในอากาศและไม่ได้เชื่อมต่อกับสิ่งใด) เพื่อควบคุมการมีอยู่ของสถานะดังกล่าว คุณสามารถใช้ตัวแบ่งตัวต้านทาน ที่ระดับ "1" ตัวแบ่งจะมีแรงดันไฟฟ้า + 5v ที่ระดับ "0" - กราวด์ 0v และที่ "Z" -state พอร์ต I / O จะหยุดรบกวนตัวแบ่งและจะแบ่ง จ่ายแรงดันและเราจะได้ +2.5v

ไฟล์:
- แหล่งเฟิร์มแวร์ทดสอบ

(เข้าชม 18,359 ครั้ง, เข้าชม 4 วันนี้)

  • การเขียนโปรแกรมไมโครคอนโทรลเลอร์
    • กวดวิชา

    รูปภาพที่ให้ความสนใจ - xkcd

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

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

    จะแฟลช MK ด้วยมือเปล่าได้อย่างไร?

    ATtiny13 MK จาก Atmel จะทำหน้าที่เป็นตัวทดสอบ เทคนิคที่อธิบายนี้ใช้ได้กับคอนโทรลเลอร์ตระกูล AVR เกือบทุกชนิด ยกเว้นว่ารหัสคำสั่งอาจแตกต่างกันเล็กน้อย

    อินเตอร์เฟซ

    อินเทอร์เฟซทั่วไปและสะดวกที่สุดสำหรับเฟิร์มแวร์ AVR คือ เอสพีไอ(อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรม) ในการเชื่อมต่อผ่าน SPI คุณต้องใช้สายไฟเพียงสี่เส้นเท่านั้น ไม่นับสายกราวด์:
    • วท- สัญญาณนาฬิกา ซิงโครไนซ์การดำเนินการแลกเปลี่ยนข้อมูลทั้งหมด
    • MOSI(Master Out Slave In) - สายข้อมูลจากมาสเตอร์ถึงทาส;
    • มิโซะ(Master In Slave Out) - สายข้อมูลจากทาสถึงนาย
    • รีเซ็ต- เพื่อเปิดใช้งานเฟิร์มแวร์ผ่าน SPI คุณต้องใช้ตรรกะ "0" กับพินนี้
    ดังนั้นเราจึงจำเป็นต้องสร้างสัญญาณสามสัญญาณและ (เลือกได้) อ่านหนึ่งสัญญาณ นี่คือรูปแบบที่ง่ายที่สุดสำหรับสิ่งนี้:


    ข้าว. 1. รูปแบบการเชื่อมต่อ SPI ที่ง่ายที่สุด

    เพื่อความสะดวกของคุณเอง คุณสามารถเพิ่มสัญญาณอินพุตได้ โครงร่างมีความซับซ้อนมากขึ้น แต่ไม่มากเกินไป:


    ข้าว. 2. โครงการพร้อมสัญญาณบ่งชี้

    ป้องกันการแชท

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


    ข้าว. 3. ทริกเกอร์ RS สำหรับการระงับการสนทนา

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

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

    สัญญาณ MOSI และ RESET ไม่จำเป็นต้องมี debounce ซึ่งแตกต่างจาก SCK: เฉพาะระดับของสัญญาณในขณะสุ่มตัวอย่างเท่านั้นที่สำคัญ ไม่ใช่ขอบสัญญาณ

    SPI ทำงานอย่างไร



    ข้าว. 4. แผนภาพเวลาของการทำงานของ SPI

    SPI เป็นอินเทอร์เฟซแบบซิงโครนัส: การดำเนินการทั้งหมดจะโอเวอร์คล็อกที่ขอบของสัญญาณนาฬิกา (SCK) ที่สร้างโดยมาสเตอร์ อัตราบอดสูงสุดจำกัดอยู่ที่ 1/4 ของนาฬิกาคอนโทรลเลอร์ ไม่มีข้อจำกัดเกี่ยวกับความเร็วขั้นต่ำ: หากไม่มีสัญญาณนาฬิกา การแลกเปลี่ยนข้อมูลจะ "หยุด" และอินเทอร์เฟซสามารถคงอยู่ในสถานะคงที่เป็นเวลานานโดยพลการ

    การส่ง SPI ดำเนินการในโหมดดูเพล็กซ์เต็มรูปแบบ หนึ่งบิตต่อสัญญาณนาฬิกาในแต่ละทิศทาง ที่ขอบด้านขึ้นของสัญญาณ SCK อุปกรณ์สเลฟจะอ่านบิตถัดไปจากบรรทัด MOSI และบนขอบด้านที่ตกลงมา อุปกรณ์สเลฟจะอ่านบิตถัดไปจากบรรทัด MISO ทุกสายตาจับจ้องไปที่รูปที่ 4

    โปรโตคอลเฟิร์มแวร์

    การสื่อสารทั้งหมดระหว่างโปรแกรมเมอร์และ MK ประกอบด้วยการส่งคำสั่ง 32 บิตและรับการตอบสนองของคอนโทรลเลอร์ รายการคำสั่งทั้งหมดอยู่ในแผ่นข้อมูล "e แต่ที่นี่เราจะแสดงรายการสิ่งที่ต้องดำเนินการเพื่อแฟลช MK:
    1. การสลับคอนโทรลเลอร์เป็นโหมดการเขียนโปรแกรม
    2. (ไม่บังคับ) อ่านรหัสอุปกรณ์
    3. ลบ;
    4. เขียนแฟลช;
    5. (ไม่บังคับ) ตรวจสอบบันทึก;
    ลองพิจารณารายละเอียดแต่ละขั้นตอน

    เปิดใช้งานโหมดการเขียนโปรแกรม

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


    ข้าว. 5. โอน MK ไปที่โหมดการเขียนโปรแกรม


    ข้าว. 6. คำสั่ง "เปิดใช้งานโปรแกรม"

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

    การยืนยันตัวตน


    ข้าว. 7. คำสั่ง "อ่านลายเซ็นไบต์"

    ก่อนที่จะเขียนอะไรลงในหน่วยความจำของ MK คุณต้องแน่ใจว่าเรามีรุ่นที่เราต้องการ คอนโทรลเลอร์แต่ละรุ่นมีตัวระบุสามไบต์ (ลายเซ็น) ของตัวเอง คุณสามารถอ่านได้ด้วยคำสั่งเช่น
    00110000 000xxxxx xxxxxxbb xxxxxxxx
    แทน BB(ไบต์ที่สามของคำสั่ง) ควรถูกแทนที่ 00 สำหรับไบต์แรกของตัวระบุ 01 - สำหรับวินาทีและ 10 - สำหรับที่สาม ไบต์ตัวระบุที่เกี่ยวข้องจะถูกส่งโดยตัวควบคุมเมื่อส่งไบต์ที่ 4 ของคำสั่ง

    สำหรับ ATtiny13 ค่าตัวระบุคือ 00011110 10010000 00000111 (0x1E 90 07).

    ทำความสะอาดคอนโทรลเลอร์

    ข้าว. 8. คำสั่ง "ลบชิป"

    ขั้นตอนต่อไปคือการล้างหน่วยความจำของ MK ซึ่งทำได้โดยส่งคำสั่ง "Chip Erase"
    10101100 100xxxxxx xxxxxxxx xxxxxxx
    คำสั่งนี้จะลบเนื้อหาของ Flash และ EEPROM (ทุกเซลล์จะมี FF) รวมทั้งลบบิตล็อก หากมีการตั้งค่าไว้

    เขียนไปยังหน่วยความจำแฟลช

    หน่วยความจำโปรแกรม (Flash) ใน ATtiny13 ประกอบด้วย 512 คำแบบไบต์คู่ (1K ไบต์) ที่อยู่คำมีความกว้าง 9 บิต หน่วยความจำแฟลชแบ่งออกเป็นหน้า แต่ละหน้ามีความยาว 16 คำ (รวมเป็น 32 หน้า) การเขียนไปยัง flash ทำได้ในสองขั้นตอน

    ก่อนอื่นคุณต้องโหลดข้อมูลลงในบัฟเฟอร์ของหน้า สำหรับคำสั่งนี้จะใช้คำสั่ง "โหลดหน้าหน่วยความจำโปรแกรม"
    01000000 000xxxxx xxxxbbbb iiiiiiii- เพื่อโหลดไบต์ต่ำของคำและ 01001000 000xxxxx xxxxbbbb iiiiiiii- เพื่อดาวน์โหลดอันที่เก่ากว่า
    4 บิตต่ำของไบต์คำสั่งที่ 3 บีบีบี- ที่อยู่ของคำในหน้า iiiiiiiii- โหลดไบต์ ต้องโหลดไบต์ต่ำของคำก่อนเสมอ จากนั้นจึงโหลดไบต์สูงของคำเดียวกัน

    ข้าว. 9. คำสั่ง Load Program Memory Page

    หลังจากโหลดเพจบัฟเฟอร์แล้ว คุณต้องดำเนินการคำสั่ง "เขียนโปรแกรมหน่วยความจำเพจ" 01001100 0000000a bbbxxxxx xxxxxxxxเพื่อเขียนเพจไปยังหน่วยความจำของคอนโทรลเลอร์โดยตรง
    บิตต่ำของไบต์ที่สองและบิตสูง 4 บิตของไบต์ที่สาม ตอบ:bbbb- หมายเลขหน้าห้าบิตสำหรับรายการ

    ข้าว. 10. คำสั่ง "เขียนหน้าหน่วยความจำโปรแกรม"

    ทั้งหมดนี้ดูค่อนข้างสับสน แต่ไม่มีอะไรซับซ้อน ที่อยู่ของหน่วยความจำโปรแกรมไบต์ใด ๆ ประกอบด้วย 10 บิต: ppppp:bbbb:ว, ที่ไหน
    ปปปปป- หมายเลขหน้า (ใช้ในคำสั่ง "เขียนโปรแกรมหน่วยความจำหน้า");
    บีบีบี- ที่อยู่ของคำในหน้า (ในคำสั่ง "Load Program Memory Page");
    - บิตที่กำหนดไบต์สูงหรือต่ำในคำ (เข้ารหัสในไบต์แรกของคำสั่ง "โหลดหน้าหน่วยความจำโปรแกรม")

    อ่านแฟลช


    ข้าว. 11. คำสั่ง "อ่านโปรแกรมหน่วยความจำ"

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

    การอ่านหน่วยความจำของโปรแกรมนั้นง่ายกว่าการเขียน ลืมเรื่องการเพจไปได้เลย การอ่านทำได้ทีละไบต์ คำสั่ง "Read Program Memory" มีลักษณะดังนี้:
    00100000 0000000a bbbbbbb xxxxxxxx- เพื่ออ่านไบต์ต่ำของคำและ 00101000 0000000a bbbbbbb xxxxxxxx- สำหรับผู้สูงอายุ
    บิตที่มีนัยสำคัญน้อยที่สุดของไบต์ที่สองและไบต์ที่สามทั้งหมด A:bbbbbbbbเป็นที่อยู่ของคำในหน่วยความจำ ไบต์ที่อ่านจะถูกส่งคืนระหว่างการส่งไบต์ที่ 4 ของคำสั่ง

    เสร็จสิ้นการเขียนโปรแกรม

    บางทีการดำเนินการที่ง่ายที่สุด ในการเขียนโปรแกรมให้สมบูรณ์และทำให้ MK เข้าสู่โหมดการทำงาน เพียงใช้ระดับลอจิก "1" กับ RESET ก็เพียงพอแล้ว คอนโทรลเลอร์จะเริ่มทำงานและรันด้วยโปรแกรมใหม่

    ฝึกฝน

    ถึงเวลาที่จะนำสิ่งที่คุณได้เรียนรู้ไปปฏิบัติ เหยื่อของการทดลอง - ATtiny13 - เสียบเข้ากับเขียงหั่นขนม, ตัวปรับสัญญาณถูกประกอบไว้ข้างๆ, ทุกอย่างพร้อม:


    ข้าว. 12. รูปแบบการทดลอง

    เราจะเย็บโปรแกรมแบบ "ไม่มีที่ไหนง่ายกว่า":
    ldi R24, 0x02 ออก DDRB, R24 ออก PORTB,R24 L1: rjmp L1
    ทั้งหมดนี้คือเอาต์พุตหนึ่งขาต่อขา PB1 และเข้าสู่ลูปไม่สิ้นสุด ในรหัสเครื่องจะใช้เพียงสี่คำ:
    E082BB87BB88CFFF
    ในการแฟลชลงในคอนโทรลเลอร์ คุณต้องพิมพ์คำสั่งต่อไปนี้:
    1010 1100 0101 0011 0000 0000 0000 0000 // โปรแกรมเปิดใช้งาน 1010 1100 1000 0000 0000 0000 0000 0000 // ชิปลบ 0100 0000 0000 0000 0000 0000 0000 0000 1 /) // โหลด Addr.0010 ไบต์ต่ำ 88 0100 1000 0000 0000 0000 0010 1011 1011 // โหลด Addr.0010 ไบต์สูง BB 0100 0000 0000 0000 0011 1111 1111 // โหลด Addr.0011 ไบต์ต่ำ 000 FF 0100 1010101010 FF 0100 10110101010 FF 0100 10110101010 FF 0100 101101 / โหลด addr.0011 ไบต์สูง CF 0100 1100 0000 0000 0000 0000 0000 0000 // เขียนหน้า
    กุญแจสู่การเริ่มต้น ไปกันเถอะ!

    ธันวาคม 2558

    1. ข้อดีของวิธีการที่เสนอ

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

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

    หลังจากวิเคราะห์สิ่งพิมพ์บนอินเทอร์เน็ตแล้ว คุณจะเห็นว่าปัญหานี้แก้ไขได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธีต่อไปนี้: ซื้อโปรแกรมเมอร์สำเร็จรูปหรือทำเองที่บ้าน ในขณะเดียวกันโครงร่างที่เผยแพร่ของโปรแกรมเมอร์ทำเองมักจะซับซ้อนเกินสมควร - ซับซ้อนกว่าที่จำเป็นจริงๆ แน่นอนว่าหากจำเป็นต้องแฟลช MK ทุกวัน การมีโปรแกรมเมอร์ที่ "เจ๋ง" จะดีกว่า แต่ถ้าความต้องการขั้นตอนดังกล่าวเกิดขึ้นไม่บ่อยนัก โดยทั่วไปคุณสามารถทำได้โดยไม่ต้องใช้โปรแกรมเมอร์ ไม่ แน่นอน มันไม่เกี่ยวกับการเรียนรู้ที่จะทำมันด้วยพลังแห่งความคิด ซึ่งหมายความว่าการทำความเข้าใจวิธีที่โปรแกรมเมอร์โต้ตอบกับไมโครคอนโทรลเลอร์เมื่อเขียนและอ่านข้อมูลในโหมดการเขียนโปรแกรม เราสามารถใช้เครื่องมือที่มีอยู่เพื่อวัตถุประสงค์ที่กว้างขึ้นได้ เครื่องมือเหล่านี้จะต้องแทนที่ทั้งซอฟต์แวร์และฮาร์ดแวร์ของโปรแกรมเมอร์ ส่วนฮาร์ดแวร์ต้องมีการเชื่อมต่อทางกายภาพกับชิป MK ความสามารถในการจัดหาระดับลอจิกให้กับอินพุตและอ่านข้อมูลจากเอาต์พุต ส่วนซอฟต์แวร์ต้องมั่นใจในการทำงานของอัลกอริทึมที่ควบคุมกระบวนการที่จำเป็นทั้งหมด นอกจากนี้เรายังทราบด้วยว่าคุณภาพของการบันทึกข้อมูลใน MK ไม่ได้ขึ้นอยู่กับว่าโปรแกรมเมอร์ของคุณ "เจ๋ง" แค่ไหน ไม่มีสิ่งที่เรียกว่า "ดีขึ้น" หรือ "แย่ลง" มีเพียงสองตัวเลือก: "ลงทะเบียน" และ "ไม่ลงทะเบียน" นี่เป็นเพราะความจริงที่ว่า MC เองควบคุมกระบวนการบันทึกภายในคริสตัล จำเป็นเท่านั้นที่จะต้องจัดหาพลังงานคุณภาพสูง (ไม่มีสัญญาณรบกวนและระลอกคลื่น) และจัดระเบียบอินเทอร์เฟซอย่างเหมาะสม หากไม่พบข้อผิดพลาดตามผลลัพธ์ของการอ่านการควบคุมแสดงว่าทุกอย่างเป็นไปตามลำดับ - คุณสามารถใช้คอนโทรลเลอร์ได้ตามวัตถุประสงค์

    ในการเขียนโปรแกรมไปยัง MK โดยไม่ต้องมีโปรแกรมเมอร์ เราจำเป็นต้องมีตัวแปลงพอร์ต USB-RS232TTL และเช่นกัน ตัวแปลง USB-RS232TTL ช่วยให้คุณสร้างพอร์ต COM โดยใช้พอร์ต USB ซึ่งแตกต่างจากพอร์ต "ของจริง" ในระดับลอจิก TTL เท่านั้นที่ใช้ที่อินพุตและเอาต์พุตนั่นคือแรงดันไฟฟ้าในช่วง 0 ถึง 5 โวลต์ (สำหรับรายละเอียดเพิ่มเติม ดูบทความ " ") ไม่ว่าในกรณีใดการมีตัวแปลงดังกล่าวใน "ครัวเรือน" จะเป็นประโยชน์ดังนั้นหากคุณยังไม่มีคุณควรซื้ออย่างแน่นอน สำหรับระดับลอจิก ในกรณีของเรา TTL ยังได้เปรียบกว่าพอร์ต COM ปกติ เนื่องจากอินพุตและเอาต์พุตของพอร์ตดังกล่าวสามารถเชื่อมต่อโดยตรงกับไมโครคอนโทรลเลอร์ใดๆ ที่จ่ายไฟ 5 V รวมถึง ATtiny และ ATmega แต่อย่าพยายามใช้พอร์ต COM ปกติ - ใช้แรงดันไฟฟ้าในช่วง -12 ถึง +12 V (หรือ -15 ... + 15V) การเชื่อมต่อโดยตรงกับไมโครคอนโทรลเลอร์ในกรณีนี้ไม่สามารถยอมรับได้!!!

    แนวคิดในการสร้างสคริปต์สำหรับโปรแกรม "Perpetuum M" ซึ่งใช้ฟังก์ชันของโปรแกรมเมอร์นั้นเกิดขึ้นหลังจากอ่านสิ่งพิมพ์จำนวนมากบนอินเทอร์เน็ตที่เสนอวิธีแก้ปัญหาบางอย่างสำหรับเฟิร์มแวร์ MK ในแต่ละกรณี พบข้อบกพร่องร้ายแรงหรือความซับซ้อนมากเกินไป บ่อยครั้งที่เราเจอวงจรโปรแกรมเมอร์ที่มีไมโครคอนโทรลเลอร์ และในขณะเดียวกันก็มีคำแนะนำค่อนข้างจริงจัง เช่น "... และเพื่อที่จะตั้งโปรแกรมไมโครคอนโทรลเลอร์สำหรับโปรแกรมเมอร์นี้ เราต้องการ ... ถูกต้อง - โปรแกรมเมอร์คนอื่น!" . นอกจากนี้ยังมีการเสนอให้ไปหาเพื่อน ค้นหาบริการแบบชำระเงิน ฯลฯ คุณภาพของซอฟต์แวร์ที่เผยแพร่บนอินเทอร์เน็ตสำหรับวัตถุประสงค์เหล่านี้ก็ไม่น่าประทับใจเช่นกัน - มีปัญหามากมายทั้งในด้านการทำงานและ "ความขุ่น" ของอินเทอร์เฟซผู้ใช้ บ่อยครั้งที่ต้องใช้เวลามากในการทำความเข้าใจวิธีใช้โปรแกรม - ต้องเรียนรู้แม้กระทั่งเพื่อประโยชน์ในการดำเนินการที่ง่ายที่สุด โปรแกรมอื่นสามารถทำอะไรได้เป็นเวลานานและขยันหมั่นเพียร แต่ผู้ใช้จะรู้ว่าไม่มีสิ่งใดถูกเขียนไปยัง MK หลังจากเฟิร์มแวร์ทั้งหมดเสร็จสิ้นและการอ่านการควบคุมที่ตามมาเสร็จสิ้น นอกจากนี้ยังมีปัญหาดังกล่าว: ผู้ใช้พยายามเลือก MK จากรายการคริสตัลที่รองรับ แต่ไม่อยู่ในรายการ ในกรณีนี้จะไม่สามารถใช้โปรแกรมได้ - ตามกฎแล้วจะไม่รวมอยู่ในรายการ MK ที่ขาดหายไป นอกจากนี้การเลือกคอนโทรลเลอร์ด้วยตนเองจากรายการนั้นดูแปลกเนื่องจากโปรแกรมเมอร์ในหลาย ๆ กรณีสามารถกำหนดประเภทของ MK ได้ ทั้งหมดนี้ไม่ได้กล่าวเพื่อสาดโคลนใส่ผลิตภัณฑ์ที่มีอยู่ แต่เพื่ออธิบายสาเหตุของการปรากฏตัวของสคริปต์สำหรับโปรแกรม "Perpetuum M" ที่อธิบายไว้ในบทความนี้ ปัญหามีอยู่จริงและส่วนใหญ่เกี่ยวข้องกับผู้เริ่มต้นที่ไม่สามารถเอาชนะ "กำแพง" นี้ได้เสมอไปเพื่อก้าวแรกสู่โลกของไมโครคอนโทรลเลอร์ สคริปต์ที่นำเสนอคำนึงถึงข้อบกพร่องที่พบในโปรแกรมอื่นๆ มีการใช้ "ความโปร่งใส" สูงสุดของอัลกอริทึมซึ่งเป็นส่วนต่อประสานผู้ใช้ที่เรียบง่ายอย่างยิ่งที่ไม่ต้องการการศึกษาและไม่ปล่อยให้เกิดความสับสนและ "คลิกผิดที่" ในกรณีที่ไม่มี MK ที่จำเป็นในบรรดารายการที่รองรับ คุณสามารถเพิ่มคำอธิบายด้วยตัวคุณเอง โดยรับข้อมูลที่จำเป็นจากเอกสารประกอบที่ดาวน์โหลดจากเว็บไซต์ของผู้พัฒนา MK และที่สำคัญบทเปิดให้ศึกษาและแก้ไขได้ ทุกคนสามารถเปิดมันในโปรแกรมแก้ไขข้อความ ศึกษาและแก้ไขได้ตามดุลยพินิจของพวกเขา เปลี่ยนฟังก์ชั่นที่มีอยู่ตามความชอบและเพิ่มสิ่งที่ขาดหายไป

    สคริปต์เวอร์ชันแรกถูกสร้างขึ้นในเดือนมิถุนายน 2558 เวอร์ชันนี้รองรับเฉพาะ MCU ATtiny และ ATmega ของ Atmel ที่มีฟังก์ชันการเขียน/อ่านหน่วยความจำแฟลช การตั้งค่าบิตการกำหนดค่า และการตรวจหาประเภทคอนโทรลเลอร์โดยอัตโนมัติ ไม่มีการใช้การเขียนและการอ่าน EEPROM มีแผนที่จะเสริมการทำงานของสคริปต์: เพิ่ม การเขียนและอ่าน EEPROM ใช้การรองรับตัวควบคุม PIC เป็นต้น ด้วยเหตุนี้ สคริปต์จึงยังไม่ได้รับการเผยแพร่แต่เนื่องจากไม่มีเวลา การดำเนินการตามแผนจึงล่าช้า และเพื่อไม่ให้สิ่งที่ดีที่สุดกลายเป็นศัตรู ดี ได้มีการตัดสินใจเผยแพร่เวอร์ชันที่มีอยู่ ฟังก์ชันที่ใช้งานจะไม่เพียงพอ โปรดอย่าอารมณ์เสีย ในกรณีนี้ คุณสามารถลองเพิ่มฟังก์ชันที่ต้องการได้ด้วยตัวเอง ฉันจะไม่ซ่อนมัน: แนวคิดของ ​​​​การสร้างสคริปต์นี้ในขั้นต้นยังมีความหมายทางการศึกษาอีกด้วย เมื่อเข้าใจอัลกอริทึมและเพิ่มบางอย่างของคุณเองแล้ว คุณจะสามารถเข้าใจการทำงานของ MK ในโหมดการเขียนโปรแกรมได้ดีขึ้น เพื่อที่ในอนาคตคุณจะ ไม่อยู่ในฐานะสาวหน้าชั้น รถที่กำลังเคลื่อนที่มองดูข้างในอย่างรอบคอบและไม่เข้าใจว่าทำไมมันถึง "ไม่ไป"

    2. อินเทอร์เฟซ MK ในโหมดการเขียนโปรแกรม

    มีหลายวิธีในการทำให้คอนโทรลเลอร์เข้าสู่โหมดการเขียนโปรแกรมและใช้งานในโหมดนี้ วิธีที่ง่ายที่สุดในการติดตั้งคอนโทรลเลอร์ซีรีส์ ATtiny และ ATmega น่าจะเป็น SPI เราจะใช้พวกเขา

    แต่ก่อนที่จะดำเนินการพิจารณาสัญญาณที่จำเป็นสำหรับการจัดตั้ง SPI เราจะทำการจองจำนวนหนึ่ง ไมโครคอนโทรลเลอร์มีบิตการกำหนดค่า นี่คือบางอย่างเช่นสวิตช์สลับการสลับซึ่งช่วยให้คุณเปลี่ยนคุณสมบัติบางอย่างของไมโครวงจรตามความต้องการของโครงการ ทางกายภาพ เซลล์เหล่านี้เป็นเซลล์ของหน่วยความจำไม่ลบเลือน เช่นเดียวกับเซลล์ที่เขียนโปรแกรม ความแตกต่างคือมีน้อยมาก (มากถึงสามไบต์สำหรับ ATmega) และไม่รวมอยู่ในพื้นที่ที่อยู่ของหน่วยความจำใด ๆ การเขียนและการอ่านข้อมูลการกำหนดค่าดำเนินการโดยคำสั่งแยกต่างหากของโหมดการเขียนโปรแกรม MK ตอนนี้ สิ่งสำคัญคือต้องทราบว่าบิตการกำหนดค่าบางอย่างส่งผลต่อความสามารถในการใช้ SPI ด้วยค่าบางอย่างอาจทำให้ไม่สามารถใช้ SPI ได้ หากคุณเจอไมโครคอนโทรลเลอร์ดังกล่าววิธีที่เสนอในบทความนี้จะไม่ช่วย ในกรณีนี้ คุณจะต้องเปลี่ยนการตั้งค่าของบิตการกำหนดค่าในโปรแกรมเมอร์ซึ่งรองรับโหมดการเขียนโปรแกรมอื่น หรือใช้ไมโครคอนโทรลเลอร์อื่น แต่ปัญหานี้เกี่ยวข้องกับ MKs ที่ใช้แล้วเท่านั้นหรือที่มีคน "เล่น" ไม่สำเร็จ ความจริงก็คือ MK ใหม่มาพร้อมกับการตั้งค่าบิตการกำหนดค่าที่ไม่ได้ป้องกันการใช้ SPI สิ่งนี้ได้รับการยืนยันจากผลการทดสอบของสคริปต์โปรแกรมเมอร์สำหรับโปรแกรม "Perpetuum M" ซึ่งในระหว่างนั้นแฟลช MKs ที่แตกต่างกันสี่ตัว (ATmega8, ATmega128, ATtiny13, ATtiny44) สำเร็จ พวกเขาทั้งหมดใหม่ การตั้งค่าเริ่มต้นของบิตการกำหนดคอนฟิกสอดคล้องกับเอกสารประกอบและไม่รบกวนการใช้ SPI

    คุณควรใส่ใจกับบิตต่อไปนี้ บิต SPIEN เปิดหรือปิดการใช้งาน SPI อย่างชัดเจน ดังนั้นในกรณีของเรา ค่าของมันจะต้องได้รับอนุญาต บิต RSTDISBL สามารถเปลี่ยนหนึ่งในเอาต์พุตไมโครเซอร์กิต (กำหนดไว้ล่วงหน้า) ให้เป็นอินพุตสัญญาณ "รีเซ็ต" หรือไม่เปลี่ยนก็ได้ (ขึ้นอยู่กับค่าที่เขียนลงในบิตนี้) ในกรณีของเราจำเป็นต้องมีอินพุต "รีเซ็ต" (หากไม่มีอยู่จะไม่สามารถถ่ายโอน MK ไปยังโหมดการเขียนโปรแกรมผ่าน SPI) นอกจากนี้ยังมีบิตของกลุ่ม CKSEL ที่ระบุแหล่งที่มาของสัญญาณนาฬิกา พวกเขาไม่ได้ป้องกันการใช้ SPI แต่จำเป็นต้องคำนึงถึงด้วย เพราะหากไม่มีสัญญาณนาฬิกาหรือหากความถี่ต่ำกว่าที่อนุญาตสำหรับความเร็ว SPI ที่กำหนด ก็จะไม่มีอะไรดีเกิดขึ้นเช่นกัน โดยปกติแล้ว MCU ใหม่ที่มี RC oscillator ภายในจะมีการตั้งค่าบิตกลุ่ม CKSEL ให้ใช้ เราค่อนข้างพอใจกับสิ่งนี้ - การตอกบัตรมีให้โดยไม่ต้องใช้ความพยายามเพิ่มเติมในส่วนของเรา คุณไม่จำเป็นต้องบัดกรีแร่ควอทซ์และไม่ต้องต่อเครื่องกำเนิดไฟฟ้าภายนอก หากบิตที่ระบุมีการตั้งค่าอื่น คุณจะต้องดูแลการตอกบัตรตามการตั้งค่า ในกรณีนี้ อาจจำเป็นต้องเชื่อมต่อเครื่องกำเนิดเสียงควอตซ์หรือเครื่องกำเนิดสัญญาณนาฬิกาภายนอกเข้ากับ MK แต่ภายในกรอบของบทความนี้ เราจะไม่พิจารณาวิธีการดำเนินการนี้ ตัวอย่างของการเชื่อมต่อ MK สำหรับการเขียนโปรแกรมที่มีอยู่ในบทความนี้ได้รับการออกแบบมาสำหรับกรณีที่ง่ายที่สุด

    ข้าว. 1. การสื่อสาร SPI ในโหมดการเขียนโปรแกรม

    ทีนี้มาดูรูปที่ 1 ซึ่งนำมาจากเอกสารสำหรับ MK ATmega128A แสดงขั้นตอนการส่งหนึ่งไบต์ไปยัง MCU และรับหนึ่งไบต์จาก MCU พร้อมกัน อย่างที่เราเห็นกระบวนการทั้งสองนี้ใช้พัลส์นาฬิกาเดียวกันที่มาจากโปรแกรมเมอร์ไปยังไมโครคอนโทรลเลอร์ที่อินพุต SCK ซึ่งเป็นหนึ่งในพินของไมโครวงจรซึ่งกำหนดบทบาทนี้ในโหมดการเขียนโปรแกรม SPI สายสัญญาณอีกสองเส้นให้การรับและส่งข้อมูลหนึ่งบิตต่อนาฬิกา ผ่านอินพุต MOSI ข้อมูลจะเข้าสู่ไมโครคอนโทรลเลอร์ และข้อมูลที่อ่านจะมาจากเอาต์พุต MISO สังเกตเส้นประสองเส้นที่ลากจาก SCK ถึง MISO และ MOSI โดยจะแสดงช่วงเวลาใดที่ไมโครคอนโทรลเลอร์ "กลืน" ชุดบิตข้อมูลที่อินพุต MOSI และช่วงเวลาใดที่ตั้งค่าบิตข้อมูลของตัวเองที่เอาต์พุต MISO ทุกอย่างค่อนข้างง่าย แต่ในการเข้าสู่ MK ในโหมดการเขียนโปรแกรมเรายังต้องมีสัญญาณ RESET อย่าลืมเกี่ยวกับสาย GND ทั่วไปและแหล่งจ่ายไฟ VCC โดยรวมแล้วปรากฎว่าต้องเชื่อมต่อไมโครคอนโทรลเลอร์เพียง 6 สายเพื่อแฟลชผ่าน SPI ด้านล่างนี้เราจะวิเคราะห์รายละเอียดเพิ่มเติม แต่ตอนนี้เราจะเพิ่มการแลกเปลี่ยนข้อมูลกับ MK ในโหมดการเขียนโปรแกรมผ่าน SPI นั้นดำเนินการในแพ็กเก็ต 4 ไบต์ ไบต์แรกของแต่ละแพ็กเก็ตจะถูกสงวนไว้อย่างสมบูรณ์สำหรับการเข้ารหัสคำสั่ง ไบต์ที่สอง ขึ้นอยู่กับไบต์แรก อาจเป็นความต่อเนื่องของรหัสคำสั่งหรือส่วนหนึ่งของแอดเดรส หรืออาจมีค่าตามอำเภอใจก็ได้ ไบต์ที่สามใช้เป็นหลักในการส่งแอดเดรส แต่ในหลาย ๆ คำสั่งสามารถมีค่าตามอำเภอใจได้ ไบต์ที่สี่มักจะนำข้อมูลหรือมีค่าตามอำเภอใจ พร้อมกันกับการถ่ายโอนไบต์ที่สี่ บางคำสั่งจะรับข้อมูลจาก MK สามารถดูรายละเอียดเกี่ยวกับแต่ละคำสั่งได้ในเอกสารประกอบของคอนโทรลเลอร์ในตารางที่เรียกว่า "SPI Serial Programming Instruction Set" สำหรับตอนนี้ เราทราบเพียงว่าการแลกเปลี่ยนทั้งหมดกับคอนโทรลเลอร์นั้นสร้างขึ้นจากลำดับของแพ็กเก็ต 32 บิต ซึ่งแต่ละแพ็กเก็ตจะไม่มีการส่งข้อมูลที่เป็นประโยชน์มากกว่าหนึ่งไบต์ สิ่งนี้ไม่ได้ดีที่สุด แต่โดยทั่วไปก็ใช้งานได้ดี

    3. เชื่อมต่อ MK เพื่อตั้งโปรแกรม

    เพื่อให้แน่ใจว่าสัญญาณที่จำเป็นทั้งหมดถูกส่งไปยังอินพุตไมโครคอนโทรลเลอร์สำหรับการจัดระเบียบอินเทอร์เฟซ SPI และการอ่านข้อมูลจากเอาต์พุต MISO ไม่จำเป็นต้องสร้างโปรแกรมเมอร์ ทำได้ง่ายด้วยตัวแปลง USB-RS232TTL ทั่วไป

    บนอินเทอร์เน็ตคุณมักจะพบข้อมูลว่าตัวแปลงดังกล่าวด้อยกว่าซึ่งไม่สามารถทำอะไรร้ายแรงกับพวกเขาได้ แต่สำหรับรุ่นคอนเวอร์เตอร์ส่วนใหญ่ ความคิดเห็นนี้ไม่ถูกต้อง ใช่ มีคอนเวอร์เตอร์ขายที่ไม่มีอินพุตและเอาต์พุตทั้งหมดเมื่อเทียบกับพอร์ต COM มาตรฐาน (เช่น เฉพาะ TXD และ RXD) ในขณะที่มีการออกแบบที่ไม่สามารถแยกออกได้ (ไมโครเซอร์กิตเต็มไปด้วยพลาสติก - มันคือ หาข้อสรุปไม่ได้) แต่สิ่งเหล่านี้ไม่คุ้มค่าที่จะซื้อ ในบางกรณี คุณสามารถรับอินพุตและเอาต์พุตของพอร์ตที่ขาดหายไปได้โดยการบัดกรีสายไฟเข้ากับไมโครเซอร์กิตโดยตรง ตัวอย่างของตัวแปลง "ปรับปรุง" ดังกล่าวแสดงในรูปที่ 2 (PL-2303 microcircuit - เพิ่มเติมเกี่ยวกับจุดประสงค์ของพินในบทความ "") นี่เป็นหนึ่งในรุ่นที่ถูกที่สุด แต่มีข้อดีเมื่อใช้ในการออกแบบโฮมเมด สายอะแดปเตอร์ที่มีคุณสมบัติครบถ้วนพร้อมขั้วต่อเก้าพินมาตรฐานที่ปลาย เช่น พอร์ต COM ก็แพร่หลายเช่นกัน ซึ่งแตกต่างจากพอร์ต COM ปกติเฉพาะในระดับ TTL และเข้ากันไม่ได้กับซอฟต์แวร์ที่ล้าสมัยและฮาร์ดแวร์เก่าบางตัว นอกจากนี้ ยังสังเกตได้ว่าสายไฟที่ใช้ชิป CH34x ในการทดสอบสุดขั้วต่างๆ แสดงให้เห็นว่ามีความน่าเชื่อถือและเสถียรกว่ามากเมื่อเทียบกับคอนเวอร์เตอร์ที่ใช้ PL-2303 อย่างไรก็ตามในการใช้งานปกติจะไม่เห็นความแตกต่าง

    เมื่อเลือกตัวแปลง USB-RS232TTL คุณควรคำนึงถึงความเข้ากันได้ของไดรเวอร์กับเวอร์ชันของระบบปฏิบัติการที่ใช้

    ให้เราพิจารณารายละเอียดเพิ่มเติมเกี่ยวกับหลักการเชื่อมต่อไมโครคอนโทรลเลอร์และตัวแปลง USB-RS232TTL โดยใช้ตัวอย่างของ MK สี่รุ่นที่แตกต่างกัน: ATtiny13, ATtiny44, ATmega8 และ ATmega128 รูปที่ 3 แสดงรูปแบบทั่วไปของการเชื่อมต่อดังกล่าว คุณอาจประหลาดใจที่สัญญาณ RS232 (RTS, TXD, DTR และ CTS) ถูกใช้ในทางที่ผิด แต่ไม่ต้องกังวล: โปรแกรม Perpetuum M สามารถทำงานร่วมกับพวกเขาได้โดยตรง - ตั้งค่าเอาต์พุตและอ่านสถานะอินพุต ไม่ว่าในกรณีใด ตัวแปลง USB-RS232TTL ที่ใช้กันอย่างแพร่หลายซึ่งใช้ชิป CH34x และ PL-2303 ให้โอกาสดังกล่าว - สิ่งนี้ได้รับการตรวจสอบแล้ว ตัวแปลงยอดนิยมอื่นๆ ก็ไม่น่าจะมีปัญหาเช่นกัน เนื่องจากฟังก์ชันมาตรฐานของ Windows ใช้เพื่อเข้าถึงพอร์ต

    ตามหลักการแล้วตัวต้านทานที่แสดงในแผนภาพทั่วไปไม่สามารถติดตั้งได้ แต่ก็ยังดีกว่าที่จะติดตั้ง จุดประสงค์ของพวกเขาคืออะไร? การใช้อินพุตและเอาต์พุตของตัวแปลง TTL "และแหล่งจ่ายไฟห้าโวลต์ของไมโครคอนโทรลเลอร์เราจึงไม่จำเป็นต้องจับคู่ระดับตรรกะ - ทุกอย่างค่อนข้างถูกต้องอยู่แล้ว ซึ่งหมายความว่าการเชื่อมต่อสามารถทำได้โดยตรง แต่ อะไรก็เกิดขึ้นได้ในระหว่างการทดลอง ตัวอย่างเช่น ตามกฎของความถ่อย ไขควงสามารถตกลงในที่ซึ่งไม่สามารถล้มลงได้ แต่อย่างใด และปิดสิ่งที่ไม่ควรปิดในกรณีใด ๆ ในบทบาทของ " ไขควง" แน่นอน อะไรก็เกิดขึ้นได้ ตัวต้านทานในกรณีนี้บางครั้งลดผลที่ตามมา หนึ่งในจุดประสงค์ของพวกเขาคือการกำจัดความขัดแย้งที่อาจเกิดขึ้นของเอาต์พุตความจริงก็คือในตอนท้ายของการเขียนโปรแกรมไมโครคอนโทรลเลอร์จะเข้าสู่การทำงานปกติ และอาจเกิดขึ้นได้ที่เอาต์พุตที่เชื่อมต่อกับเอาต์พุตของตัวแปลง (RTS, TXD หรือ DTR) ก็กลายเป็นเอาต์พุตเช่นกัน ตามที่บันทึกไว้ในโปรแกรม MK ในกรณีนี้จะแย่มากหากมีเอาต์พุตที่เชื่อมต่อโดยตรงสองเอาต์พุต " ต่อสู้" - ลองตั้งค่า ระดับตรรกะที่แตกต่างกัน ในการ "ต่อสู้" เช่นนี้ บางคนอาจ "แพ้" ได้ แต่เราไม่ต้องการสิ่งนี้

    ค่าของตัวต้านทานทั้งสามถูกเลือกที่ระดับ 4.3 kOhm สิ่งนี้ใช้กับการเชื่อมต่อระหว่างเอาต์พุตของตัวแปลงและอินพุตของไมโครคอนโทรลเลอร์ ความแม่นยำของตัวต้านทานไม่ได้มีบทบาท: คุณสามารถลดความต้านทานเป็น 1 KΩ หรือเพิ่มเป็น 10 KΩ (แต่ในกรณีที่สอง ความเสี่ยงของการรบกวนจะเพิ่มขึ้นเมื่อใช้สายยาวระหว่างทางไปยัง MC) สำหรับการเชื่อมต่อระหว่างอินพุตตัวแปลง (CTS) และเอาต์พุตไมโครคอนโทรลเลอร์ (MISO) จะใช้ตัวต้านทาน 100 โอห์มที่นี่ นี่เป็นเพราะลักษณะเฉพาะของอินพุตของตัวแปลงที่ใช้ ในระหว่างการทดสอบมีการใช้ตัวแปลงบนชิป PL-2303 ซึ่งดูเหมือนว่าอินพุตจะถูกดึงขึ้นไปที่พลังงานบวกกับความต้านทานที่ค่อนข้างต่ำ (ตามลำดับหลายร้อยโอห์ม) ในการ "ฆ่าการดึงขึ้น" ฉันต้องใส่ตัวต้านทานที่มีความต้านทานเล็กน้อย อย่างไรก็ตามคุณไม่สามารถใส่ได้เลย บนตัวแปลง จะเป็นอินพุตเสมอ ไม่สามารถกลายเป็นทางออกได้ ซึ่งหมายความว่าจะไม่มีความขัดแย้งของทางออกในการพัฒนาเหตุการณ์ใดๆ

    หาก IC มีพิน AVCC แยกต่างหากสำหรับจ่ายไฟให้กับตัวแปลง A/D (เช่น ATmega8 หรือ ATmega128) ควรเชื่อมต่อกับพินไฟทั่วไปของ VCC ไอซีบางตัวมีพินไฟ VCC มากกว่าหนึ่งตัวหรือ GND มากกว่าหนึ่งตัว ตัวอย่างเช่น ATmega128 มีพิน GND 3 พินและพิน VCC 2 พิน ในการออกแบบถาวร เป็นการดีกว่าที่จะเชื่อมโยงข้อสรุปที่มีชื่อเดียวกันเข้าด้วยกัน ในกรณีของเรา ในขณะตั้งโปรแกรม คุณสามารถใช้หนึ่งเอาต์พุตของ VCC และ GND

    และนี่คือลักษณะของการเชื่อมต่อ ATtiny13 รูปแสดงการกำหนดพินที่ใช้เมื่อตั้งโปรแกรมผ่าน SPI ถัดจากรูปภาพ - การเชื่อมต่อชั่วคราวมีลักษณะอย่างไรในความเป็นจริง


    อาจมีคนบอกว่านี่ไม่ใช่เรื่องร้ายแรง - การเชื่อมต่อสายไฟ แต่เราเป็นคนมีเหตุผล เป้าหมายของเราคือการตั้งโปรแกรมไมโครคอนโทรลเลอร์โดยใช้เวลาและทรัพยากรอื่นๆ ให้น้อยที่สุด และไม่อวดใครต่อหน้าใคร คุณภาพไม่ประสบ วิธีการ "ในการโพสต์" ในกรณีนี้ค่อนข้างมีประสิทธิภาพและเป็นธรรม เฟิร์มแวร์ของคอนโทรลเลอร์เป็นขั้นตอนเพียงครั้งเดียวดังนั้นจึงไม่มีเหตุผลที่จะแขวนด้วย "rhinestones" หากจำเป็นต้องเปลี่ยนเฟิร์มแวร์ในอนาคตโดยไม่ต้องถอดคอนโทรลเลอร์ออกจากวงจร (ในผลิตภัณฑ์สำเร็จรูป) สิ่งนี้จะนำมาพิจารณาในการติดตั้งระหว่างการผลิตอุปกรณ์ โดยปกติแล้วจะมีการติดตั้งตัวเชื่อมต่อเพื่อจุดประสงค์นี้ (RESET, SCK, MOSI, MISO, GND) และสามารถแฟลช MK ได้แม้ว่าจะติดตั้งบนบอร์ดแล้วก็ตาม แต่สิ่งเหล่านี้เป็นความสุขที่สร้างสรรค์อยู่แล้ว เราพิจารณากรณีที่ง่ายที่สุด

    ตอนนี้เรามาดู ATtiny44 MK กัน ทุกอย่างเหมือนกันที่นี่ จากภาพวาดและภาพถ่าย แม้แต่ผู้เริ่มต้นก็สามารถเข้าใจการเชื่อมต่อได้ไม่ยาก เช่นเดียวกับ ATtiny44 คุณสามารถเชื่อมต่อ MK ATtiny24 และ ATtiny84 - การกำหนดพินสำหรับทรินิตี้นี้จะเหมือนกัน


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


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

    เพื่อให้ภาพสมบูรณ์ให้ดูที่การเชื่อมต่อของชิป MK กับ "ขา" จำนวนมาก จุดประสงค์ของสายสีดำพิเศษในภาพที่มาจากพิน 15 นั้นเหมือนกับในกรณีของ ATmega8 ทุกประการ


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

    ก่อนดำเนินการต่อในส่วนของซอฟต์แวร์ ตรวจสอบให้แน่ใจว่าได้ติดตั้งไดรเวอร์ตัวแปลง USB-RS232TTL อย่างถูกต้อง (ตรวจสอบ Windows Device Manager) จำหรือจดหมายเลขของพอร์ต COM เสมือนที่ปรากฏขึ้นเมื่อคุณเชื่อมต่อตัวแปลง จะต้องป้อนหมายเลขนี้ในข้อความของสคริปต์ ซึ่งคุณสามารถอ่านเกี่ยวกับด้านล่าง

    4. สคริปต์ - โปรแกรมเมอร์สำหรับ "Perpetuum M"

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

    ไฟล์เก็บถาวรที่มีสคริปต์ควรแตกไฟล์ลงในโฟลเดอร์เดียวกับที่ตั้งโปรแกรม perpetuum.exe ในกรณีนี้ เมื่อคุณเรียกใช้ไฟล์ perpetuum.exe เมนูที่มีรายการสคริปต์ที่ติดตั้งจะแสดงบนหน้าจอ ซึ่งจะมีบรรทัด "โปรแกรมเมอร์ MK AVR" (อาจเป็นรายการเดียว) นี่คือแนวที่เราต้องการ

    สคริปต์อยู่ในโฟลเดอร์ PMS ในไฟล์ "MK Programmer AVR.pms" ไฟล์นี้สามารถดู ศึกษา และแก้ไขได้ตามต้องการในโปรแกรมแก้ไขข้อความทั่วไป เช่น Windows Notepad ก่อนใช้สคริปต์ คุณมักจะต้องทำการเปลี่ยนแปลงข้อความที่เกี่ยวข้องกับการตั้งค่าพอร์ต ในการดำเนินการนี้ ให้ตรวจสอบชื่อพอร์ตที่ใช้ใน Windows Device Manager และหากจำเป็น ให้ทำการแก้ไขที่เหมาะสมในบรรทัด "PortName="COM4"; - แทนที่จะเป็นเลข 4 สามารถเป็นเลขอื่นได้ นอกจากนี้ เมื่อใช้ตัวแปลง USB-RS232TTL รุ่นอื่น อาจจำเป็นต้องเปลี่ยนการตั้งค่าการกลับสัญญาณ (บรรทัดสคริปต์ที่ขึ้นต้นด้วยคำว่า "สูง") คุณสามารถตรวจสอบการผกผันของสัญญาณได้ด้วยตัวแปลง USB-RS232TTL โดยใช้หนึ่งในตัวอย่างที่มีอยู่ในคำแนะนำสำหรับโปรแกรม Perpetuum M (ส่วนของฟังก์ชันสำหรับการทำงานกับพอร์ต)

    โฟลเดอร์ย่อย MK_AVR มีไฟล์พร้อมคำอธิบายของคอนโทรลเลอร์ที่รองรับ หากไม่มีตัวควบคุมที่ต้องการ คุณสามารถเพิ่มตัวควบคุมที่ต้องการได้ด้วยตนเอง โดยทำการเปรียบเทียบ ใช้ไฟล์ใดไฟล์หนึ่งเป็นตัวอย่าง และใช้โปรแกรมแก้ไขข้อความ ป้อนข้อมูลที่จำเป็น โดยนำมาจากเอกสารประกอบสำหรับไมโครคอนโทรลเลอร์ของคุณ สิ่งสำคัญคือต้องระวังป้อนข้อมูลโดยไม่มีข้อผิดพลาดมิฉะนั้น MK จะไม่ถูกตั้งโปรแกรมหรือจะตั้งโปรแกรมไม่ถูกต้อง รุ่นดั้งเดิมรองรับไมโครคอนโทรลเลอร์ 6 ตัว: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 และ ATmega128 สคริปต์ใช้การจดจำอัตโนมัติของคอนโทรลเลอร์ที่เชื่อมต่อ - คุณไม่จำเป็นต้องระบุด้วยตนเอง หากไม่มีตัวระบุที่อ่านจาก MK ในคำอธิบายที่มีอยู่ ข้อความจะแสดงว่าไม่รู้จักตัวควบคุม

    ไฟล์เก็บถาวรพร้อมสคริปต์ยังมีข้อมูลเพิ่มเติม โฟลเดอร์ "AVR controllers inc files" ประกอบด้วยชุดไฟล์คำอธิบายคอนโทรลเลอร์ที่มีประโยชน์และกว้างขวาง ไฟล์เหล่านี้ใช้เมื่อเขียนโปรแกรมของคุณเองสำหรับ MK อีกสี่โฟลเดอร์ "MusicBox_..." มีไฟล์ที่มีโปรแกรมแอสเซมเบลอร์และเฟิร์มแวร์พร้อมสำหรับดาวน์โหลดลงใน MK แยกต่างหากสำหรับ ATtiny13, ATtiny44, ATmega8 และ ATmega128 หากคุณได้เชื่อมต่อหนึ่งใน MK เหล่านี้สำหรับการเขียนโปรแกรมตามที่แนะนำในบทความนี้ คุณสามารถแฟลชได้ทันที - คุณจะได้รับกล่องดนตรี เพิ่มเติมเกี่ยวกับด้านล่าง

    เมื่อคุณเลือกบรรทัด "Programmer MK AVR" ในเมนูสคริปต์ สคริปต์จะเริ่มทำงาน ในเวลาเดียวกัน, มันเปิดพอร์ต, ส่งคำสั่งเพื่อสลับไปยังโหมดการเขียนโปรแกรมไปยัง MC, ได้รับการยืนยันจาก MC เกี่ยวกับการเปลี่ยนแปลงที่สำเร็จ, ขอตัวระบุ MC และค้นหาคำอธิบายของ MC นี้โดยใช้ตัวระบุท่ามกลาง ไฟล์ที่มีอยู่พร้อมคำอธิบาย หากไม่พบคำอธิบายที่จำเป็น ระบบจะแสดงข้อความที่เหมาะสม หากพบคำอธิบายเมนูหลักของโปรแกรมเมอร์จะเปิดขึ้น คุณสามารถดูภาพหน้าจอได้ในรูปที่ 8 ไม่ใช่เรื่องยากอีกต่อไป - เมนูนี้ง่ายมาก

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

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

    5. กล่องดนตรี - งานฝีมือง่าย ๆ สำหรับผู้เริ่มต้น

    หากคุณมีไมโครคอนโทรลเลอร์ตัวใดตัวหนึ่งต่อไปนี้: ATtiny13, ATtiny44, ATmega8 หรือ ATmega128 คุณสามารถเปลี่ยนเป็นกล่องดนตรีหรือการ์ดเพลงได้อย่างง่ายดาย ในการทำเช่นนี้ก็เพียงพอแล้วที่จะเขียนเฟิร์มแวร์ที่เหมาะสมลงใน MK ซึ่งเป็นหนึ่งในสี่ที่อยู่ในโฟลเดอร์ "MusicBox_..." ในไฟล์เก็บถาวรที่มีสคริปต์ รหัสเฟิร์มแวร์ถูกจัดเก็บไว้ในไฟล์ที่มีนามสกุล ".hex" การใช้ ATmega128 สำหรับงานฝีมือนั้นแน่นอนว่า "อ้วน" เช่นเดียวกับ ATmega8 แต่อาจมีประโยชน์สำหรับการทดสอบหรือการทดลอง กล่าวคือ เพื่อวัตถุประสงค์ทางการศึกษา แนบข้อความโปรแกรม Assembler มาด้วย โปรแกรมเหล่านี้ไม่ได้สร้างขึ้นใหม่ทั้งหมด - โปรแกรมของกล่องดนตรีจากหนังสือของ A.V. Belov "ไมโครคอนโทรลเลอร์ AVR ในการฝึกวิทยุสมัครเล่น" ถูกนำมาใช้เป็นพื้นฐาน โปรแกรมดั้งเดิมมีการเปลี่ยนแปลงที่สำคัญหลายประการ:
    1. ดัดแปลงสำหรับแต่ละ MK ทั้งสี่: ATtiny13, ATtiny44, ATmega8 และ ATmega128
    2. ปุ่มต่างๆ ถูกยกเลิก - ไม่จำเป็นต้องเชื่อมต่อกับตัวควบคุมใดๆ ยกเว้นพลังงานและตัวส่งเสียง
    3. ระยะเวลาของโน้ตแต่ละตัวจะลดลงตามระยะเวลาของการหยุดชั่วคราวระหว่างโน้ตเพื่อกำจัดการรบกวนจังหวะดนตรี
    4. ทำนองที่แปดเชื่อมกัน ไม่มีใช้ในฉบับหนังสือ
    5. อัตนัย: "การปรับปรุง" บางอย่างสำหรับการเพิ่มประสิทธิภาพและการรับรู้อัลกอริทึมที่ง่ายขึ้น

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

    ใน ATtiny13 เนื่องจากไม่มีตัวนับ 16 บิตสำหรับเล่นโน้ต จึงจำเป็นต้องใช้ตัวนับ 8 บิต ซึ่งทำให้ความแม่นยำของเสียงโน้ตลดลงบ้าง แต่แทบจะไม่สังเกตเห็นด้วยหู

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

    มันไม่สมเหตุสมผลเลยที่จะให้ไดอะแกรมของกล่องดนตรี: มันมีแค่ไมโครคอนโทรลเลอร์ พาวเวอร์ซัพพลาย และตัวส่งเสียงแบบเพียโซ จ่ายพลังงานด้วยวิธีเดียวกับที่เราทำเมื่อตั้งโปรแกรม MK ตัวส่งสัญญาณเสียงเชื่อมต่อระหว่างสายสามัญ (เอาต์พุต GND ของคอนโทรลเลอร์) และหนึ่งในเอาต์พุตของ MK ซึ่งหมายเลขดังกล่าวสามารถพบได้ในไฟล์ที่มีรหัสแอสเซมเบลอร์ของโปรแกรม (*.asm) ที่จุดเริ่มต้นของข้อความของโปรแกรมสำหรับแต่ละ MK ในความคิดเห็นมีบรรทัด: "สัญญาณเสียงถูกสร้างขึ้นที่เอาต์พุต XX" เมื่อโปรแกรมเมอร์เขียนสคริปต์สิ้นสุดลง ไมโครคอนโทรลเลอร์จะออกจากโหมดการเขียนโปรแกรมและเปลี่ยนไปใช้โหมดการทำงานปกติ การเล่นเพลงจะเริ่มต้นทันที คุณสามารถตรวจสอบสิ่งนี้ได้โดยการเชื่อมต่อตัวส่งสัญญาณเสียง ปล่อยการเชื่อมต่อ sounder ไว้ในขณะที่ตั้งโปรแกรมชิปเฉพาะในกรณีที่รับเสียงจากพินที่ไม่ได้ใช้ใน SPI มิฉะนั้นความจุเพิ่มเติมบนพินอาจรบกวนการเขียนโปรแกรม

    • หน่วยความจำสำหรับโปรแกรม (FLASH) - 1Kb
    • RAM - 64 ไบต์
    • จำนวนอินพุต / เอาต์พุต - 6
    • เอาต์พุต PWM - 2
    • อินพุตแบบอะนาล็อก (ADC 10 บิต) - 4
    • ตัวจับเวลา 8 บิต - 1
    • แรงดันไฟจ่าย 1.8 - 5.5V
    • ความถี่ในการทำงาน - สูงสุด 20 MHz
    • การบริโภคในโหมดแอคทีฟ 1.8V / 1MHz - 190uA
    • การบริโภคในโหมดสลีป 1.8V / 1MHz - 24uA

    ATtiny13 การเขียนโปรแกรม

    สำหรับการเขียนโปรแกรม ฉันตั้งค่า Arduino IDE อย่างที่คุณทราบ สภาพแวดล้อมการพัฒนานี้สามารถรองรับคอนโทรลเลอร์เพิ่มเติมได้ ตัวอย่างเช่น ในบทความนี้ ฉันได้พูดถึงวิธีการตั้งโปรแกรม ESP8266 ของ "people's WiFi" ใน Arduino IDE เว็บไซต์ arduino.cc มีเธรดที่เยี่ยมชมโดยการเขียนโปรแกรม ATTiny13 ในสภาพแวดล้อม Arduino ฉันติดตั้งเวอร์ชัน 1.6.5 แล้ว ฉันดาวน์โหลด ATTiny core สำหรับ Arduino archive ฉันคลายไฟล์ไปยังโฟลเดอร์ c:\Program Files (x86)\Arduino\hardware\ และบอร์ดเพิ่มเติมปรากฏใน Arduino IDE

    ตอนนี้ดาวน์โหลดโปรแกรม จำนวนหน่วยความจำไมโครโปรเซสเซอร์เพียง 1Kb และไม่มี bootloader ที่จะพอดี ดังนั้นการดาวน์โหลดสเก็ตช์จึงทำโดยโปรแกรมเมอร์ผ่าน ISP USBAsp ที่ฉันตั้งโปรแกรม Atmega328 ไม่ต้องการทำงานกับ tinka ฉันต้องการเฟิร์มแวร์โปรแกรมเมอร์พิเศษซึ่งฉันไม่ต้องการยุ่ง คุณสามารถตั้งโปรแกรมไมโครคอนโทรลเลอร์โดยใช้ Arduino ใดก็ได้ ในการทำเช่นนี้ฉันรวบรวมโครงร่างต่อไปนี้:

    ใน Arduino IDE เลือก "ไฟล์->ตัวอย่าง->ArduinoISP" และอัปโหลดร่างโปรแกรมเมอร์ไปยัง Arduino จากนั้นฉันเลือก "Tools->Programmer->Arduino as ISP" ตอนนี้คุณสามารถอัปโหลดภาพร่างไปที่ tinka ควรสังเกตว่าแกน ATTiny13 สำหรับ Arduino มีชุดฟังก์ชัน Arduino ที่จำกัด

    ที่ทำงานฉันมีต้นคริสต์มาสตั้งโต๊ะพร้อมไฟนำทาง

    ในต้นคริสต์มาสมีหลอดฮาโลเจน 12V และมอเตอร์ที่เปลี่ยนฟิลเตอร์วงกลมสีที่เปลี่ยนสีของเส้นนำแสง เป็นเวลา 3 ปี ทั้งหลอดไฟและมอเตอร์ก็ดับ

    ฉันจึงตัดสินใจคืนต้นคริสต์มาสนี้ด้วยเทป RGB ที่ควบคุมโดย ATtiny13 การลบการควบคุมเทปกลายเป็นดังนี้:

    ทรานซิสเตอร์และตัวต้านทานสามตัว ตัวควบคุมแรงดันไฟฟ้าเชิงเส้น และตัวทินก้าเอง

    ภาพร่างเป็นซอฟต์แวร์ PWM สามช่องสัญญาณที่มีการเปลี่ยนแปลงความสว่างในช่องต่างๆ อันเป็นผลมาจากการที่เทปส่องแสงเป็นสีต่างๆ

    หลังจากนั้นก็เหลือเพียงการติดบอร์ดและเทปในกล่องต้นคริสต์มาส

    ติดเทปสีขาวเพื่อปรับปรุงการสะท้อนแสงภายในเคส



    ชอบบทความ? แบ่งปัน