เรามีส่วนการสนทนา Github แล้ว เมื่อปัญหาคือข้อบกพร่องในแกนกลาง อย่างแน่นอน คุณจะลดเวลาในการแก้ไขหากคุณสร้างปัญหา เนื่องจากฉันจัดลำดับความสำคัญของปัญหามากกว่าการติดตามการอภิปราย
สิ่งนี้จะแก้ไขข้อบกพร่องหลายประการที่มีอยู่ใน 2.6.x
2.6.x นำเสนอ flashfootprint ของซีเรียลที่ได้รับการปรับปรุงอย่างมีนัยสำคัญ ในขณะที่เพิ่มคุณสมบัติต่างๆ wire สามารถปลุกทาสจากโหมดสลีปได้โดยไม่ทำให้ข้อมูลเสียหาย และอื่นๆ อีกมากมาย โปรดดูบันทึกการเปลี่ยนแปลง
ควรใช้ Arduino IDE เวอร์ชันที่ดาวน์โหลดจาก arduino.cc เท่านั้น ห้ามใช้จากตัวจัดการแพ็คเกจ linux ตัวจัดการแพ็คเกจมักจะมี Arduino IDE แต่ได้ แก้ไขมันแล้ว แม้ว่าพวกเขาจะไม่รู้อะไรเลยเกี่ยวกับ Arduino หรือการพัฒนาแบบฝังตัวโดยทั่วไป แต่ก็น้อยกว่าสิ่งที่พวกเขาจำเป็นต้องรู้เพื่อแก้ไขให้สำเร็จ เวอร์ชันเหล่านั้นมีชื่อเสียงในเรื่องปัญหาที่ละเอียดอ่อน แต่ร้ายแรงที่เกิดจากการปรับเปลี่ยนที่ไม่ฉลาดเหล่านี้ ไม่ควรคาดหวังให้คอร์นี้ทำงานกับเวอร์ชันดังกล่าว และจะไม่มีการแก้ไขใดๆ เพื่อประโยชน์ในการแก้ไขเวอร์ชันของ IDE ที่มาจากตัวจัดการแพ็คเกจด้วยเหตุผลนี้
นี่เป็นจุดบกพร่องในไคลเอนต์ Arduino
IDE เวอร์ชันระหว่าง 1.8.13 ถึง 2.x พัฒนาข้อบกพร่องใหม่ที่สำคัญ อย่างไรก็ตาม IDE เวอร์ชัน 1.8.2 และเก่ากว่า มีข้อบกพร่องที่ไม่ได้รับการแก้ไขที่ทำให้หมดอำนาจ ฉันเชื่อว่าในที่สุดพวกเขาก็มี IDE เวอร์ชันที่ใช้งานได้แล้ว และฉันเชื่อว่าเวอร์ชันล่าสุดสามารถติดตั้งคอร์ของฉันได้อย่างถูกต้อง
ก่อน megaTinyCore 2.6.0 การติดตั้ง megaTinyCore ด้วยตนเองจะทำให้ V1.8.14 ของ IDE หยุดทำงานเนื่องจากข้อบกพร่องนี้เมื่อคุณติดตั้งแกนด้วยตนเองในโฟลเดอร์ arduino ของคุณ ผู้ใช้ 1.8.14 และใหม่กว่าต้องใช้ megaTinyCore เวอร์ชัน 2.6.0
ฉันซื้ออุปกรณ์อิเล็กทรอนิกส์มากมายจาก AliExpress เป็นตลาดที่ยอดเยี่ยมสำหรับสิ่งต่าง ๆ ที่ผลิตโดยบริษัทจีนและส่วนใหญ่เป็นสินค้าทั่วไป รวมถึงส่วนประกอบมากมายที่ไม่มีให้กับบุคคลในโลกตะวันตกด้วยวิธีอื่นใด (เช่น การสั่งซื้อขั้นต่ำคือม้วนหรืออะไรทำนองนั้น - หากคุณสามารถหา ผู้จำหน่ายส่วนประกอบที่ทำงานร่วมกับผู้ผลิตชิปจีนที่ไม่มีชื่อ) มันไม่ใช่สถานที่ที่ดีสำหรับกลุ่มผลิตภัณฑ์เซมิคอนดักเตอร์ล่าสุดจากผู้ผลิตรายใหญ่ของตะวันตก โดยเฉพาะอย่างยิ่งท่ามกลางการขาดแคลนชิปดังกล่าวในอดีต เมื่ออุปกรณ์ AVR สมัยใหม่มีจำหน่ายผ่านช่องทางเหล่านั้น มักจะถูกรายงานว่าเป็นของปลอมหรือชำรุด (เช่น ATtiny412 ที่คิดว่าเป็นรุ่น 416 และอาจดำเนินการเปิดเครื่องไม่ถูกต้องเมื่อรีเซ็ต) สำหรับเรื่องนั้น คุณอาจไม่ต้องการซื้อไมโครคอนโทรลเลอร์ AVR ใด ๆ ใน AliExpress ... บอร์ดที่ประกอบขึ้นเช่น Arduino Nano clones โดยทั่วไปแล้วจะใช้งานได้หากคุณหลีกเลี่ยงอันที่ใช้ชิป LGT8 ของบุคคลที่สามและระวังอันที่มี ATmega168p แทนที่จะเป็น '328p - แต่มีรายงานจำนวนมากเกี่ยวกับไมโครคอนโทรลเลอร์ปลอมเมื่อขายเป็นชิปเปลือย (ฉันเคยได้ยินเกี่ยวกับ ATtiny85 ปลอมที่ถูกตั้งข้อสังเกตจริง ๆ ATtiny13s ไม่ใช่แค่ AVR สมัยใหม่เท่านั้นที่ปลอมแปลง) มีทฤษฎีที่น่าสนใจมากมายเกี่ยวกับที่มาของชิปปลอม และ Microchip ก็ยังคงนิ่งเฉยต่อปัญหานี้
เอกสารนี้เหมาะสำหรับการดูทางออนไลน์ (แทนที่จะเปิดไฟล์มาร์กดาวน์ในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ) เพื่อให้สามารถคลิกลิงก์ได้และมีการแสดงรูปภาพในบรรทัด และอาจที่สำคัญที่สุดคือเพื่อให้ตารางแสดงผลได้อย่างถูกต้องในบางครั้ง ขอย้ำอีกครั้งว่า [ดูเอกสารนี้ได้บน github](https://github.com/SpenceKonde/megaTinyCore](https://github.com/SpenceKonde/megaTinyCore)
เวอร์ชันเก่าไม่สามารถจัดการโปรแกรมเมอร์ได้อย่างถูกต้องในเครื่องมือ -> เมนูโปรแกรมเมอร์ ซึ่งจะทำให้ UX ลดลงอย่างรวดเร็วเมื่อจำนวนคอร์ที่ติดตั้งเพิ่มขึ้น พวกเขาไม่เหมาะ เวอร์ชันใหม่ล่าสุดที่เริ่มต้นด้วย 1.8.14 (รวมถึง 1.8.17, 1.8.18 และ 1.8.19) อาจสร้างข้อผิดพลาด "ตื่นตระหนก: ไม่พบเวอร์ชันหลัก" เนื่องจากไม่สามารถแยกวิเคราะห์ Platform.txt ได้อย่างถูกต้อง ตั้งแต่ 2.6.0 เราได้ทำการแก้ไข Platform.txt ด้วยตนเองโดยตรงก่อนที่จะเผยแพร่ ดังนั้นจึงไม่มีปัญหาน้อยลง
เมื่อติดตั้ง megaTinyCore ผ่านตัวจัดการบอร์ดแล้ว Toolchain เวอร์ชันที่ต้องการจะถูกติดตั้งโดยอัตโนมัติ รองรับชิ้นส่วน 0/1/2-Series ทั้งหมดโดยไม่มีขั้นตอนเพิ่มเติม จนถึงเวอร์ชัน 2.2.7 เราใช้ avr-gcc เวอร์ชัน Arduino7 (gcc 7.3.0 และ avrlibc 3.6.1) กับ ATpacks ล่าสุด ณ เดือนมิถุนายน 2020 เริ่มต้นด้วย 2.2.7 เราเริ่มใช้ build ของ Azduino ของ toolchain ซึ่ง ได้อัปเดต ATpacks สำหรับชิ้นส่วนที่รองรับใหม่ทั้งหมด 2.2.7 ใช้ Azduino3, 2.3.0+ ใช้ Azduino4 และเริ่มต้นด้วย 2.6.0 เราใช้ Azduino5 (ถึงแม้มันไม่มีประโยชน์อะไรสำหรับเราเลย นอกเหนือจากการประหยัดพื้นที่ HDD หนึ่งในสี่ GB และแบนด์วิดท์การดาวน์โหลด 40mb หากคุณติดตั้งทั้งสองอย่าง megaTinyCore และ DxCore ผ่านผู้จัดการบอร์ด
การติดตั้งด้วยตนเองนั้นซับซ้อนกว่า - โดยเฉพาะหากคุณต้องการการสนับสนุนสำหรับ 2-Series ดูคู่มือการติดตั้งสำหรับข้อมูลเพิ่มเติม
แกน Arduino สำหรับ TinyAVR 0-Series, 1-Series และปัจจุบันคือ 2-Series ชิ้นส่วนเหล่านี้มีสถาปัตยกรรมที่ได้รับการปรับปรุงให้ดีขึ้นเมื่อเทียบกับชิ้นส่วน TinyAVR "คลาสสิก" (ซึ่งได้รับการสนับสนุนโดย ATTinyCore) พร้อมด้วยอุปกรณ์ต่อพ่วงที่ได้รับการปรับปรุง และเวลาดำเนินการที่ดีขึ้นสำหรับคำสั่งบางอย่าง (ซึ่งมีความคล้ายคลึงกันทั้งในเรื่องที่เกี่ยวกับ AVR Dx-Series ขั้นสูง รวมถึง ชิป megaAVR 0-Series เช่น ATmega4809 ซึ่งใช้กับ Nano Every และ Uno Wifi Rev. 2 อย่างเป็นทางการ - แม้ว่าทีมงาน Arduino จะพยายามอย่างดีที่สุดที่จะจับพวกมันไว้) ในแพ็คเกจขนาดเล็กราคาประหยัดทั่วไป ของเส้น ATtiny ชิ้นส่วนทั้งหมดเหล่านี้มีฮาร์ดแวร์ UART อย่างน้อยหนึ่งตัว และอินเทอร์เฟซ SPI และ TWI (ไม่มีขยะ USI ใดที่เหมือนกับ ATtiny85 เช่น ATtiny85) ระบบเหตุการณ์ที่ทรงพลัง ตรรกะแบบกำหนดเองที่กำหนดค่าได้ ตัวเปรียบเทียบอะนาล็อกบนชิปอย่างน้อยหนึ่งตัว ออสซิลเลเตอร์ภายในที่แม่นยำจนน่าประหลาดใจ และในกรณีของซีรีส์ 1 คือช่องสัญญาณเอาท์พุต DAC จริง และในกรณีของซีรีส์ 2 คือ ADC ดิฟเฟอเรนเชียลแฟนซี
ยิ่งไปกว่านั้น ชิ้นส่วน TinyAVR 0/1/2-Series มี ราคาถูก - ชิ้นส่วนปลายสูงสุดคือ 3226 และ 3227 พร้อมแฟลช 32k และ SRAM 3k (เทียบกับ 2k SRAM เหมือนกับ ATmega328p ที่ใช้ใน Uno/Nano/ProMini) ปริมาณเพียง 1 ดอลลาร์สหรัฐ - น้อยกว่าชิ้นส่วน AVR ATtiny แบบคลาสสิก 8,000 ชิ้น ("ชุดคำสั่ง AVR ในราคา PIC") ชิ้นส่วนทั้งหมดเหล่านี้ได้รับการจัดอันดับให้ทำงานที่ 16 MHz หรือ 20 MHz (ที่ 4.5-5.5v) โดยไม่ต้องใช้คริสตัลภายนอก และออสซิลเลเตอร์ภายในมีความแม่นยำเพียงพอสำหรับการสื่อสาร UART
สิ่งเหล่านี้ใช้การเขียนโปรแกรม UPDI ไม่ใช่ ISP แบบดั้งเดิมเหมือนกับที่ ATtiny แบบคลาสสิกทำ ดูด้านล่างสำหรับข้อมูลเพิ่มเติม การซื้อโปรแกรมเมอร์ UPDI นั้นง่ายมาก คุณสามารถใช้ Arduino ที่ใช้ 328p แบบคลาสสิกเป็นโปรแกรมเมอร์โดยใช้ jtag2updi หรือเพื่อให้ได้ผลลัพธ์ที่ดีกว่าด้วยฮาร์ดแวร์ราคาถูก คุณสามารถใช้ อะแดปเตอร์อนุกรม USB และตัวต้านทาน (และควรเป็นไดโอด) โดยใช้ SerialUPDI ที่ให้มาด้วย หรือคุณสามารถใช้ AVRdude กับหนึ่งในโปรแกรมเมอร์ Microchip (โปรแกรมเมอร์ที่ใช้ mEDBG/nEDBG/EDBG บนบอร์ดพัฒนา Atmel-ICE หรือ SNAP) หรือเครื่องมือการเขียนโปรแกรม UPDI ใด ๆ ที่เลียนแบบหนึ่งในนั้น (ซึ่งตามความรู้ของฉัน เครื่องมือทั้งหมดทำ - หากมีเครื่องมือที่ avrdude รองรับและแกนหลักของฉันไม่รองรับ โปรดเปิดปัญหาเพื่อแจ้งให้เราทราบ!)
Serial bootloader Optiboot_x (ใช้โค้ดเบสเดียวกันกับ Arduino Uno bootloader แบบคลาสสิก แม้ว่าจะมีการเปลี่ยนแปลงอย่างมาก) ได้รับการสนับสนุนในส่วนเหล่านี้ (ขณะนี้มีการรองรับ 0/1-Series อยู่ ส่วน 2-Series คาดว่าจะภายในสัปดาห์แรกของเดือนพฤษภาคม ; การปรับเปลี่ยนชิ้นส่วนใหม่เป็นเรื่องเล็กน้อย) ทำให้สามารถตั้งโปรแกรมผ่านพอร์ตอนุกรมแบบเดิมได้ ดูส่วน Optiboot ด้านล่างสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้และตัวเลือกที่เกี่ยวข้อง การติดตั้ง bootloader จำเป็นต้องมีโปรแกรมเมอร์ UPDI บอร์ดแยกส่วนที่ฉันขายบน Tindie เป็นแบบประกอบพร้อมจำหน่ายแบบบูตโหลดล่วงหน้า (เป็นแบบโหลดบูตตามความต้องการ) ที่ถูกกล่าวว่า ประสบการณ์ผู้ใช้กับ Optiboot นั้นน่าผิดหวังเล็กน้อยกับชิ้นส่วน 0/1-Series เช่นเดียวกับชิ้นส่วน 14-pin 2-Series เนื่องจากไม่มีพินรีเซ็ตฮาร์ดแวร์ที่สามารถใช้กับวงจรรีเซ็ตอัตโนมัติตามปกติ เพื่อรีเซ็ตเป็น bootloader โดยอัตโนมัติเมื่อเปิดพอร์ตอนุกรม คุณต้องปิดใช้งานการเขียนโปรแกรม UPDI ทั้งหมด (ต้องใช้โปรแกรมเมอร์ HV หากจำเป็นต้องเปลี่ยนการตั้งค่าฟิวส์หรือโปรแกรมโหลดบูตหลังจากการบูตครั้งแรก) หรือปล่อยให้เปิดใช้งาน UPDI ไว้ แต่เริ่มการอัปโหลดใดๆ ภายใน 8 วินาทีหลังจากใช้พลังงาน ชิ้นส่วนซีรีส์ 2 แบบ 20 พินและ 24 พินรองรับ "พินรีเซ็ตสำรอง" ซึ่งช่วยให้ทำหน้าที่เหมือน Arduino แบบดั้งเดิมได้มากขึ้น
อินเทอร์เฟซการเขียนโปรแกรม UPDI เป็นอินเทอร์เฟซแบบสายเดี่ยวสำหรับการเขียนโปรแกรม (และการดีบัก - การเขียนโปรแกรม U สากล P และ D ebugging I อินเทอร์เฟซ) ซึ่งใช้กับ TinyAVR 0/1/2-Series รวมถึงไมโครคอนโทรลเลอร์ AVR สมัยใหม่อื่นๆ ทั้งหมด . แม้ว่าเราจะสามารถซื้อโปรแกรมเมอร์ UPDI ที่จัดทำขึ้นตามวัตถุประสงค์เฉพาะจาก Microchip ได้เสมอ แต่ไม่แนะนำเมื่อคุณจะใช้ Arduino IDE แทนที่จะเป็น IDE ของ Microchip (ซับซ้อนมาก) มีรายงานปัญหาบน Linux อย่างกว้างขวางสำหรับโปรแกรมเมอร์อย่างเป็นทางการของ Microchip มีสองทางเลือกที่มีต้นทุนต่ำมากในการสร้างโปรแกรมเมอร์ UPDI ซึ่งทั้งสองวิธีนี้ชุมชน Arduino มีประสบการณ์มากกว่าโปรแกรมเมอร์อย่างเป็นทางการเหล่านั้น
ก่อนที่จะมี megaTinyCore นั้นมีเครื่องมือที่เรียกว่า pyupdi ซึ่งเป็นโปรแกรม Python อย่างง่ายสำหรับการอัปโหลดไปยังไมโครคอนโทรลเลอร์ที่ติดตั้ง UPDI โดยใช้อะแดปเตอร์อนุกรมที่แก้ไขโดยการเพิ่มตัวต้านทานตัวเดียว แต่ pyupdi ไม่สามารถใช้งานได้ทันทีจาก Arduino IDE ดังนั้นนี่ไม่ใช่ตัวเลือก ตั้งแต่เวอร์ชัน 2.2.0 นั้น megaTinyCore ได้นำการใช้งาน Python แบบพกพามาใช้ ซึ่งเปิดประตูได้มากมาย เดิมทีเราวางแผนที่จะปรับใช้ pyupdi แต่ตามคำแนะนำของผู้เขียนและพนักงาน Microchip หลายคน เราได้ใช้ฟังก์ชันนี้บน pymcuprog ซึ่งเป็นเครื่องมือที่ "แข็งแกร่งกว่า" ที่พัฒนาและ "บำรุงรักษาโดย Microchip" แทน ซึ่งรวมถึงการอัปโหลดพอร์ตอนุกรมเดียวกัน โดยไม่มีการปรับปรุงประสิทธิภาพเท่านั้น หากติดตั้งด้วยตนเอง คุณต้องเพิ่มแพ็คเกจ Python ที่เหมาะสมกับระบบปฏิบัติการของคุณเพื่อที่จะใช้วิธีการอัพโหลดนี้ (การติดตั้ง Python ของระบบนั้นไม่เพียงพอ และไม่จำเป็น)
อ่าน เอกสารประกอบ SerialUPDI สำหรับข้อมูลเกี่ยวกับการเดินสาย
ในเวอร์ชัน 2.3.2 ด้วยการปรับปรุงประสิทธิภาพอย่างมาก และความน่าเชื่อถือที่ได้รับการพิสูจน์แล้วของโครงร่างการเดินสายไฟโดยใช้ไดโอดแทนตัวต้านทาน และเนื่องจากความไม่แน่นอนของเฟิร์มแวร์ jtag2updi ตอนนี้จึงเป็นวิธีการเขียนโปรแกรมที่แนะนำ ในเวอร์ชันนี้ ความเร็วในการเขียนโปรแกรมเพิ่มขึ้นมากถึง 20 เท่า และตอนนี้ก็เกินกว่าที่เป็นไปได้ด้วย jtag2updi มาก (การเขียนโปรแกรมผ่าน jtag2updi นั้นเทียบได้กับความเร็วโดยประมาณกับการเขียนโปรแกรมผ่าน SerialUPDI บนตัวเลือกความเร็ว "ช้า" 57600 baud; โปรแกรมเวอร์ชัน baud ปกติ 230400 เร็วกว่าเวอร์ชัน SLOW หรือ jtag2updi ประมาณสามเท่าในขณะที่ตัวเลือก "TURBO" (ทำงานที่ 460800 บอดและเพิ่มความเร็วในการอัพโหลดประมาณ 50% จากความเร็วปกติ ควรใช้เวอร์ชันความเร็ว TURBO กับอุปกรณ์ที่ทำงานที่ 4.5v ขึ้นไปเท่านั้น เนื่องจากเราต้องรันนาฬิกา UPDI ให้เร็วขึ้นเพื่อให้ทัน (ก็ไม่คาดหวังเช่นกัน เพื่อให้เข้ากันได้กับอะแดปเตอร์ซีเรียลทั้งหมด - นี่เป็นการแลกเปลี่ยนโดยเจตนาเพื่อประสิทธิภาพที่ดีขึ้น) แต่ช่วยให้สามารถอัปโหลดและตรวจสอบร่างขนาด 32kB ได้ใน 4 วินาที
การออกแบบสามแบบกำลังถูกทำซ้ำ: อะแดปเตอร์อนุกรมสองพอร์ตที่ทั้งสองพอร์ตเป็นพอร์ตอนุกรม อะแดปเตอร์อนุกรมสองพอร์ตที่มีพอร์ตหนึ่งพอร์ตอยู่เสมอ UPDI และพอร์ตเดียวมีสวิตช์เพื่อเลือกโหมด และบอร์ดเสริมเสริมเพื่อให้ ไฟ LED แสดงสถานะของสายควบคุมโมเด็ม
สิ่งเหล่านี้จะอนุญาตให้ใช้ตัวเชื่อมต่อ SMT JST-XH หรือตัวเชื่อมต่อดูปองท์ - ไม่ว่าจะด้วยวิธีใดกับ 6 พินสำหรับอนุกรม (พิน FTDI ตามที่ทำเครื่องหมายไว้) และ 3 พิน (สำหรับ UPDI)
ทั้งสามสิ่งนี้จะสามารถจ่ายไฟ 3.3 หรือ Vusb (ชื่อ 5V) หรือตัดการเชื่อมต่อทั้ง Vusb และ 3V3 จากพลังงาน และคาดว่าอุปกรณ์เป้าหมายจะจ่ายไฟด้วย 5.5V > Vdd > 1.8V ระดับลอจิกที่ใช้ในกรณีนี้คือแรงดันไฟฟ้าของสิ่งใดก็ตามที่ใช้ ได้รับการเตือนว่าในอุปกรณ์แบบอนุกรมคู่ รางจ่ายไฟ VccIO จะถูกแชร์! อุปกรณ์ทั้งสองจะต้องทำงานที่แรงดันไฟฟ้าเดียวกัน เป็นอุปกรณ์เดียวกัน หรือต้องตั้งค่าอะแดปเตอร์ให้จ่ายไฟและตัดการเชื่อมต่อพลังงาน
ขึ้นอยู่กับรุ่นของอะแดปเตอร์และระบบปฏิบัติการ พบว่าจำเป็นต้องมีการตั้งค่าเวลาที่แตกต่างกัน อย่างไรก็ตามการตั้งค่าที่จำเป็นเพื่อป้องกันไม่ให้เกิดข้อผิดพลาด 230400 บอดบน Linux/Mac ด้วยอะแดปเตอร์ส่วนใหญ่จะมีการลงโทษเวลาที่ใหญ่กว่ามากบน Windows ซึ่งการจัดการแบบอนุกรมของระบบปฏิบัติการช้าพอที่จะไม่ต้องการความล่าช้าใด ๆ ...
"ความล่าช้าในการเขียน" ที่กล่าวถึงในที่นี้คือการอนุญาตให้คำสั่งลบ-เขียนหน้าดำเนินการเสร็จสิ้น ใช้เวลาไม่เป็นศูนย์ ขึ้นอยู่กับอะแดปเตอร์ เวลาแฝงของ USB และบัฟเฟอร์โดยนัย 2 หรือ 3 ไบต์ (มันเหมือนกับ USART และอาจนำไปใช้เป็นหนึ่งภายใน ไบต์ที่สามที่มาถึงไม่มีที่ไปเนื่องจากบัฟเฟอร์ฮาร์ดแวร์มีความลึกเพียง 2 ไบต์) อาจเป็นได้ เพียงพอที่จะทำให้มันทำงานได้โดยไม่เกิดความล่าช้าอย่างชัดเจน หรืออาจล้มเหลวในระหว่างดำเนินการและรายงาน "ข้อผิดพลาดกับ st" ยิ่งการหมดเวลาแฝงของอแด็ปเตอร์เร็วขึ้นและการจัดการแบบอนุกรมของระบบปฏิบัติการเร็วขึ้นเท่าใด โอกาสที่ปัญหานี้ก็จะยิ่งมีมากขึ้นเท่านั้น สิ่งนี้ถูกควบคุมโดยพารามิเตอร์บรรทัดคำสั่ง -wd
หากดำเนินการ prog.py ด้วยตนเอง ในเวอร์ชัน 2.5.6 ความล่าช้าในการเขียนนี้ใกล้เคียงกับเวลาจริงที่ร้องขอมากขึ้น (เป็น ms) ก่อนหน้านี้จะมีความละเอียดหลาย ms เมื่อ 1 คือทั้งหมดที่คุณต้องการ และผลที่ตามมาคือการลงโทษที่ถูกกำหนดไว้นั้น รุนแรง โดยเฉพาะอย่างยิ่งใน หน้าต่าง
คู่มือการเลือก:
บอด 460800+ ต้องการให้เป้าหมายทำงานที่ 4.5V+ เพื่อให้คงอยู่ในข้อมูลจำเพาะ (ในทางปฏิบัติ อาจไม่จำเป็นต้องสูงขนาดนั้น - แต่จะต้องมีแรงดันไฟฟ้าสูงพอที่จะเสถียรที่ 16 MHz เราตั้งค่า นาฬิกาอินเทอร์เฟซสูงสุดสำหรับทุกความเร็วที่สูงกว่า 230400 บอด - ในขณะที่อะแดปเตอร์บางตัวบางครั้งทำงานที่ 460800 โดยไม่มีขั้นตอนนี้ (ซึ่งในตัวมันเองนั้นแปลก - 460800 บอดคือ 460800 บอดใช่ไหม) ส่วนใหญ่ทำไม่ได้และ SerialUPDI ไม่มีวิธีในการพิจารณาว่าอะแดปเตอร์คืออะไร
อะแดปเตอร์ที่ใช้ CH340 มีความหน่วงสูงเพียงพอบนแพลตฟอร์มส่วนใหญ่ และแทบทุกครั้งจะทำงานที่ความเร็วใดก็ได้โดยไม่ต้องอาศัยความล่าช้าในการเขียน ตัวเลือกทั้งหมดทำงานได้โดยไม่เกิดความล่าช้าในการเขียน
อะแดปเตอร์เกือบทั้งหมดทำงานบน Windows ที่ 230.4k โดยไม่เกิดความล่าช้าในการเขียน ซึ่งพบไม่บ่อยนัก รวมถึงไมโครคอนโทรลเลอร์ USB บางตัวที่ตั้งโปรแกรมให้ทำหน้าที่เป็นอะแดปเตอร์ซีเรียล (เช่น SAMD11C)
แทบไม่มีอะไรเลยยกเว้นอะแดปเตอร์ที่ใช้ CH340 จะทำงานที่ 460.8k ขึ้นไปโดยไม่มีความล่าช้าในการเขียน โดยไม่คำนึงถึงแพลตฟอร์ม
บน Windows อะแดปเตอร์หลายตัว (แม้แต่ตัวที่ควรรองรับจริงๆ) จะเปลี่ยนไปใช้ 921600 baud ไม่สำเร็จ ฉันไม่รู้ว่าทำไม อาการคือการหยุดชั่วคราวในช่วงเริ่มต้นไม่กี่วินาทีขณะพยายาม ตามด้วยการอัปโหลดที่ 115200 บอด สิ่งเดียวที่ฉันประสบความสำเร็จจนถึงตอนนี้คือ CH340 ซึ่งผิดปกติพอสมควร
460800 baud บน Windows ที่มีความล่าช้าในการเขียนมักจะช้ากว่า 230400 baud หากไม่มี สิ่งเดียวกันนี้ไม่เป็นความจริงบน Linux/Mac และยิ่งขนาดเพจเล็กลง ประสิทธิภาพที่ได้รับผลกระทบจากความล่าช้าในการเขียนก็จะยิ่งมากขึ้นเท่านั้น
ควรใช้ 57600 baud หากตัวเลือกอื่นไม่ทำงานหรือเมื่อตั้งโปรแกรมที่ Vcc = < 2.7V
460800 บอดทำงานโดยไม่มีความล่าช้าในการเขียนบนอะแดปเตอร์บางตัวโดยมีตัวต้านทาน 10k วางอยู่บนไดโอด Schottky ระหว่าง TX และ RX เมื่อมันจะไม่ทำงานหากไม่มีการเปิดใช้งานการหน่วงเวลาการเขียน ไม่ ฉันไม่เข้าใจว่ามันจะเป็นแบบนี้ได้ยังไง!
ดังที่คุณเห็นจากข้างต้น ข้อมูลนี้เป็นข้อมูลเชิงประจักษ์เป็นส่วนใหญ่ ยังไม่รู้ว่าจะทำนายพฤติกรรมอย่างไร
อะแดปเตอร์ FTDI (FT232, FT2232 และ FT4232 ฯลฯ) รวมถึงอะแดปเตอร์ปลอมที่มีจำหน่ายบน eBay/AliExpress ในราคาประมาณ 2 ดอลลาร์ บน Windows โดยค่าเริ่มต้นจะมีระยะเวลาแฝงที่ยาวนานอย่างเลือดตาแทบกระเด็นที่ 16ms แม้ว่าเราจะใช้ความพยายามมากเพียงใดเพื่อจำกัดจำนวนช่วงหน่วงเวลาแฝงที่เราต้องรอ แต่การดำเนินการนี้จะยืดเวลาการอัปโหลด 2.2 วินาทีออกไปเป็นมากกว่า 15 วินาที คุณต้องเปลี่ยนแปลงสิ่งนี้เพื่อให้ได้ความเร็วในการอัพโหลดที่ยอมรับได้:
เปิดแผงควบคุม ตัวจัดการอุปกรณ์
ขยายพอร์ต (COM และ LPT)
คลิกขวาที่พอร์ตแล้วเลือกคุณสมบัติ
คลิกแท็บการตั้งค่าพอร์ต
คลิก "ขั้นสูง..." เพื่อเปิดหน้าต่างการตั้งค่าขั้นสูง
ใต้ส่วน "ตัวเลือก BM" ให้ค้นหาเมนู "ตัวจับเวลาแฝง" ซึ่งน่าจะตั้งค่าเป็น 16 เปลี่ยนเป็น 1
คลิก ตกลง เพื่อออกจากหน้าต่างตัวเลือกขั้นสูง และอีกครั้งเพื่อออกจากคุณสมบัติ คุณจะเห็นตัวจัดการอุปกรณ์รีเฟรชรายการฮาร์ดแวร์
การอัปโหลดควรจะเร็วขึ้นมากในขณะนี้
สามารถสร้างขึ้นจาก AVR Uno/Nano/Pro Mini แบบคลาสสิก; โคลนนาโนราคาไม่แพงเป็นตัวเลือกตามปกติ โดยมีราคาถูกพอที่จะต่อสายแล้วปล่อยทิ้งไว้เช่นนั้น เราไม่จัดเตรียมเอกสารโดยละเอียดสำหรับกระบวนการนี้อีกต่อไป jtag2updi เลิกใช้แล้ว หากคุณยังคงใช้งานอยู่ คุณควรเลือก jtag2updi จากเครื่องมือ -> เมนูโปรแกรมเมอร์ ก่อนหน้านี้นี่คือตัวเลือกที่เราแนะนำ เนื่องจากข้อบกพร่องของ jtag2updi ที่เกิดขึ้นอย่างต่อเนื่อง และการพึ่งพาเครื่องมือ 'avrdude' ที่ไม่ได้รับการบำรุงรักษาเป็นส่วนใหญ่ (ซึ่งเหนือสิ่งอื่นใดแทรกข้อความแสดงข้อผิดพลาดปลอมลงในการอัปโหลด UPDI ทั้งหมดที่ทำด้วยเครื่องมือดังกล่าว) จึงไม่แนะนำสิ่งนี้อีกต่อไป
เห็นได้ชัดว่า Arduino ไม่ได้บรรจุ avrdude เวอร์ชัน 32 บิตล่าสุด ฉันกำหนดคำจำกัดความของเครื่องมือใหม่ซึ่งเป็นสำเนาของ arduino18 (ล่าสุด) ยกเว้นว่าจะดึงเวอร์ชัน 17 แทนบน Linux แบบ 32 บิตเนื่องจากเป็นสิ่งที่ดีที่สุดสำหรับแพลตฟอร์มนั้น เวอร์ชัน arduino17 ไม่รองรับการอัปโหลดอย่างถูกต้องด้วยเครื่องมือการเขียนโปรแกรมของ Microchip บางตัว
ปัจจุบันใช้เฉพาะกับรุ่นล่าสุดเท่านั้น และควรแก้ไข avrdude ที่ไม่พร้อมใช้งานสำหรับข้อผิดพลาดของแพลตฟอร์มนี้
TinyAVR 2-ซีรีส์
ATtiny3227,1627,827,427
ATtiny3226,1626,826,426
ATtiny3224,1624,824,424
TinyAVR ซีรีส์ 1
ATtiny3217,1617,817,417
ATtiny3216,1616,816,416
เอทีนี่1614,814,414,214
เอทีนี่412,212
TinyAVR 0-ซีรีส์
เอทีนี่1607,807
เอทีนี่1606,806,406
เอทีนี่1604,804,404,204
เอทีนี่402,202
อะไรก็ตามที่ชื่อเช่น "AVR##XX##" โดยที่ X คือตัวอักษรและ # คือตัวเลข - คุณต้องการ DxCore ของฉันสำหรับสิ่งเหล่านั้น
ชิ้นส่วน TinyAVR แบบคลาสสิก (ก่อนปี 2559) ทั้งหมด - เกือบทั้งหมดได้รับการสนับสนุนโดยหนึ่งในคอร์อื่น ๆ ของฉัน ATTinyCore
ATtiny 25/45/85, 24/44/84, 261/461/861, 48/88, สองอันเล็กและอัน (แปลก 43 และ 4313/2313) และใน 2.0.0, 26 รวมถึงอันสุดท้าย -four (ซึ่งแสดงคำแนะนำของการทดลองในทิศทางของ AVR สมัยใหม่), ATtiny 441/841, 1634 และ 828 บวกกับคนแปลกหน้า 26
สิ่งอื่นใด ดูเอกสารนี้เพื่อดูรายชื่อตระกูลชิ้นส่วน AVR และแกน Arduino ใดบ้างที่พวกเขาใช้งานได้ - เกือบทุกอย่างมีแกนที่ให้การสนับสนุน โดยปกติแล้วจะเป็นด้วยตัวเองหรือ MCUdude
ดูเอกสารนี้ครอบคลุม AVR สมัยใหม่ทั้งหมด
คุณสมบัติ | 0-ซีรีส์ | 1-ซีรีส์ | 1+ซีรีส์ | 2 ซีรีส์ |
---|---|---|---|---|
แฟลช | 2,000-16,000 | 2,000-8,000 | 16k/32k | 4k-32k |
นับพิน | 8-24 | 8-24 | 14-24 | 14-24 |
สแรม | 128b-1k | 128b-512b | 2k | 512b-3k |
ทีซีดี | เลขที่ | ใช่ | ใช่ | เลขที่ |
ทีซีบี | 1 | 1 | 2 | 2 |
เอดีซี | 1x10บิต | 1x10 บิต | 2x10 บิต | 1x12 บิต พร้อม PGA |
พิน VREF | เลขที่ | เลขที่ | ใช่ | ใช่ |
เครื่องปรับอากาศ | 1 | 1 | 3 | 1 |
เหตุการณ์ * | 3 ช | 6 จัน | 6 จัน | 6 จัน |
ซีซีแอล ** | 2 ลต | 2 ลต | 2 ลต | 4 ลต |
*
ช่องทางเหตุการณ์ ยกเว้น TinyAVR 2 ซีรีส์ (และ AVR สมัยใหม่ที่ไม่ใช่ขนาดเล็กทั้งหมด) แบ่งออกเป็นสองประเภท - ซิงโครนัส (ตามนาฬิกาของระบบ) และอะซิงโครนัส ตัวสร้างบางตัวไม่สามารถใช้กับช่องสัญญาณซิงโครนัสได้ และผู้ใช้เหตุการณ์บางรายสามารถใช้ได้เฉพาะช่องสัญญาณซิงโครนัสเท่านั้น และรายการช่องมีความสอดคล้องน้อยลงและมากขึ้น ความบ้าคลั่งนี้ถูกละทิ้งไปในโอกาสแรก แม้แต่ mega0 ก็ยังกำจัดความแตกต่างนั้นออกไป
**
มีเพียง 2 ซีรีส์และชิ้นส่วนที่ไม่เล็กเท่านั้นที่สามารถส่งสัญญาณการขัดจังหวะโดยขึ้นอยู่กับสถานะ CCL
ทุกส่วนมีอินพุตแบบอะนาล็อกบนพินส่วนใหญ่ (พินทั้งหมดบน PORTA และ PORTB 0-1 และ 4-5) ADC ตัวที่สองใน 1-series+ สามารถใช้พินบน PORTC เป็นอินพุตได้เช่นกัน (ดูข้อมูลอ้างอิงแบบอะนาล็อกสำหรับข้อมูลเกี่ยวกับการใช้งานเหล่านี้)
นี่คือตัวเลือกงบประมาณ แม้ว่าจะได้รับการสนับสนุน แต่ก็ไม่แนะนำ สิ่งเหล่านี้ไม่เคยได้รับการ "เพิ่ม" อย่างที่ TinyAVR ซีรีส์ 1 ได้รับที่ 16k ไม่มี TCB ที่สองในการกำหนดค่าใดๆ ไม่มี TCD มีเพียง 3 ช่องเหตุการณ์เท่านั้น ไม่มีช่องใดที่สามารถส่งเอาต์พุตเหตุการณ์ RTC ได้ ชิ้นส่วนเหล่านี้มี CCL LUT 2 ตัวเหมือนกับซีรีส์ 1 และมีให้เลือกใช้กับแฟลชสูงสุด 16k ในการกำหนดค่า 14, 20 และ 24 พิน (เฉพาะ 4k สำหรับชิ้นส่วน 8 พิน) และ SRAM สูงสุด 1k
สิ่งเหล่านี้มีแฟลช 2k, 4k หรือ 8k และ RAM 128, 256 หรือ 512b เช่นเดียวกับซีรีย์ 0 พวกเขาไม่มี ADC ตัวที่สอง, การกำหนดค่า AC สามตัวหรือ TCB ตัวที่สอง, แม้ว่าพวกมันจะมี TCD ก็ตาม
ทันใดนั้นที่ 16,000 ชิ้นส่วน 1-series ก็น่าสนใจยิ่งขึ้นมาก แฟลชที่ใหญ่ขึ้นมาพร้อมกับอุปกรณ์ต่อพ่วงมากมายที่ดูเหมือนว่าจะเหมาะกับชิปที่ใหญ่กว่ามาก และไม่ว่าจะเป็น 16k หรือ 32k พวกมันก็จะได้รับ SRAM 2k ADC ตัวที่สองทั้งหมดมีเอกลักษณ์เฉพาะใน AVR ดูเหมือนว่าจะเป็นพื้นที่ทดสอบสำหรับคุณสมบัติต่างๆ มากมายที่ปรากฏในรูปแบบที่ได้รับการปรับปรุงใน AVR Dx-series การกำหนดราคาไม่ได้คำนึงถึงอุปกรณ์ต่อพ่วงที่เหนือกว่าอย่างมากในซีรีส์ 16k 1
ดังที่คุณเห็นจากตารางด้านบน ซีรีส์ 2 นั้นมีระดับด้านข้างมากกว่าการอัพเกรด พวกเขามี ADC ที่ดีกว่ามาก ระบบเหตุการณ์และ CCL เป็น "ปกติ" และมี RAM มากกว่า ส่วน 14 พินนั้นมาพร้อมกับแฟลช 32k (เห็นได้ชัดว่ามีการวางแผน 3214 แต่ถูกยกเลิกไป มันไกลพอที่จะ อยู่ใน ATPACK สักพักก่อนจะถูกถอดออก)
ฉันได้เขียนสรุปโดยย่อว่าคุณต้องการใช้ซีรีส์ใดเมื่อใด หากตัวเลือกที่ถูกต้องยังไม่ชัดเจนในตอนนี้
ในคำจำกัดความอย่างเป็นทางการของบอร์ด Arduino สำหรับแพ็คเกจฮาร์ดแวร์ "megaavr" พวกเขาบอกเป็นนัยว่าสถาปัตยกรรมใหม่ของชิ้นส่วน megaAVR 0-Series (ซึ่งเกือบจะเหมือนกับที่ใช้ใน TinyAVR 0-Series และ 1-Series) เรียกว่า "megaavr " - นั่นไม่ใช่คำที่เป็นทางการ ไมโครชิปใช้คำว่า "megaAVR" เพื่ออ้างถึงส่วน "ATmega" ใดๆ ไม่ว่าจะมีอุปกรณ์ต่อพ่วงแบบเก่าหรือสมัยใหม่ก็ตาม ไม่มีข้อกำหนดอย่างเป็นทางการในการอ้างถึงส่วน AVR ทั้งหมดของครอบครัวหนึ่งหรืออีกครอบครัวหนึ่ง และพนักงานของ Microchip ถึงกับปฏิเสธว่าไม่มีคำดังกล่าวเป็นการภายใน ฉันไม่แน่ใจว่าคุณจะผลิตชิ้นส่วนสองชุดได้อย่างไร โดยชิ้นส่วนในแต่ละชุดมีความเหมือนกันมากและเหมือนกันกับอีกชุดน้อยมาก โดยไม่มีใครสร้างวลีเพื่ออ้างถึงชิ้นส่วนใดชิ้นหนึ่ง
ในเอกสารนี้ ก่อนเวอร์ชัน 2.0.2 เราใช้หลักการของ Arduino และแม้จะผ่านไปนานกว่าหนึ่งปีแล้วตั้งแต่นั้นมา ฉันยังคงค้นหาสถานที่ที่ฉันเรียกมันว่า megaAVR ต่อไป โปรดรายงานสิ่งนี้โดยใช้ปัญหา GitHub หากคุณพบเห็น โปรดทราบว่าคำว่า avr
และ megaavr
ยังคงใช้เป็นการภายใน (เช่น ในไลบรารี เพื่อทำเครื่องหมายว่าไลบรารีที่กำหนดเข้ากันได้กับส่วนใด หรือแยกเวอร์ชันต่างๆ ของไฟล์ตามเวอร์ชันที่จะใช้งาน) สิ่งนี้จะดำเนินต่อไป - เราต้องยึดถือสิ่งนี้เพื่อให้เข้ากันได้กับสิ่งที่ทีม Arduino เริ่มต้นจากแกนหลักสำหรับ Uno WiFi Rev. 2 และ Nano Every
ไม่ว่าในกรณีใดก็ตาม จำเป็นต้องใช้ คำบางคำ เพื่ออ้างถึงทั้งสองกลุ่ม และไมโครชิปไม่ได้ระบุไว้ ในกรณีที่ไม่มีข้อกำหนดอย่างเป็นทางการ ฉันได้อ้างถึงอุปกรณ์ AVR ก่อนปี 2559 (ที่มี PORTx, DDRx ฯลฯ ที่ลงทะเบียนสำหรับพิน) ว่า " classic AVR " และ Arduino เรียก megaavr ว่า " modern AVR " นอกจากนี้ยังมีบางส่วนที่โมดูล I/O มีลักษณะคล้ายกับ AVR แบบคลาสสิกเป็นส่วนใหญ่ แต่ก็มีชุดคำสั่งเวอร์ชันที่แย่กว่าอย่างเห็นได้ชัด และขนาดแฟลชทั่วไปที่ 1k หรือน้อยกว่า สิ่งเหล่านี้ใช้ AVRrc (สำหรับคอร์ที่ลดลง) ของ AVR ในขณะที่ AVR แบบคลาสสิกส่วนใหญ่ใช้ AVRe หรือ AVRe+ และ AVR สมัยใหม่ใช้ AVRxt แกนนี้ไม่รองรับชิ้นส่วน AVRrc และในโอกาสโชคร้ายที่ฉันต้องพูดถึงชิ้นส่วนที่น่าผิดหวังอย่างยิ่งเหล่านี้ ฉันจะเรียกชิ้นส่วนเหล่านี้ว่าชิ้นส่วน " Reduced Core AVR " เนื่องจากเป็นชื่ออย่างเป็นทางการของชิ้นส่วนเหล่านั้น แม้ว่าฉันจะมีจำนวนมากก็ตาม วลีที่มีสีสันมากขึ้นสำหรับพวกเขา ขอแนะนำว่าไม่มีการออกแบบใดๆ ให้ใช้ AVR แบบลดแกน (Reduced Core AVR ) ไม่ใช่ว่าพวกมันล้าสมัย แต่มันแค่มีหมัด ขอแนะนำว่า " AVR สมัยใหม่ " (ที่มีอุปกรณ์ต่อพ่วงใหม่และชุดคำสั่ง AVRxt ) - ทั้ง Ex-series, Dx-series, TinyAVR 0/1/2 หรือ mega0 จะถูกใช้สำหรับการออกแบบใหม่ทั้งหมด
เอกสารข้อมูลสำหรับ TinyAVR 2-Series ใหม่ - แม้ว่าเอกสารข้อมูลจะ "ครอบคลุม" ชิ้นส่วน 16k เท่านั้น แต่ก็ระบุอย่างชัดเจนว่าไม่มีความแตกต่างในด้านคุณสมบัติระหว่างชิ้นส่วนที่มีจำนวนพินเท่ากัน (กล่าวคือ ไม่มีชิ้นส่วน "สีทอง" เช่น 16k/32k 1-Series) เฉพาะระหว่างชิ้นส่วนที่มีจำนวนพินต่างกัน และตามที่กำหนดโดยจำนวนพินเท่านั้น (นั่นคือ คุณลักษณะบนชิ้นส่วน 24 พินจะอยู่บนชิ้นส่วน 14 พิน เว้นแต่ แบบ 14 พินไม่มีพินที่ต้องการ และเป็นสิ่งที่ไม่สามารถใช้งานได้หากไม่มีพิน) ชิ้นส่วน 14, 20 และ 24 พินทั้งหมดแสดงรายการด้วยแฟลช 4k, 8k, 16k และ 32k; ตัวเลือกขนาดแฟลชเหล่านี้ตามลำดับมาพร้อมกับ SRAM 512, 1024, 2048 และ 3072 ไบต์ (นั่นคือส่วน 4k และ 8k มี SRAM เป็นสองเท่า) ส่วน 4/8k ได้รับ EEPROM 128 ไบต์ ส่วนที่มีขนาดใหญ่กว่าจะได้ 256 . ชิ้นส่วน 14 พินมาใน SOIC และ TSSOP, 20 พินใน (กว้าง) SOIC, SSOP และนั่น Itty-bitty QFN เช่น 1616 (คราวนี้พวกเขาให้ชิ้นส่วน 32,000 แก่เราในแพ็คเกจนั้นด้วย แต่โชคดีที่ได้ชิ้นส่วนนั้น มีการสั่งซื้อล่วงหน้าทุกที่ - ฉันทำคะแนนไม่ได้สักชิ้นเดียว) และ 24-pin ใน VQFN เดียวกันกับ 3217.
TWI, SPI, USART0, AC0 ไม่มีการเปลี่ยนแปลง เช่นเดียวกับ NVMCTRL (การเปลี่ยนแปลงที่จำเป็นสำหรับ bootloader นั้นเกี่ยวข้องกับการรองรับ USART ตัวที่สองเท่านั้น) ตัวเลือกนาฬิกาไม่เปลี่ยนแปลง TCB0 และ TCB1 ได้รับการอัปเกรดเป็นเวอร์ชันใน Dx-Series: ตัวเลือก clock off event, cascade และแยกบิต INTCTRL สำหรับ OVF และ CAPT - ส่วนเพิ่มเติมที่ดี แต่ไม่มีสิ่งใดเกี่ยวข้องกับแกนหลัก) และทุกส่วนมีทั้ง TCB ตอนนี้เราได้รับ CCL LUT 4 ตัวและซีเควนเซอร์ 2 ตัว แทนที่จะเป็น 2 และ 1 - และสามารถส่งสัญญาณการขัดจังหวะได้เหมือนกับส่วนอื่นๆ ด้วย CCL (และไม่เหมือนกับ TinyAVR 0/1-Series) หนึ่งในคุณสมบัติที่น่าตื่นเต้นที่สุดคือตามที่คาดไว้ พวกมันมี USART ตัวที่สอง (เสียงที่คุณได้ยินคือ ATtiny841 และ ATtiny1634 สะอื้นอยู่ที่มุมห้อง) PORTMUX ลงทะเบียนในขณะนี้ตั้งชื่อเหมือนกับ AVR สมัยใหม่ส่วนที่เหลือ - แต่เราไม่ได้สูญเสียการควบคุมพินสำหรับแต่ละช่อง TCA WO ตอนนี้ EVSYS ทำงานเหมือนกับที่ทำกับชิ้นส่วนที่ไม่ใช่ AVR-0/1-Series ที่ไม่ใช่ขนาดเล็ก (ซึ่งเป็นการเปลี่ยนแปลงที่น่ายินดี - ซีรีส์ 0/1 นั้นเป็นแบบคี่วันเอาท์ และบางวิธีที่ EVSYS ของพวกเขาแตกต่างออกไป ). คุณสมบัติ 1-Series ของ TCD0, AC1/2, DAC0 และ ADC1 หายไปแล้ว ในทางกลับกัน ADC0 นั้นมีความเพ้อฝันมากกว่าและแทบจะจำไม่ได้เลย ซึ่งเป็น AVR ใหม่ตัวแรกที่เปิดตัวนับตั้งแต่การซื้อกิจการที่มี ADC ที่แตกต่างกันจริง (เข้าคิวร้องไห้คร่ำครวญอีกครั้งจากผู้น่าสงสาร '841 ซึ่งมี ADC แฟนซีอย่างไม่น่าเชื่อพร้อมตัวเลือกที่แตกต่างที่ยอดเยี่ยม แต่ดูเก่าอย่างละเอียดถี่ถ้วนถัดจากอันใหม่) ... ตัดสินจากปริมาณโพสต์ในหัวข้อต่าง ๆ ที่ฉันได้ ดูเหมือนว่า ฉันรู้สึกว่า ADC แบบดิฟเฟอเรนเชียลไม่ได้อยู่ในอันดับต้นๆ ของรายการความปรารถนาส่วนใหญ่ของคุณ แต่มันอยู่ในอันดับต้นๆ ของรายชื่อลูกค้าชิปรายใหญ่ และนั่นคือสิ่งที่เราได้รับ และมันใกล้ถึงเวลาที่เราจะได้ ADC แบบดิฟเฟอเรนเชียลที่เหมาะสม แทนที่จะเป็นแบบในซีรีส์ Dx และมันแฟนซี มากจริงๆ ดูด้านล่าง
megaTinyCore นำเสนอการใช้งานแบบอนาล็อกRead() และมีฟังก์ชันที่มีประสิทธิภาพมากขึ้นเพื่อใช้การสุ่มตัวอย่างเกินและ PGA (ดูส่วนคุณลักษณะแบบอะนาล็อกด้านล่าง)
โอ้ และอีกอย่างหนึ่ง... การกำหนดค่าพิน UPDI มีตัวเลือกเก่า - UPDI, I/O หรือรีเซ็ต... และตัวเลือกใหม่: UPDI บน PA0 พร้อมพิน RESET ฮาร์ดแวร์บน PB4! ในที่สุด Optiboot จะเป็นตัวเลือกที่ใช้งานได้และสะดวกสบายอย่างน้อยก็ในชิ้นส่วนที่มี PB4 กล่าวคือ ไม่ใช่ชิ้นส่วน 14 พิน ซึ่งก็เกิดขึ้นเช่นกัน (หากยอดขายร้าน Tindie ของฉันเป็นข้อบ่งชี้) เป็นประเภทที่ได้รับความนิยมมากที่สุด
คิดว่าจะมีซีรีส์ 3 ต่อมั้ย? ฉันไม่ได้. DD และ EA กำลังตามล่าพวกเขาอย่างชัดเจนและเข้ารับตำแหน่งทางยุทธศาสตร์รอบๆ อาณาเขต TinyAVR ฉันคิดว่ามันเป็นเพียงเรื่องของเวลาก่อนที่แบรนด์จะถูกทำลายเหมือนที่พวกเขาทำ megaAVR หลังจาก megaAVR 0-series นี่ไม่ใช่เรื่องเลวร้ายเสมอไป: ชิ้นส่วนซีรีส์ Dx และ EA ทั้งหมดมีความคล้ายคลึงกันมากในการแมปพินและลักษณะการทำงาน ซึ่งดีมาก ตัวจิ๋วนั้นมีระบบน้อยกว่าแม้ว่าจะกระจายพินไปยังอุปกรณ์ต่อพ่วงมากกว่าก็ตาม ดูเหมือนว่าหลักการชี้นำคือ "ไม่ทิ้งอุปกรณ์ต่อพ่วง" ตรงกันข้ามกับการแมปพินของ Dx และ EA-series ซึ่งทุกอย่างเป็นไปตามแผนหลักที่กำหนดไว้ตายตัว ชิ้นส่วนต่างๆ มีหรือไม่มีพินที่กำหนด และหากไม่มี แสดงว่าไม่มีฟังก์ชันนั้น ในทั้งสองกลุ่มกว้างๆ ฉันคิดว่ามีผู้จัดการผลิตภัณฑ์ซึ่งมีหน้าที่จัดการกับวิศวกรที่คิดจะสร้าง "ข้อยกเว้น" ให้กับ Holy Pinout (เนื่องจากข้อยกเว้นเหล่านั้นแพร่ขยายออกไปอย่างหลีกเลี่ยงไม่ได้ และเป็นวิธีที่เราลงเอยด้วยการกำหนดพินดาร์ทบอร์ดแบบปิดตา บน TinyAVR แบบคลาสสิก)
การกำหนดหมายเลขพินนั้นแปลกใน TinyAVR และเป็นความผิดของ Microchip - พวกเขากำหนดหมายเลขพินภายในพอร์ตอย่างแปลก: มันเริ่มต้นตามลำดับ ยกเว้นว่า PA0 นั้นเป็น UPDI และโดยทั่วไปไม่สามารถใช้งานได้ จากนั้นพินของ PORTB จะถูกกำหนดหมายเลขในลำดับย้อนกลับ จากนั้น PORTC กลับไปที่หมายเลขทวนเข็มนาฬิกาเดียวกันกับ PORTA ให้ฉันหยุดพัก! เนื่องจากประเพณีคือการใช้พิน 0 สำหรับพินแรก และให้หมายเลขสุดท้ายเป็นพินที่คุณไม่สามารถใช้โดยไม่ตั้งฟิวส์ ซึ่งทำให้ชิปตั้งโปรแกรมได้ยาก ฉันอยากจะสามารถนับเลขทวนเข็มนาฬิกาโดยเริ่มจาก A0 โดยไม่ทำลายแบบแผนของโค้ด Arduino ที่ไม่ได้เขียนไว้ อาจมีคนโต้แย้งว่าฉันตัดสินใจได้ไม่ดีเกี่ยวกับการแมปพิน - บางทีพวกเขาควรเริ่มต้นด้วย PA0 (ใช้ไม่ได้เว้นแต่จะตั้งค่าฟิวส์ ซึ่งในกรณีนี้ชิปจะตั้งโปรแกรมยาก) เป็นพิน 0 จากนั้นกำหนดหมายเลขพินทวนเข็มนาฬิกา แต่คุณยังคงไม่สามารถทำอะไรได้หากพอร์ตทั้งหมดเป็นระเบียบ เว้นแต่คุณจะกำหนดหมายเลขพิน PORTB ไว้ด้านหลัง หากคุณสามารถกำจัดความคาดหวังที่ว่าพินทั้งหมดจะถูกกำหนดหมายเลขตามลำดับ (และใช้เฉพาะสัญลักษณ์ PIN_Pxn เท่านั้น) ก็สามารถประหยัดได้มาก
ฉันคาดการณ์ว่าในอีก 2-4 ปีข้างหน้า จะมี AVR DA, DB, DD DU (รุ่น USB), EA และชิ้นส่วนซีรีส์ D/E/F ลดลงเหลือจำนวนพิน 8 (หรืออย่างน้อย 14) และชิ้นส่วน 64 พินพร้อมแฟลช 128k และ ADC ใหม่ และไม่มีอะไรอื่นที่มีตราสินค้า ATtiny คำถามที่ใหญ่ที่สุดที่เหลืออยู่ก็คือ พวกเขาจะแทนที่ ATmega2560 ด้วย AVR สมัยใหม่ที่มีพินทั้งหมด 100 พินหรือไม่ (อาจเป็น 80-88 ซึ่งเป็น I/O) และตัวเลือกแฟลชสูงถึง 256k; นั่นจะนำเสนอสามประเด็น - ประการแรก พิน I/O 56 ตัวที่ผ่านมา ไม่มีการลงทะเบียน VPORT เหลืออีกต่อไป - พื้นที่ I/O ต่ำเต็มไปด้วย 28 VPORT และ 4 GPIOR พวกเขาจะจัดการกับพอร์ตพิเศษทั้ง 4 พอร์ตได้อย่างไร (ในปี 2560 พวกเขาเป็นเพียงพอร์ตชั้นสองที่เข้าถึงได้ช้ากว่าและไม่มีการเข้าถึงแบบรอบเดียว ฉันมีความครุ่นคิดเกี่ยวกับมันและความเป็นไปได้ว่ามี opcodes เพียงไม่กี่ตัวในภาคผนวก A ที่นี่ และประการที่สองเพื่อละเมิด อุปสรรค 128K ในแฟลชคุณต้องไปที่เคาน์เตอร์โปรแกรม 17 บิต ยังคงอยู่ส่วนนี้ "D X ส่วนที่ 256K ของ Flash จะมี RAM 32K ตอนนี้จำได้ว่า Progmem ทำงานบน DX ได้อย่างไร - พวกเขาไม่สามารถไปจนถึง 32 ได้ 24K RAM เป็นไปได้อย่างแน่นอนอาจจะ 28 แต่ที่ 32K บวก 32K สำหรับแฟลชที่แมปไม่มีที่ว่างสำหรับ SFRS ซึ่งอยู่ในพื้นที่ที่อยู่เดียวกัน
ฉันขายบอร์ดฝ่าวงล้อมพร้อมหน่วยงานกำกับดูแลส่วนหัว updi และส่วนหัวอนุกรมในร้าน Tindie ของฉันรวมถึงบอร์ดเปลือย การซื้อจากร้านค้าของฉันช่วยสนับสนุนการพัฒนาเพิ่มเติมเกี่ยวกับแกนกลางและเป็นวิธีที่ยอดเยี่ยมในการเริ่มต้นใช้ชิ้นส่วนใหม่ที่น่าตื่นเต้นเหล่านี้กับ Arduino ปัจจุบันมีบอร์ด ATTINY1624 แต่ชิ้นส่วน 20 และ 24 พินจะไม่ถูกขายเป็นบอร์ดประกอบจนกว่าจะมีการออกแบบ PCB ที่ได้รับการแก้ไขใหม่กลับมาจากบ้านกระดานเพื่อเปิดใช้งาน Autoreset บนพินอัล-ชุด นอกจากนี้ยังมีการแก้ไขบอร์ด 14 พิน - คิดว่ามันเป็นเครื่องสำอางส่วนใหญ่ หน้ากากบัดกรีสีเหลืองต้องไปเนื่องจากความสามารถในการอ่านดูเหมือนจะแย่ลงในหลายชุดที่ผ่านมา บอร์ดใหม่ยังสร้างมาตรฐานระยะห่าง 0.6 "ระหว่างแถวของหมุดแทนที่จะเป็นระยะห่าง 0.7" ปัจจุบันดังนั้นคุณจะสามารถใส่ส่วนหัวพินกลึงเข้ากับพวกเขาและเสียบเข้ากับซ็อกเก็ตที่กว้าง ใช้กับบอร์ดต้นแบบของเราที่ปรับให้เหมาะสมสำหรับระยะห่างแถวนั้น ประกอบบอร์ด 0-Series ที่ถูกยกเลิกและจะไม่ถูกใส่ใหม่เมื่อพวกเขาขายหมด จะเกิดขึ้นเช่นเดียวกันสำหรับชิ้นส่วน 16K 2-Series เมื่อมี 32K ชิ้นส่วน
ADC ในซีรีส์ 2-Series และ EA-Series เป็น ADC ที่ดีที่สุดที่ได้รับการปล่อยตัวใน AVR ในยุค AVR สมัยใหม่ นอกจากสองคนนี้ การเปรียบเทียบที่ใกล้เคียงที่สุดคือ AVR แบบคลาสสิกที่มี ADC ที่แตกต่างกับคุณสมบัติชั้นยอด (T841, MEGA2560 และ (น่าประหลาดใจ) T861 เป็นคู่แข่งที่แข็งแกร่งที่สุด) ในขณะที่มันไม่สามารถเพิ่มได้อย่างบ้าคลั่ง 100x และ 200x ที่บางส่วนโม้ในวัน AVR แบบคลาสสิก แต่ก็ไม่ชัดเจนสำหรับฉัน ฉันจะพูดว่า "น่าจะเป็นส่วนใหญ่และแน่นอนที่สุดถ้าคุณให้ฉันออกแบบฮาร์ดแวร์ฉันไม่รู้จักอะนาล็อก!") ADC ใหม่นี้มีความสามารถสูงอย่างแน่นอนด้วยความสามารถที่แตกต่างกันอย่างแท้จริง (ไม่เหมือนกับซีรีย์ DA และ DB ที่มี) และอีกชุดหนึ่งที่ขึ้นหัวและไหล่เหนือสิ่งใดก็ตามที่มีอยู่ใน AVR ที่ทันสมัยอื่น ๆ จนถึงปัจจุบัน แอมพลิฟายเออร์ Gain ที่ตั้งโปรแกรมได้นั้นเป็นความสามารถใหม่และยังคงต้องเห็นว่าการวัดแบบอะนาล็อกแบบใดที่ผู้คนสามารถออกไปได้ มันดูเหมือนจะมีแนวโน้มอย่างแน่นอน มันจะน่าสนใจเป็นพิเศษที่จะเข้าใจความแตกต่างระหว่างการใช้ PGA ที่ 1x Gain, vs ไม่ได้ใช้ PGA และประโยชน์และข้อเสียของการทำเช่นนั้น (ไมโครชิพจะได้รับการดูแลอย่างดีจากเอกสารที่กล่าวถึงวิธีการเลือกการกำหนดค่า ADC ที่เหมาะสมสำหรับงานในกรณีทั่วไปฉันได้ยกข้อกังวลนี้กับไมโครชิปและคนที่ฉันพูดถึงระบุว่ามันเป็นลำดับความสำคัญสูง สถานการณ์ได้รับการปรับปรุงอย่างมาก ยังคงปรากฏว่ากลุ่ม DOC ได้รับคำสั่งโดยเฉพาะไม่ให้คำแนะนำที่เป็นรูปธรรมใด ๆ ที่เกิดขึ้นจริง
การเพิ่มการสะสม 1024 ตัวอย่างเพื่อจุดประสงค์ในการสุ่มตัวอย่างและการทำลายล้างเป็นสิ่งที่น่ายินดีแม้ว่าจะมีความเสี่ยงที่จะประเมินขนาดและความเกี่ยวข้องของข้อผิดพลาดออฟเซ็ตต่ำเกินไป (รับตัวอย่าง 1024 ตัวอย่าง (ทั้งหมดที่มีข้อผิดพลาดออฟเซ็ตที่กำหนด) จากนั้นทำลายผลรวมเพื่อให้ได้การวัด ADC 17 บิตทำให้ง่ายต่อการจินตนาการว่าข้อผิดพลาดใด ๆ จะถูก จำกัด อยู่ที่คู่ต่ำสุด แต่ถ้าเกิดข้อผิดพลาด คือ 5 LSB ในการวัดครั้งเดียวเมื่อคุณสะสมตัวอย่าง 1024 และการหลอกลวงคุณมีข้อผิดพลาดออฟเซ็ตที่ 160 มันง่ายมากที่จะเห็นและคิดว่ามันเป็นสัญญาณ ไม่ใช่เสียงรบกวน
ชิปขนาดเต็มขนาดแรก (ไม่ใช่สี) พร้อม ADC ใหม่มีให้บริการในแพ็คเกจ 28-48 พินพร้อมแฟลชสูงสุด 64K มีการเก็งกำไรตามปกติเกี่ยวกับสิ่งที่หากมีสิ่งใดเปลี่ยนจาก 2-series เป็น EA-Series: ดูเหมือนว่าคำตอบคือหนึ่งในลูกบิดที่สับสนถูกลบออก
ตัวจับเวลา Type D ใช้สำหรับ PWM บนชิ้นส่วน 20/24 Pin 1-Series ในการตั้งค่า PWM PIN เริ่มต้น ในส่วนที่เล็กกว่ามันจะไม่ให้เราเพิ่มจำนวนหมุด PWM ทั้งหมด เฉพาะหมุด WOC และ WOD (บน PC0 และ PC1 ตามลำดับ) ไม่มี PWM ที่ขับเคลื่อนด้วย TCA อยู่แล้ว ดังนั้นเนื่องจาก analogWrite () ไม่รองรับคุณสมบัติใด ๆ ที่จะเปิดใช้งานโดยการปิดโหมดแยก (เช่น 16 บิต PWM) หรือปรับปรุงโดยใช้ตัวจับเวลาประเภท D (เช่นการปรับความถี่) มันจะแย่ลงเพราะ มันจะต้องใช้พื้นที่เพิ่มเติมในการจัดเก็บกิจวัตรประจำวันเพื่อเปิดและปิด PWM จากตัวจับเวลาสองประเภทแทนที่จะเป็นหนึ่ง สิ่งนี้ไม่ได้เล็กน้อยในชิ้นส่วนแฟลชขนาดเล็ก มันอยู่ในลำดับ 600 ไบต์ 150 สำหรับ DigitalWrite () และ 450 สำหรับ analogWrite () หากเคยเรียกใช้ TCD PWM PIN Optimizer ควร จะสามารถเพิ่มประสิทธิภาพส่วนหนึ่งของฟังก์ชั่นเหล่านั้นในกรณีนี้ตราบใดที่หมุดที่ใช้กับฟังก์ชั่นเหล่านั้นไม่รวมหมุด TCD PWM ใด ๆ หมายเหตุเครื่องมือเพิ่มประสิทธิภาพจะพิจารณาพวกเขาอย่างอิสระนั่นคือ DigitalWrite () จะรวมถึงรหัสเพื่อปิด TCD PWM หากใช้กับ PIN ที่ใช้ TCD สำหรับ PWM ไม่ว่าคุณจะเรียก analogWrite () บนพินนั้นหรือไม่
ซึ่งแตกต่างจาก AVR อื่น ๆ เกือบทุกตัว (ฉันสามารถนึกถึงตัวอย่างได้ 3 ตัวอย่างและมีเพียงหนึ่งในนั้นเท่านั้นที่เป็น "โบนัส" ไม่ใช่ "unbonus") มีคุณสมบัติ "โบนัส" เพิ่มเติมตามชิ้นส่วนแฟลชของชิ้นส่วนภายในครอบครัว . รุ่น 16K และ 32K (เท่านั้น) มีคุณสมบัติพิเศษบางประการ (ซึ่งดูเหมือนจะไม่ได้รับการพิจารณาสำหรับการกำหนดราคา) - พวกเขาทั้งหมดมี 2K ของ RAM ไม่ว่าจะเป็น 16K หรือ 32K พวกเขามีตัวเปรียบเทียบแบบอะนาล็อก 3 ตัว ตัวเลือก), ที่สอง - ต้องการอย่างยิ่ง - ตัวจับเวลาประเภท B - และแปลกประหลาดที่สุดของพวกเขามี ADC ที่สองซึ่งแตกต่างกันเฉพาะในการที่ช่องสัญญาณสอดคล้องกับ!
ซึ่งแตกต่างจาก AVR แบบคลาสสิกในส่วนเหล่านี้ แฟลชจะถูกแมปกับพื้นที่ที่อยู่เดียวกันกับส่วนที่เหลือของหน่วยความจำ ซึ่งหมายความว่าไม่จำเป็นต้องใช้ pgm_read_*_near()
เพื่ออ่านโดยตรงจากแฟลช ด้วยเหตุนี้คอมไพเลอร์จะทำให้ตัวแปรใด ๆ ประกาศ const
เป็น progmem โดยอัตโนมัติและเข้าถึงได้อย่างเหมาะสม - คุณไม่จำเป็นต้องประกาศอย่างชัดเจนว่าเป็น progmem อีกต่อไป ซึ่งรวมถึงตัวอักษรสตริงที่ยกมาดังนั้นแมโคร f () จึงไม่จำเป็นต้องใช้อีกต่อไปแม้ว่าจะรักษาความเข้ากันได้กับห้องสมุดบุคคลที่สาม F () ยังคงประกาศว่ามันเป็นข้อโต้แย้ง progmem
อย่างไรก็ตามโปรดทราบว่าหากคุณประกาศตัวแปร progmem อย่างชัดเจนคุณจะต้องใช้ฟังก์ชั่น pgm_read
เพื่ออ่านเช่นเดียวกับ AVRS แบบคลาสสิก เมื่อตัวแปรได้รับการประกาศ progmem บนชิ้นส่วนที่มีแฟลชแมปหน่วยความจำตัวชี้จะถูกชดเชย (ที่อยู่สัมพันธ์กับการเริ่มต้นของแฟลชไม่ใช่จุดเริ่มต้นของพื้นที่ที่อยู่); ออฟเซ็ตเดียวกันนี้ใช้เมื่อใช้มาโคร pgm_read_*_near()
แมโคร โปรดทราบว่าการประกาศสิ่งต่าง ๆ progmem และการเข้าถึงด้วย pgm_read_*_near
ฟังก์ชั่นแม้ว่ามันจะทำงานได้ดี แต่ช้าลงและสูญเสียแฟลชจำนวนเล็กน้อย (เมื่อเทียบกับการประกาศตัวแปร const); เช่นเดียวกันสำหรับแมโคร f () ที่มีสตริงคงที่ใน 2.1.0 และใหม่กว่า (เป็นระยะเวลาหนึ่งก่อน 2.1.0, F()
ไม่ได้ทำอะไรเลย - แต่นั่นทำให้เกิดปัญหาสำหรับห้องสมุดบุคคลที่สาม) ผู้เขียนยืนยันว่าปัญหาอยู่กับแกนกลางไม่ใช่ห้องสมุดและตัวเลือกของฉันคือการยอมรับประสิทธิภาพน้อยลงหรือปฏิเสธผู้ใช้ของฉันเข้าถึงห้องสมุดยอดนิยม) การใช้มาโคร F()
อาจจำเป็นสำหรับความเข้ากันได้กับห้องสมุดบุคคลที่สามบางแห่ง (กรณีเฉพาะที่บังคับให้กลับมาของ F()
เราไม่ได้เป็นประเภทนั้น - เราสามารถทำให้คนที่ฉันรู้จักทำงานกับ F ()-รหัส As-Noop และพวกเขาใช้แฟลชน้อยลงสองสามครั้ง)
รุ่นยานยนต์ควรใช้งานได้เช่นกัน คุณต้องเลือกความเร็วสัญญาณนาฬิกา 16 MHz ที่ได้จากชิ้นส่วนเหล่านี้เสมอ พวกเขาไม่รองรับการทำงาน 20 MHz และไม่ควรใช้ตัวเลือกนาฬิกาที่ปรับแต่ง
ตอนนี้ไปยังส่วนที่ดีที่เราจะได้พูดคุยเกี่ยวกับวิธีการทั้งหมดนี้โดย Megatinycore เราจะเริ่มต้นด้วยวิธีการที่คุณควรอ้างถึงพินเพื่อผลลัพธ์ที่ดีที่สุดจากนั้นไปยังคุณสมบัติหลักตัวเลือกเมนูก่อนที่จะจบด้วยชุดลิงก์ไปยังเอกสารที่มีรายละเอียดเพิ่มเติมเกี่ยวกับระบบย่อยต่างๆ
เรื่องง่าย ๆ ของวิธีการอ้างถึง PIN สำหรับ analogread () และ digitalRead () โดยเฉพาะอย่างยิ่งในฮาร์ดแวร์ที่ไม่ได้มาตรฐานเป็นแหล่งของความสับสนอย่างต่อเนื่องในหมู่ผู้ใช้ Arduino ฉันคิดว่าการตำหนิส่วนใหญ่ขึ้นอยู่กับการตัดสินใจของทีม Arduino (และผู้แต่งการเดินสายต่อหน้าพวกเขา) เกี่ยวกับวิธีการอ้างถึงหมุด การกำหนดหมุดบางตัวเป็น "หมุดอะนาล็อก" ทำให้ผู้คนคิดว่าพินเหล่านั้นไม่สามารถใช้สำหรับการทำงานแบบดิจิทัล (พวกเขาคิดว่าเป็น "พินที่มีอินพุตแบบอะนาล็อก" - เช่นเดียวกับ "พินที่สามารถส่งออก PWM") ความจริงที่ว่าพินได้รับการจัดลำดับใหม่แบบดั้งเดิมนั้นทำให้น้ำขุ่นมัวต่อไป สำหรับชิ้นส่วน AVR แบบคลาสสิกที่ไม่ได้มาตรฐานมักจะเลวร้ายยิ่งขึ้นไปกว่า "การแมปพิน" ที่เข้ากันไม่ได้หลายครั้งที่สร้างขึ้นโดยนักเขียนหลายคนในช่วงหลายปีที่ผ่านมา ยุ่งเหยิงในลักษณะนี้ด้วยบางส่วนที่มีการแมปพินที่แตกต่างกันอย่างสิ้นเชิงสามกรณีอย่างน้อยหนึ่งกรณีหนึ่งในการแมปสำรองเป็นงานที่ได้รับแรงบันดาลใจจากปีศาจแห่งความชั่วร้ายที่บริสุทธิ์โดยไม่ต้องใช้ตารางการค้นหาเพิ่มเติมเพื่อแปลงพินอะนาล็อกเป็นดิจิตอล พิน)
แกนนี้ใช้รูปแบบง่าย ๆ สำหรับการกำหนดหมายเลขพิน Arduino: พินมีหมายเลขเริ่มต้นจากพิน I/O ที่ใกล้เคียงที่สุดกับ VCC เป็น PIN 0 และดำเนินการต่อทวนเข็มนาฬิกาข้าม (ส่วนใหญ่) ที่ไม่สามารถใช้งานได้ จากนั้น PIN updi จะถูกกำหนดให้กับหมายเลขพินสุดท้าย (ตามที่ระบุไว้ข้างต้นมันเป็นไปได้ที่จะอ่าน pin updi (ทั้งแบบอะนาล็อกและดิจิตอลอ่านงาน) แม้ว่าจะไม่ได้ตั้งค่าเป็น GPIO) เราขอแนะนำสิ่งนี้เป็นทางเลือกสุดท้าย: PIN updi มักเปิดใช้งานการดึงของมันเมื่อไม่ได้ตั้งค่าเป็นพิน GPIO และสัญญาณที่ดูเหมือนลำดับ UPDI เปิดใช้งานจะทำให้เกิดการทำงานที่ไม่พึงประสงค์
เพื่อป้องกันความสับสนทั้งหมดเกี่ยวกับตัวตนของ PIN และกำจัดความกำกวมเราขอแนะนำให้ใช้สัญกรณ์ PIN_PXN เพื่ออ้างถึงพินเว้นแต่คุณจะใช้บอร์ดพัฒนาที่มีตัวเลขหรือชื่อที่แตกต่างกันสำหรับพินที่พิมพ์ลง สิ่งนี้จะเพิ่มความสามารถในการพกพาของรหัสของคุณไปยังฮาร์ดแวร์อื่น ๆ ที่คล้ายกันและทำให้การค้นหาข้อมูลเกี่ยวกับหมุดที่คุณใช้ในแผ่นข้อมูลที่เกี่ยวข้องนั้นง่ายขึ้นหากจำเป็น
นี่เป็นวิธีที่แนะนำในการอ้างถึงพิน #defines #defines
มีให้ในรูปแบบ PIN_Pxn
โดยที่ x
คือ a, b หรือ c และ n
คือหมายเลข 0-7 - (ไม่ต้องสับสนกับ pin_an ที่อธิบายไว้ด้านล่าง) สิ่งเหล่านี้เพียงแค่แก้ไขหมายเลขพินดิจิตอลของพินที่เป็นปัญหา - พวกเขาไม่ผ่านเส้นทางรหัสอื่นหรืออะไรก็ตาม อย่างไรก็ตามพวกเขามียูทิลิตี้เป็นพิเศษในการเขียนโค้ดที่ทำงานข้ามสายผลิตภัณฑ์ด้วยอุปกรณ์ต่อพ่วงที่เชื่อมโยงกับพินบางตัว (ตามพอร์ต) เป็นอุปกรณ์ต่อพ่วงส่วนใหญ่ รหัสสาธิตหลายชิ้นในเอกสารใช้ประโยชน์จากสิ่งนี้ การจัดการพอร์ตโดยตรงเป็นไปได้เช่นกัน - และในความเป็นจริงมีตัวเลือกเพิ่มเติมที่ทรงพลังหลายตัวเลือกให้ดู - ดู การจัดการพอร์ตโดยตรง
PIN_Pxn
- ไม่ใช่ Pxn
และไม่ใช่ PIN_xn
- สิ่งเหล่านั้นหมายถึงสิ่งต่าง ๆ !
เมื่อมีการใช้หมายเลขเดียวเพื่ออ้างถึง PIN - ในเอกสารหรือในรหัสของคุณ - มันจะเป็น "หมายเลขพิน Arduino" เสมอ นี่คือหมายเลขพินที่แสดงเป็นสีส้ม (สำหรับพินที่มีความสามารถของ analograd ()) และสีน้ำเงิน (สำหรับพินที่ไม่ได้) บนแผนภูมิ Pinout วิธีอื่น ๆ ทั้งหมดของการอ้างถึงพินนั้นถูกกำหนดให้กับหมายเลขพิน Arduino ที่สอดคล้องกัน
แกนยังมีค่าคง An
และ PIN_An
(โดยที่ n
คือตัวเลขตั้งแต่ 0 ถึง 11) เช่นเดียวกับแกนกลางอย่างเป็นทางการ PIN_An
ถูกกำหนดให้เป็นหมายเลขพินดิจิตอลของพินที่ใช้ร่วมกับช่องอะนาล็อก n เหล่านี้อ้างถึงหมายเลข ช่อง ADC0 ระบบการตั้งชื่อนี้คล้ายกับสิ่งที่ใช้กับแกน AVR คลาสสิกจำนวนมาก แต่ที่นี่พวกเขามี #defined เป็นหมายเลข Arduino ที่สอดคล้องกัน หากคุณต้องการรับหมายเลขช่องอะนาล็อกบนพินดิจิตอลให้ใช้แมโคร digitalPinToAnalogInput(pin)
- แต่คุณต้องการสิ่งนั้นถ้าคุณเขียนไลบรารี ADC ขั้นสูง
ชิ้นส่วนเหล่านี้ (อย่างน้อย 1/2-series-0-series นั้นมีความหมายว่าเป็นตัวเลือกงบประมาณยกเว้นว่าพวกเขาล้มเหลวในการหดงบประมาณและพวกเขามีเพียงไม่กี่เซ็นต์ที่ถูกกว่า) ให้กล่องเครื่องมือที่ยอดเยี่ยม และอุปกรณ์ต่อพ่วงที่ทรงพลัง ส่วนบนสุดนั้นอยู่ในระดับเดียวกับหรือดีกว่าชิ้นส่วน megaavr คลาสสิก - สำหรับราคาเล็ก ๆ หนึ่งในหลักการชี้นำของการออกแบบ megatinycore เช่นเดียวกับแกนอื่น ๆ ของฉันคือการอนุญาตให้ชิ้นส่วนที่รองรับสามารถเข้าถึงศักยภาพสูงสุดของพวกเขา - หรือใกล้เคียงกับที่เป็นไปได้ภายในข้อ จำกัด ของ Arduino ส่วนนี้ (ใหญ่มาก) ครอบคลุมคุณสมบัติของชิ้นส่วนเหล่านี้และวิธีการสัมผัสโดย megatinycore รวมถึงคุณสมบัติของแกนกลางเอง ส่วนนี้ (ใหญ่มาก) พยายามครอบคลุมพื้นที่คุณลักษณะแต่ละแห่ง ลองค้นหาคุณสมบัติที่คุณทำงานด้วยหากคุณพยายามใช้คุณสมบัติชิปและมีปัญหา!
20 MHz ภายใน (4.5V -5.5V - ทั่วไปสำหรับระบบ 5V)
16 MHz ภายใน (4.5V -5.5V - ทั่วไปสำหรับระบบ 5V)
10 MHz ภายใน (2.7V -5.5V - ทั่วไปสำหรับระบบ 3.3V)
8 MHz ภายใน (2.7V -5.5V - ทั่วไปสำหรับระบบ 3.3V)
ภายใน 5 MHz (1.8V-5.5V)
ภายใน 4 MHz (1.8V-5.5V)
2 MHz ภายใน (1.8V-5.5V, ทดสอบไม่ดี)
1 MHz ภายใน (1.8V-5.5V, ทดสอบไม่ดี)
นาฬิกาภายนอก 20 MHz (4.5V-5.5V, ทดสอบไม่ดี)
นาฬิกาภายนอก 16 MHz (4.5V-5.5V, ทดสอบไม่ดี)
นาฬิกาภายนอก 12 MHz (2.7V-5.5V, ทดสอบไม่ดี)
นาฬิกาภายนอก 10 MHz (2.7V-5.5V, ทดสอบไม่ดี)
นาฬิกาภายนอก 8 MHz (2.7V-5.5V, ทดสอบไม่ดี)
ภายใน 6 MHz (ปรับยังไม่ได้ทดสอบ)
ภายใน 5 MHz (ปรับแล้วทดสอบไม่ดี)
4 MHz ภายใน (ปรับแล้วทดสอบไม่ดี)
2 MHz ภายใน (ปรับแล้วทดสอบไม่ดี)
1 MHz ภายใน (ปรับแล้วทดสอบไม่ดี))
ภายใน 7 MHz (ปรับแต่งสำหรับนักทำซาชิสต์ไม่ได้ทดสอบ)
8 MHz ภายใน (ปรับแล้วทดสอบไม่ดี)
10 MHz ภายใน (ปรับแล้วทดสอบไม่ดี)
ภายใน 12 MHz (ปรับไม่ได้ทดสอบ)
14 MHz ภายใน (ปรับแต่งสำหรับนักทำซาชิสต์ไม่ได้ทดสอบ)
ภายใน 16 MHz (ปรับ)
ภายใน 20 MHz (ปรับ)
24 MHz ภายใน (ปรับ, โอเวอร์คล็อก, ทดสอบไม่ดี)
ภายใน 25 MHz (ปรับ, โอเวอร์คล็อก, ทดสอบไม่ดี)
30 MHz ภายใน (ปรับ, overclocked, ทดสอบไม่ดี) - 0/1 -series ต้องการการตั้งค่าฟิวส์ "20MHz" OSCCFG; ชิ้นส่วน 2-Series อาจหรือไม่สามารถเข้าถึงได้ 30 ด้วย "16 MHz" ที่เลือก
32 MHz ภายใน (ปรับ, โอเวอร์คล็อก, ทดสอบไม่ดี) - 2 -series เท่านั้นการโอเวอร์คล็อกในแง่ดีมากอาจไม่เสถียร
นาฬิกาภายนอก 24 MHz (โอเวอร์คล็อกทดสอบไม่ดี)
นาฬิกาภายนอก 25 MHz (โอเวอร์คล็อกทดสอบไม่ดี)
นาฬิกาภายนอก 30 MHz (โอเวอร์คล็อกทดสอบไม่ดี)
นาฬิกาภายนอก 32 MHz (โอเวอร์คล็อกทดสอบไม่ดี)
เราไม่เรียกร้องเกี่ยวกับช่วงแรงดันไฟฟ้าหรืออุณหภูมิสำหรับชิ้นส่วนที่โอเวอร์คล็อก - สิ่งที่เราอ้างว่าอย่างน้อยหนึ่งชิปที่เราทำงานด้วยความเร็วนั้น ที่อุณหภูมิห้อง ระยะทางของคุณคาดว่าจะแตกต่างกันไป แต่โดยทั่วไปจะดีกว่าด้วยข้อมูลจำเพาะ F เมื่อเทียบกับส่วนข้อมูลจำเพาะ N หรือ U
สำคัญ - อ่านเกี่ยวกับการปรับแต่งก่อนที่จะเลือกตัวเลือกใด ๆ !
ข้อมูลเพิ่มเติมเกี่ยวกับความเร็วสัญญาณนาฬิกาเหล่านี้สามารถพบได้ใน การอ้างอิงนาฬิกา
แรงดันไฟฟ้าที่แสดงเป็นสิ่งที่รับประกันว่าจะทำงานตามข้อกำหนดของผู้ผลิต (. เว้นแต่จะผลักดันขอบเขตของช่วงอุณหภูมิการทำงานโดยทั่วไปชิ้นส่วนเหล่านี้จะทำได้ดีกว่า (โดยทั่วไป 2-Series ทำงานที่ 32 MHz และ 5V @ อุณหภูมิห้องแม้จาก Oscillator ภายใน; /1-series จะทำงานที่ 32 MHz ด้วยนาฬิกาภายนอกหากแหล่งจ่ายไฟมีความเสถียร 5.0-5.5V)
ไม่จำเป็นต้องดำเนินการเพื่อตั้งค่าฟิวส์ OSCCFG
เมื่ออัปโหลดภาพร่างผ่าน UPDI เมื่ออัปโหลดผ่าน Optiboot ฟิวส์จะไม่สามารถเปลี่ยนแปลงได้ดังนั้นสิ่งที่ถูกเลือกเมื่อ bootloader ถูกเผาเป็นสิ่งที่ใช้และเฉพาะ "burn bootloader" หรืออัปโหลดภาพร่างผ่าน UPDI จะเปลี่ยนสิ่งนั้น
ตัวเลือกความเร็วนาฬิกาออสซิลเลเตอร์ภายในทั้งหมดใช้การสอบเทียบเริ่มต้นของโรงงานเว้นแต่จะเลือกตัวเลือก "ปรับ" ซึ่งในกรณีนี้การปรับเทียบจะถูกปรับตามที่บันทึกไว้ใน การอ้างอิงการปรับจูน สิ่งนี้สามารถใช้เพื่อรับการดำเนินการ 16 MHz บนชิป Optiboot ที่หลอมรวมไว้สำหรับ 20 MHz และในทางกลับกัน
ดู การอ้างอิงเกรดความเร็ว สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเกรดความเร็วของผู้ผลิต โปรดทราบว่านั่นคือแรงดันไฟฟ้าและความเร็วสัญญาณนาฬิกาที่รับประกันได้ว่าจะทำงานได้ ชิ้นส่วนเหล่านี้มีไว้เพื่อให้เหมาะสำหรับการใช้งานในการใช้งานที่ความผิดพลาดที่ไม่คาดคิดของคำอธิบายบางอย่างอาจก่อให้เกิดอันตรายต่อบุคคลหรือทรัพย์สิน (คิดว่ารถยนต์, อุปกรณ์อุตสาหกรรม, เครื่องบิน, เครื่องปฏิกรณ์นิวเคลียร์ - สถานที่ที่ผู้คนสามารถตายได้ เชื่อสำหรับการใช้งานทางทหารเช่นกันซึ่งมีข้อกำหนดด้านความน่าเชื่อถือที่คล้ายกันเพียงเพราะเหตุผลตรงกันข้าม ผู้ใช้งานอดิเรกทั่วไปจะผ่อนคลายมากขึ้นเกี่ยวกับศักยภาพของปัญหาเสถียรภาพโดยการล่มนั้นมีความรำคาญน้อยกว่าความรำคาญและสุดขั้วของช่วงอุณหภูมิที่ขยายออกไปไกลเกินกว่าที่เราต้องการ สมมติว่าบอร์ดมีการเคลือบกันน้ำความร้อนส่วนเกรด N ควรจะสามารถทำงานต่อเกรดความเร็วในหม้อน้ำเดือด และนั่นเป็นเพียง N-spec F-Spec น่าจะดีถึง 125!
มันได้รับการยอมรับว่าชิ้นส่วนอุณหภูมิที่ขยายออกไปมากขึ้นซึ่งดีกว่า ซึ่งสมเหตุสมผล ส่วนที่มีรายละเอียดที่จะทำงานที่ 20 MHz ที่ 125C คาดว่าจะมีโอกาสที่ดีกว่าในการทำงานที่ 32 MHz ที่อุณหภูมิห้อง
ตั้งแต่รุ่น 2.4.0 ตอนนี้เรามีตัวเลือก "Microchip Board" อย่างเป็นทางการ สิ่งนี้ไม่ได้ทำอะไรเป็นพิเศษนอกจากการกำหนด LED_BUILTIN
ให้เป็นพินที่มี LED บนบอร์ดนั้นแทนที่จะเป็น A7 และกำหนด macro PIN_BUTTON_BUILTIN
ที่กำหนดเป็นพินด้วยปุ่มผู้ใช้ -เวอร์ชัน OPTIBOOT ใช้โปรแกรมเมอร์/ดีบักเกอร์ออนบอร์ดเสมอ เครื่องมือ -> โปรแกรมเมอร์จะใช้สำหรับ "Burn Bootloader" และ "อัปโหลดโดยใช้โปรแกรมเมอร์" เท่านั้น ในกรณีของ ATTINY416 XPLAINE - ฟังก์ชันการทำงานเพื่อรองรับการสลับหมุดแบบอนุกรมเริ่มต้นจะมีการอัปเดตในอนาคตควบคู่ไปกับการเปลี่ยนแปลงอื่น ๆ ในเครื่องจักรที่มีกลไก PINSWAP ซึ่งหวังว่าจะลดการใช้งานแฟลช
ตามที่ระบุไว้ข้างต้นสิ่งเหล่านี้อาจใช้งานไม่ได้บนแพลตฟอร์ม Linux 32 บิต นี่คือการควบคุมของฉัน ฉันไม่ได้สร้าง Avrdude Binaries AMD ฉันก็ ไม่ ได้ทำงานนั้นด้วย ฉันมีมากเกินไปแล้ว
blink()
ใช้แฟลชมากขึ้นใน mini mini กับ Xplained Pro?ทั้งคู่มี Attiny817 เดียวกัน! พวกเขาจะแตกต่างได้อย่างไร?
ด้วยเหตุผลเดียวกับที่ Blink จะใช้แฟลชมากขึ้นหากคุณเปลี่ยนเป็น PIN_PC0
เมื่อเทียบกับ PIN_PB4
: PC0 ที่ใช้กับ Mini XPLAINED เป็นพิน PWM ในขณะที่ PB4 ใช้โดย XPLAINED PRO ไม่ได้ เนื่องจากเป็นพินเดียวที่ใช้ DigitalWrite () คอมไพเลอร์มีอิสระที่จะเพิ่มประสิทธิภาพสิ่งที่ไม่จำเป็นสำหรับ DigitalWrite () บน PIN นั้นรวมถึงฟังก์ชันการทำงานเพื่อปิดเอาต์พุต PWM บนพินที่รองรับ PWM . ความแตกต่างหายไปหาก DigitalWrite () ใช้กับ PIN ที่รองรับ PWM บนอุปกรณ์ทั้งสอง (ส่งผลให้ผลลัพธ์การใช้งานแฟลชที่สูงขึ้น) หรือหาก DigitalWrite () ถูกแทนที่ด้วย DigitalWriteFast () ซึ่งจะใช้แฟลชน้อยลง 'ไม่เรียกมันบน PIN outputting PWM)
เมื่อใดก็ตามที่โปรแกรมโปรแกรมเมอร์ updi ถูกใช้เพื่ออัปโหลดรหัสฟิวส์ทั้งหมดที่สามารถตั้งค่า "ปลอดภัย" (เช่นในโดยไม่เสี่ยงต่อการสร้างบอร์ดหรือสร้างบอร์ดหากไม่มีการเข้าถึงโปรแกรมเมอร์ HV) ตัวเลือกการกำหนดค่าในตัวจะถูกตั้งค่า ดังนั้นยกเว้นที่ระบุไว้พฤติกรรมจะตรงกับเมนูเครื่องมือที่เลือกเสมอ โดยสรุปสิ่งเหล่านี้ได้รับการจัดการดังนี้:
WDTCFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
BODCFG will not be changed - not safe, you could set the BOD level to 4.3 on a 3.3v system, and then it would need to get > 4.3v applied to reprogram it. If it is on the same circuit board as parts that would be damaged, this is a difficult situation to recover from.
OSCCFG will be set
TCD0CFG will not be changed - it is not configured by megaTinyCore except to reset it to the factory default when doing "burn bootloader".
SYSCFG0 will not be changed - not safe
SYSCFG1 will be set
APPEND will not be changed - it is not configured by megaTinyCore. There is insufficient demand to justify the development effort.to make use of this as DxCore does
BOOTEND will be set
LOCKBIT will not be changed - it is not configured by megaTinyCore; supporting the lockbits presents several additional complications, and commercial users with need of this facility are unlikely to be using the Arduino IDE to program production units.
BODCFG
ไม่ปลอดภัยเนื่องจากการตั้งค่านี้เป็นแรงดันไฟฟ้าที่สูงกว่าบอร์ดกำลังทำงานอยู่และเปิดใช้งานมันจะ "อิฐ" บอร์ดจนกว่าแรงดันไฟฟ้าที่สูงขึ้นจะสามารถจัดหาได้ นี่อาจเป็นเรื่องที่น่าอึดอัดใจโดยเฉพาะอย่างยิ่งหากมีการบัดกรีกับ PCB เดียวกับอุปกรณ์ที่จะไม่ทนต่อแรงดันไฟฟ้าเหล่านั้น
SYSCFG0
ไม่ปลอดภัยเพราะนี่คือที่ที่ RSTPINCFG
อาศัยอยู่ การเปลี่ยนสิ่งนี้สามารถทำให้บอร์ดไม่สามารถโปรแกรมได้ยกเว้นผ่านการเขียนโปรแกรม HV UPDI และไม่ใช่ทุกคนที่มีโปรแกรมเมอร์ HV UPDI ในอนาคตถ้า/เมื่อโปรแกรมเมอร์ที่รับประกันความสามารถของ HV UPDI ซึ่งสามารถเลือกได้เป็นโปรแกรมเมอร์ (เช่นมันเป็นไปได้ที่จะสร้างเครื่องมือ -> ตัวเลือกโปรแกรมเมอร์ซึ่งจะทำงานกับโปรแกรมเมอร์ HV เท่านั้น) ฟิวส์นี้จะถูกตั้งค่าโดยอัตโนมัติเมื่อใช้งาน โปรแกรมเมอร์คนนั้น
เป็นผล ให้ 2.2.0 และในภายหลังคุณไม่จำเป็นต้อง 'เบิร์น bootloader' อีกต่อไปเพื่อสลับระหว่าง 16-MHz ที่ได้มาและความเร็ว 20-MHz เมื่ออัปโหลดโดยใช้ updi
แกนนี้ใช้การเพิ่มประสิทธิภาพเวลาลิงค์ เสมอ เพื่อลดการใช้งานแฟลช - คอมไพเลอร์ทุกรุ่นซึ่งรองรับชิ้นส่วน TinyAVR 0/1/2 -Series ยังรองรับ LTO ดังนั้นจึงไม่จำเป็นต้องทำให้เป็นทางเลือกเช่นเดียวกับ Attinycore นี่เป็นการปรับปรุงอย่างมากในรหัสเมื่อแนะนำโดยทั่วไปตามลำดับ 5-20%!
ชิ้นส่วนเหล่านี้ทั้งหมดมีอินพุตอะนาล็อกจำนวนมาก-DA และ DB-series มีอินพุตอะนาล็อกสูงถึง 22 อินพุตในขณะที่ DD-series มีอินพุตแบบอะนาล็อกในทุกพินที่ไม่ได้ใช้ในการขับเคลื่อนคริสตัล HF (แม้ว่าพินบนพอร์ตจะเป็น รองรับเฉพาะเมื่อปิด MVIO) พวกเขาสามารถอ่านได้ด้วย analogRead()
เช่นบน AVR ปกติและเราเริ่มต้นเป็นความละเอียด 10 บิต; คุณสามารถเปลี่ยนเป็น 12 บิตเต็มด้วย analogReadResolution()
และใช้ฟังก์ชั่น analograd ที่ปรับปรุงแล้วเพื่อทำการอ่านเกินขนาดโดยอัตโนมัติการอ่านที่ทำลายล้างเพื่อความละเอียดที่สูงขึ้นและใช้การวัดที่แตกต่างกัน มีการอ้างอิงแรงดันไฟฟ้าภายใน 4 ครั้งใน 1.024, 2.048, 4.096 และ 2.5V รวมถึงการสนับสนุนแรงดันไฟฟ้าอ้างอิงภายนอก (และ VDD แน่นอน) การอ่าน ADC นั้นเร็วกว่า AVR แบบคลาสสิก 3 เท่าและความเร็วนั้นสามารถเพิ่มเป็นสองเท่าได้อีกครั้งหากสิ่งที่คุณวัดคือความต้านทานต่ำหรือขยายเวลาการสุ่มตัวอย่างโดยปัจจัยอย่างมากสำหรับการอ่านแหล่งความต้านทานที่สูงมาก นี่คือรายละเอียดในการอ้างอิงแบบอะนาล็อก
ชิ้นส่วน DX-Series มี DAC 10 บิตซึ่งสามารถสร้างแรงดันไฟฟ้าอะนาล็อกจริง (โปรดทราบว่าสิ่งนี้ให้กระแสต่ำและสามารถใช้เป็นข้อมูลอ้างอิงแรงดันไฟฟ้าหรือแรงดันไฟฟ้าควบคุมเท่านั้น