สารบัญ:

AVR/Arduino กระพริบด้วย Raspberry Pi: 3 ขั้นตอน (พร้อมรูปภาพ)
AVR/Arduino กระพริบด้วย Raspberry Pi: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: AVR/Arduino กระพริบด้วย Raspberry Pi: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: AVR/Arduino กระพริบด้วย Raspberry Pi: 3 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Raspberry Pi Pico W Tutorial: Getting Started with Arduino IDE for LED Blinking 2024, พฤศจิกายน
Anonim
AVR/Arduino กระพริบด้วย Raspberry Pi
AVR/Arduino กระพริบด้วย Raspberry Pi

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

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

สิ่งที่จำเป็น:

  • Raspberry Pi พร้อมติดตั้ง Raspbian ล่าสุด
  • ซ็อกเก็ตส่วนหัวชาย 40 พิน (หรือ 26 พินหากคุณมี Pi รุ่นเก่า)
  • สาย IDE เพื่อเชื่อมต่อกับ Pi. ของคุณ
  • เครื่องสะท้อนเสียงคริสตัล 16 MHz
  • ตัวเก็บประจุ 22 pF (2)
  • LED (1) เพื่อแสดงสถานะโปรแกรมเมอร์
  • ซ็อกเก็ต IC 8, 14 และ/หรือ 28 พิน ขึ้นอยู่กับรูปร่างของชิปที่คุณต้องการแฟลช
  • แผ่นบาง สายไฟ บัดกรี

ขั้นตอนที่ 1: สร้างสิ่งที่แนบมากับ Cobbler

สิ่งที่แนบมากับอาคาร Cobbler
สิ่งที่แนบมากับอาคาร Cobbler
สิ่งที่แนบมากับอาคาร Cobbler
สิ่งที่แนบมากับอาคาร Cobbler
สิ่งที่แนบมากับอาคาร Cobbler
สิ่งที่แนบมากับอาคาร Cobbler

Serial Peripheral Interface (SPI) หรือที่เรียกว่าอนุกรมแบบสี่สายเป็นวิธีการสื่อสารระหว่างอุปกรณ์หลักเครื่องเดียวและอุปกรณ์สเลฟตั้งแต่หนึ่งเครื่องขึ้นไป เราจะใช้สิ่งนี้เพื่อแฟลชชิปโดยที่ Pi เป็นมาสเตอร์และชิปเป็นทาส คุณจะทำการเชื่อมต่อต่อไปนี้ระหว่าง Pi และชิปของคุณ (ดูพินด้านบนสำหรับพอร์ตขยาย AVR และ Pi ต่างๆ เพื่อทราบว่าพินใดเป็นพินใด):

  • เชื่อมต่อหมุด MOSI (master-out-slave-in) เข้าด้วยกัน
  • เชื่อมต่อหมุด SCLK (นาฬิกาที่ใช้ร่วมกัน) เข้าด้วยกัน
  • เชื่อมต่อหมุด MISO (master-in-slave-out) ร่วมกับตัวต้านทาน 220 โอห์ม เพื่อป้องกัน Pi จากแรงดันไฟฟ้าสูงที่ไม่คาดคิดจากชิป
  • เชื่อมต่อ GPIO 25 บน Pi โดยตรงกับพิน RESET บนชิป Pi ดึงพินนี้ให้ต่ำเมื่อตั้งโปรแกรม ดังนั้นเราจึงใช้ตัวต้านทาน 10K เพื่อให้สูงเมื่อไม่ได้ตั้งโปรแกรม และ LED ที่มีตัวต้านทานป้องกัน 1K ทำงานที่แรงดันบวกเพื่อให้ผลตอบรับที่ดีเมื่อเขียนโปรแกรม

เราเชื่อมต่อกราวด์และพินกำลัง (3.3V) ระหว่าง Pi และชิปที่เราต้องการตั้งโปรแกรม ในกรณีที่คุณยังไม่รู้ พินของ Raspberry Pi ไม่ทนต่อ 5V - จะเสียหายหากมีมากกว่า 3.3V ปรากฏขึ้น หากชิปที่กำลังตั้งโปรแกรมต้องใช้กำลังไฟ 5V ด้วยเหตุผลบางประการ เราสามารถใช้ชิปตัวเลื่อนระดับเพื่อปกป้องพินของ Pi ได้ แต่ฉันไม่ได้พบปัญหาใดๆ ในการใช้ 3.3V ดังนั้นฉันขอแนะนำให้เล่นอย่างปลอดภัยและประหยัดส่วนประกอบ

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

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

ขั้นตอนที่ 2: การติดตั้งและใช้งาน Avrdude

การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude
การติดตั้งและใช้งาน Avrdude

หากต้องการติดตั้ง avrdude บน Pi ของคุณ เพียงพิมพ์

sudo apt-get ติดตั้ง avrdude

จากนั้นคุณจะต้องเปิดใช้งานอินเทอร์เฟซ SPI หากยังไม่ได้เปิดใช้งาน มีวิธีบรรทัดคำสั่งในการทำเช่นนี้ แต่ง่ายกว่ามากในการใช้เครื่องมือกำหนดค่า Raspberry Pi พิมพ์

sudo raspi-config

และไปที่ตัวเลือกอินเทอร์เฟซเพื่อเปิด SPI

ในการแฟลชชิปของคุณ ให้เสียบสายแพจาก Pi ของคุณเข้ากับขั้วต่อบนวงจร perfboard แล้วเสียบชิปลงในซ็อกเก็ต IC ที่เหมาะสม (ตรวจสอบให้แน่ใจว่าหันไปทางที่ถูกต้อง)

เมื่อทำการแฟลชโปรแกรม คุณต้องแน่ใจว่าได้ตั้งค่าฟิวส์ในชิปอย่างถูกต้อง นี่เป็นเพียงบิตในชิปที่คุณตั้งค่าเพื่อบอกความเร็วสัญญาณนาฬิกาว่าจะรันที่ใด ไม่ว่าจะลบ EEPROM เมื่อเขียนชิป ฯลฯ คุณสามารถอ่านข้อมูลจำเพาะ AVR แบบเต็มเพื่อหาวิธีตั้งค่าแต่ละบิตได้ แต่ การใช้เครื่องคำนวณฟิวส์ที่ engbedded.com/fusecalc นั้นง่ายกว่ามาก เลือกชื่อชิ้นส่วน AVR ที่คุณใช้และเลือกตัวเลือกที่คุณต้องการในพื้นที่ "การเลือกคุณลักษณะ" ฉันมักจะตรวจสอบให้แน่ใจว่าการตั้งค่านาฬิกาถูกต้องและปล่อยให้สิ่งอื่น ๆ เป็นค่าเริ่มต้น คุณเกือบจะต้องการปล่อยให้ "เปิดใช้งานการเขียนโปรแกรมแบบอนุกรม" ตรวจสอบและ "รีเซ็ตการปิดใช้งาน" ไม่ถูกตรวจสอบ - ไม่เช่นนั้นคุณจะไม่สามารถตั้งโปรแกรมชิปใหม่ได้ เมื่อคุณมีการตั้งค่าที่ถูกต้อง คุณสามารถเลื่อนลงไปที่พื้นที่ "การตั้งค่าปัจจุบัน" และคัดลอกอาร์กิวเมนต์ AVRDUDE ตามที่แสดงในรูปภาพ

ในการตั้งฟิวส์ ให้ป้อนคำสั่ง

sudo avrdude -c linuxspi -P /dev/spidev0.0 -p

โดยที่ชื่อส่วนตรงกับชิปที่คุณใช้ คุณสามารถค้นหารายชื่อชิ้นส่วนได้โดยป้อน sudo ardude -c linuxspi -p ?type ในการแฟลชโปรแกรมของคุณ ตรวจสอบให้แน่ใจว่าโปรแกรมนั้นอยู่ในไดเร็กทอรีปัจจุบันของคุณและป้อน

sudo avrdude -c linuxspi -P /dev/spidev0.0 -p -U แฟลช:w::i

หลังจากทั้งสองคำสั่ง ไฟ LED จะสว่างขณะกำลังแก้ไขชิป

ขั้นตอนที่ 3: นำโปรแกรม Arduino เข้าสู่ AVR

การนำโปรแกรม Arduino เข้าสู่ AVR
การนำโปรแกรม Arduino เข้าสู่ AVR
การนำโปรแกรม Arduino เข้าสู่ AVR
การนำโปรแกรม Arduino เข้าสู่ AVR
การนำโปรแกรม Arduino เข้าสู่ AVR
การนำโปรแกรม Arduino เข้าสู่ AVR

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

ขั้นแรก คุณจะต้องเพิ่มข้อมูลเกี่ยวกับชิป AVR ที่คุณจะทำการแฟลช เพื่อให้ IDE รู้วิธีคอมไพล์สำหรับชิปเหล่านั้น James Sleeman ได้รวบรวมไฟล์การติดตั้งบางไฟล์ไว้ด้วยกันอย่างมีประโยชน์มาก ซึ่งมีอยู่ใน GitHub ในการใช้งาน ให้เปิดเมนู "Preferences" ใน Arduino IDE แล้วคลิกกล่องที่อยู่ถัดจากฟิลด์ "Additional Boards Manager URLs" คัดลอกและวาง URL ต่อไปนี้ในกล่องโต้ตอบที่ปรากฏขึ้น:

จากนั้นไปที่เมนู "เครื่องมือ" และค้นหาตัวเลือก "ตัวจัดการบอร์ด…" ในเมนูย่อย "กระดาน" เลื่อนลงไปที่ด้านล่างของรายการในกล่องโต้ตอบ Boards Manager และติดตั้งบอร์ด DIY ATmega และ DIY ATtiny

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

สมมติว่าทุกอย่างเป็นไปด้วยดี ตอนนี้คุณต้องรวบรวมโปรแกรมที่คอมไพล์แล้วไปยัง Pi ของคุณ IDE ซ่อนไว้ในสถานที่ชั่วคราว เนื่องจากออกแบบมาเพื่ออัปโหลดโปรแกรมเอง บน Windows จะอยู่ใน AppData/Local/Temp ในไดเร็กทอรีผู้ใช้ของคุณในโฟลเดอร์ที่ขึ้นต้นด้วย 'arduino_build' ค้นหาไฟล์.hex นั่นคือโปรแกรมของคุณ! ส่งไปที่ Pi ของคุณผ่าน FTP หรือด้วย USB และคุณอยู่ในธุรกิจ

ในการทำเช่นนี้คุณต้องมีพีซีที่ใช้ Windows หรือ Mac เพื่อคอมไพล์โปรแกรมของคุณ จากนั้นจึงส่งไปที่ Pi การทำสิ่งนี้บน Pi เองคงจะเป็นเรื่องที่ลื่นไหลมาก แต่น่าเสียดายที่ Arduino IDE เวอร์ชันทางการที่มีอยู่ในที่เก็บ Raspbian นั้นค่อนข้างเก่าและไม่มี Board Manager หากไม่มีสิ่งนี้ การเพิ่มการตั้งค่าที่เหมาะสมเพื่อคอมไพล์สำหรับ AVR เปล่าจะยากขึ้นเล็กน้อย มีบทช่วยสอนสำหรับการรวบรวม Arduino เวอร์ชันล่าสุดบน Pi ของคุณ - ถ้านั่นคือสิ่งที่คุณต้องการทำ ไปหาพวกเขา! ฉันยังรู้สึกว่าควรให้ IDE ใช้โปรแกรมเมอร์ linuxspi เพื่อแฟลชชิปจากภายใน IDE เอง (เช่นการใช้ปุ่ม "ดาวน์โหลด") แต่นี่เกินความอดทนและระดับทักษะของฉัน - ถ้าคุณรู้ วิธีโพสต์ในความคิดเห็น! สุดท้าย คุณสามารถเขียนโปรแกรมโดยตรงใน AVR-C และคอมไพล์บน Pi ด้วย avr-gcc ทำให้คุณเป็นแพลตฟอร์มการพัฒนา AVR ที่สมบูรณ์ใน Raspberry Pi ฉันได้ทำไปแล้วเล็กน้อย และถ้าคุณต้องการไปเส้นทางนั้น ฉันขอแสดงความนับถือ รับกระพริบ!

แนะนำ: