วิธีเปลี่ยน Arduino ของคุณให้เป็น ISP - การเขียนโปรแกรม ATmel ATtiny85

เผยแพร่แล้ว: 2017-06-13

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

แพลตฟอร์ม Arduino เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเรียนรู้ แต่บางครั้งบอร์ด Arduino ที่รองรับอาจไม่เหมาะกับตำแหน่งที่คุณต้องการ ด้วย Arduino Uno (รุ่นทั่วไป) ที่วัดได้ประมาณ 65 มม. x 50 มม. คุณจึงเห็นได้ง่ายว่าอาจเป็นส่วนประกอบที่ใหญ่ที่สุดในบางโครงการได้อย่างไร มีบอร์ดอื่นๆ เช่น Nano ที่เล็กกว่ามาก (Nano knockoff ของฉันคือ 43 มม. คูณ 17 มม. เล็กกว่า 4.5 เท่า) แต่ถึงอย่างนั้น บางครั้งก็ใหญ่เกินไป จะเป็นอย่างไร ถ้าคุณต้องการสร้างอุปกรณ์สวมใส่ บางทีอาจเป็นเพียงไฟ LED กะพริบเพื่อให้สุนัขของคุณสวมใส่ในเวลากลางคืน เมื่อคุณคำนึงถึงแบตเตอรี่และอื่น ๆ แบตเตอรี่จะมีขนาดใหญ่พอสมควร

คิวสาย ATtiny ฮีโร่ของปัญหาของเรา ชื่อของ ATtiny นั้นชัดเจน คุณสามารถค้นหาได้ในแพ็คเกจ DIP-8 (แพ็คเกจอินไลน์คู่ - 8 พิน) ซึ่งมีขนาดประมาณ 9 มม. ตามลักษณะที่แท้จริงของชื่อ ATtiny นั้นมีขนาดเล็ก แต่มีมากกว่าขนาดทางกายภาพ ATtiny85 ซึ่งใช้สำหรับบทความนี้ มีเพียง 8KB ของหน่วยความจำแฟลชของโปรแกรม, RAM 512 ไบต์ และ EEPROM 512 ไบต์ (ที่เก็บข้อมูลถาวรภายนอกที่จัดเก็บโปรแกรม)

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

ISP – ในโปรแกรมเมอร์ระบบ

In System Programmer (ISP) ไม่ได้สวยงามอย่างที่คิด โดยปกติ ISP สำหรับชิป ATmel จะประกอบด้วยอุปกรณ์ที่มีสาย USB ที่มีขั้วต่อแบบหกพิน หมุด ISP นั้นมองเห็นได้ง่ายบน Arduinos โดยปกติแล้วจะอยู่ตรงข้ามกับขั้วต่อ USB ชิป ATmel มีวัตถุประสงค์เพื่อตั้งโปรแกรมผ่านพิน ISP แต่แพลตฟอร์ม Arduino ได้ใช้อะแดปเตอร์ USB กับซีเรียลบนบอร์ดเพื่อขจัดความต้องการอุปกรณ์ ISP อย่างไรก็ตามเรื่องนี้ พวกเขาได้ทิ้งพิน ISP ไว้ในหลายๆ รุ่น หากไม่มีรุ่นส่วนใหญ่

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

เราทำได้โดยเปิด Arduino IDE และเลือก ArduinoISP จากภาพร่างตัวอย่าง

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

ที่บรรทัด 220 เราพบฟังก์ชัน setup()

 การตั้งค่าเป็นโมฆะ () {
  SERIAL.begin(บาวเดรท);

  โหมดพิน (LED_PMODE, เอาต์พุต);
  ชีพจร (LED_PMODE, 2);
  โหมดพิน (LED_ERR, เอาต์พุต);
  ชีพจร (LED_ERR, 2);
  โหมดพิน (LED_HB, เอาต์พุต);
  ชีพจร (LED_HB, 2);

}

เราจำเป็นต้องเปลี่ยน BAUDRATE เป็น 19200 เพื่อให้บรรทัดอ่าน

 SERIAL.begin(19200);

จากสิ่งที่ฉันได้อ่านมา Arduino IDE ได้รับการอัปเดตที่ทำให้ไม่สามารถใช้งานร่วมกับเฟิร์มแวร์ ArduinoISP นี้ได้ Arduino และ IDE พยายามสื่อสารด้วยอัตราบอดที่ต่างกัน ส่งผลให้ไม่สามารถใช้ Arduino เป็น ISP แม้ว่าเฟิร์มแวร์จะกะพริบอย่างถูกต้องก็ตาม

ห้องสมุด ATtiny

Arduino IDE รองรับไมโครคอนโทรลเลอร์และบอร์ดต่างๆ ที่หลากหลาย แต่น่าเสียดายที่ ATtiny series ไม่ได้รวมอยู่ด้วย ซึ่งหมายความว่าเราต้องคว้าการสนับสนุนสำหรับพวกเขาเอง

วิธีที่ใช้ได้ผลสำหรับฉันคือการเพิ่ม URL ด้านล่างไปยัง URL ตัวจัดการบอร์ดเพิ่มเติมภายใต้การตั้งค่า Arduino IDE

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

รีสตาร์ท IDE เปิด Boards Manager ภายใต้ Tools -> Board -> Boards Manager จากนั้นค้นหาแพ็คเกจ ATtiny และติดตั้ง

เมื่อเสร็จแล้ว คุณสามารถเริ่มสร้างวงจรเพื่อตั้งโปรแกรม ATtiny ได้

สร้าง ISP ของคุณ

มีหลายวิธีในการสร้าง ISP ของคุณ คุณสามารถสร้างมันขึ้นมาในเขียงหั่นขนมแบบไม่มีบัดกรี เพื่อให้สามารถนำชิ้นส่วนกลับมาใช้ใหม่ได้ หรือคุณสามารถสร้างสารละลายกึ่งถาวรโดยการบัดกรีทั้งหมดเข้าด้วยกันเหมือนที่ฉันทำ หากคุณกำลังบัดกรีทั้งหมดเข้าด้วยกันอย่างระมัดระวัง คุณสามารถใช้ Arduino ซ้ำกับโครงการอื่นได้หากต้องการ

เมื่อดูสามสิบบรรทัดแรกของร่าง ArduinoISP เราสามารถหาข้อมูลต่อไปนี้เกี่ยวกับการตั้งค่า Arduino ให้ทำงานเป็น ISP

ปักหมุด 10 ในการรีเซ็ตพินสำหรับ
ไมโครคอนโทรลเลอร์เป้าหมาย
ปักหมุด 11 SPI Master Out
ทาสใน
ปักหมุด 12 SPI Master In
ทาสออก
ปักหมุด13 SPI Serial Clock

หรือคุณสามารถเชื่อมต่อ LED กับพินต่อไปนี้เพื่อระบุสถานะ

  • Pin 9 – Heartbeat – บ่งชี้ว่า ISP กำลังทำงาน
  • พิน 8 – ข้อผิดพลาด – บ่งชี้ว่ามีข้อผิดพลาดเกิดขึ้น
  • Pin 7 - การเขียนโปรแกรม - ระบุการสื่อสารที่ใช้งานอยู่กับ Target

โปรดทราบว่า LED เหล่านี้จะต้องใช้ตัวต้านทาน

ที่นี่เราสามารถเห็นพินเอาต์สำหรับ ATtiny85 และการเชื่อมต่อที่เหมาะสมที่เราจำเป็นต้องกลับไปที่ Arduino มันเป็นภาพวาดที่ค่อนข้างหยาบ แต่ฉันติดป้ายกำกับบน ATtiny85 เพื่อความสะดวก อย่างไรก็ตาม ควรสังเกตว่าหมุดไม่ได้อยู่ที่ 1,2,3..8 เนื่องจากอยู่ในไดอะแกรม หมุดเหล่านี้ถูกกำหนดไว้ใน Arduino IDE เนื่องจากมีการติดป้ายกำกับในข้อความในแนวทแยง

นี่เป็นไดอะแกรมที่มีรายละเอียดมากขึ้นของการเชื่อมต่อต่างๆ ไฟ LED ทั้งหมดเป็นทางเลือก แต่มีประโยชน์สำหรับการแก้ไขปัญหา นอกเหนือจากไฟ LED แสดงสถานะสามดวงที่แนะนำในไฟล์สเก็ตช์ ArduinoISP แล้ว ยังมีไฟดวงหนึ่งที่เชื่อมต่อง่ายๆ จาก 5V กับกราว ด์ (แน่นอนว่ามีตัวต้านทาน) และ จากนั้นมีหนึ่งตัวเชื่อมต่อกับพินที่สอง (พิน 3 ใน IDE) สำหรับทดสอบ ATtiny ด้วยการทดสอบการกะพริบ สังเกตตัวเก็บประจุที่เชื่อมต่อพินรีเซ็ตกับกราวด์ ซึ่งจำเป็นสำหรับ Arduino เพื่อทำหน้าที่เป็น ISP

นี่คือ Arduino ISP ที่ฉันสร้างขึ้นสำหรับไมโครคอนโทรลเลอร์ ATtiny คุณจะเห็นว่าฉันใช้ซ็อกเก็ต DIP-8 เพื่อถือ ATtiny ในขณะที่กำลังตั้งโปรแกรม ฉันยังเหลือที่ว่างเพียงพอทางด้านขวาเพื่อติดตั้งซ็อกเก็ต DIP-28 สำหรับการเขียนโปรแกรมชิป ATmega เช่น ATmega328P การอัพเกรดจะตรงไปตรงมามาก เพียงแต่ต้องเชื่อมต่อพินที่จำเป็นสำหรับชิป Atmega เหมือนกับที่เรามีกับ ATtiny

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

สำหรับบอร์ด เราเลือกตัวเลือก ATiny 25/45/85 จากนั้นเลือก ATtiny85 ในการเลือกโปรเซสเซอร์ และสุดท้าย เราเลือก Arduino เป็น ISP จากโปรแกรมเมอร์ นั่นบอก IDE ทุกสิ่งที่จำเป็นต้องรู้เกี่ยวกับระบบเป้าหมาย รวมถึงวิธีที่จะสื่อสารกับ IDE ตอนนี้เราพร้อมที่จะนำร่าง Blink ขึ้นมาแล้ว (หรือพิมพ์ด้วยตัวคุณเองหากคุณเป็นคนไม่ยอมใครง่ายๆ) และลองใช้งาน อย่าลืมเปลี่ยนพินที่ใช้สำหรับกะพริบ LED เป็นพินที่คุณใช้ใน วงจรนั่นคือพิน 3 หากคุณใช้แผนผังที่ฉันให้ไว้ สุดท้าย เรารวบรวมและอัปโหลดภาพร่างโดยคลิก ร่าง -> อัปโหลดโดยใช้โปรแกรมเมอร์

 การตั้งค่าเป็นโมฆะ () {
  โหมดพิน (3, เอาต์พุต);
}

วงเป็นโมฆะ () {
  digitalWrite (3, สูง);
  ล่าช้า (1000);
  digitalWrite (3, ต่ำ);
  ล่าช้า (1000);
}

โดยรวมแล้ว Arduino ISP ของฉันที่บัดกรีเข้าด้วยกันอาจมีราคาประมาณสามหรือสี่เหรียญ ชิป ATtiny อาจมีราคาไม่แพงมากเช่นกัน โดยปกติจะมีราคาเพียงชิ้นละหนึ่งเหรียญเท่านั้น ฉันแนะนำให้ซื้อซ็อกเก็ต DIP-8 หากคุณวางแผนที่จะนำชิป ATtiny ไปใช้ในโครงการเพราะคุณอาจต้องการอัปเดตโค้ดบางส่วนหรือนำชิปไปใช้ใหม่ การบัดกรี IC ให้เข้าที่นั้นทำได้ แต่คุณสามารถสร้างความเสียหายให้กับ IC ได้อย่างง่ายดาย โดยเฉพาะอย่างยิ่งเมื่อเปิดรับแสงซ้ำๆ เช่นเดียวกับกรณีที่คุณอัปเดตโค้ดสองสามครั้ง

มีใครทำอะไรแบบนี้อีกไหม? คุณต้องการดูเนื้อหา Arduino เพิ่มเติมหรือไม่? แจ้งให้เราทราบในความคิดเห็นด้านล่าง

อ่านเพิ่มเติม: Raspberry Pi หรือ Arduino — บอร์ดไหนดีที่สุดสำหรับมือใหม่?