ฉันจะตั้งความเร็วนาฬิกาเป็นฟิวส์บน ATtiny85 เมื่อใช้ Arduino เป็นโปรแกรมเมอร์ได้อย่างไร


17

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

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


โดยวิธีนี้มันเจ๋งจริงๆขอบคุณสำหรับการแบ่งปัน!
vicatcu

ถอดหมวกออก! ฉันไม่เคยจัดการโปรแกรม attiny85 ของฉันด้วยวิธีนี้ .. ฉันมักจะมีข้อผิดพลาด "โปรแกรมเมอร์ไม่ซิงค์" เมื่อ avrdude พยายามที่จะเขียนแฟลช การแลกเปลี่ยน arduino กับโจรสลัดรถบัสทำงาน ...
JonathanD

@ จอน: ฉันไม่แน่ใจว่าสาเหตุสำคัญที่ทำให้ "โปรแกรมเมอร์ไม่ซิงค์" แต่ด้วย AVR Studio คุณสามารถปรับความถี่การเขียนโปรแกรมได้ อาจจะมีตัวเลือกที่คล้ายกันใน avrdude อาจจะคุ้มค่าดูถ้าคุณเคยให้มันวนอีกครั้ง
นิคที

คำตอบ:


2

ฉันเชื่อว่าซอฟต์แวร์ Arduino (ไลบรารี่และทั้งหมด) ถือว่าคุณทำงานด้วยความเร็ว 16MHz หากคุณใช้ข้อสันนิษฐานนั้นกับนาฬิกาคุณกำลังวิ่งไปที่ ... สิ่งต่าง ๆ ควรได้ผล สมมติว่าคุณกำลังเรียกใช้ Tiny85 บนมันเป็นออสซิลเลเตอร์ภายในฉันคิดว่ามันทำงานที่ 1MHz ดังนั้นเพียงแค่ทวีคูณความล่าช้าทั้งหมดของคุณ (และเวลาอื่น ๆ ) ด้วย 16

หากคุณต้องการความแม่นยำที่ดีกว่าออสซิลเลเตอร์ภายในคุณควรคิดถึงการใช้คริสตัลภายนอกหรือเครื่อง resonator แต่คุณจะต้องเปลี่ยนการตั้งค่าฟิวส์ของ AVR เพื่อให้ทำงานได้และฉันคิดว่าคุณต้องมีโปรแกรมเมอร์เช่น AVRISP mkII ที่ต้องทำกับ AVR Studio (คำแนะนำของฉัน)

ฉันไม่รู้อะไรมากเกี่ยวกับร่าง ArduinoISP แต่สำหรับฉันแล้วดูเหมือนว่ามันจะเรียบโปรโตคอล ISP เพื่ออัปโหลดโปรแกรมไปยังชิปเป้าหมาย (ไม่ใช่ Mega328 บนบอร์ด) ไม่แน่ใจว่ามันติดตั้งเพื่อจัดการฟิวส์ ArduinoISP มีการบันทึกไว้ที่นี่http://arduino.cc/en/Tutorial/ArduinoISP , fwiw โปรดทราบว่าคุณไม่สามารถใช้ UNO ในขณะนี้เพื่อเรียกใช้ร่าง ArduinoISP ฉันไม่เห็นว่าคุณสามารถใช้ร่างเพื่อทำให้ Arduino เป็นอินเทอร์เฟซที่ใช้งานได้สำหรับการใช้เครื่องมือ AVR Studio GUI

แก้ไข : ดูเหมือนว่ามีบางสิ่งเกิดขึ้นและ UNO สามารถใช้งานได้กับ ArduinoISP ในขณะนี้ - ขอบคุณสำหรับความคิดเห็นทั้งหมด


ขอบคุณที่หัวขึ้นเกี่ยวกับ UNO ฉันใช้ Duemilanove กับชิป 168 เปลี่ยนเป็น 328 และสามารถรับร่าง ATtiny ปกติเพื่ออัปโหลดอย่างถูกต้องผ่าน ArduinoISP ฉันจะลอง / 16 เคล็ดลับของคุณ!
fearoffours

@fearoffours คุณรู้อีกอย่างที่คุณสามารถลองได้คือการเขียนแบบร่างโดยใช้ ArduinoISP ที่ตั้งค่าฟิวส์เป็นค่าที่แน่นอน ถ้า ArduinoIS สามารถเขียน Flash ได้ไม่มีเหตุผลที่ฉันคิดได้ว่าคุณไม่สามารถใช้โปรโตคอล ISP ที่อธิบายไว้ในเอกสารข้อมูล AVR เพื่อตั้งค่าฟิวส์
vicatcu

1
@fearoffours และฉันเพิ่งรู้ (และอัปเดตโพสต์) เพื่อพูดทวีคูณด้วย 16 แทนที่จะหารด้วย 16 (การรันนาฬิกาที่ช้ากว่าของคุณมันจะใช้เวลามากขึ้นในการทำเครื่องหมายเวลาเดียวกัน)
vicatcu

ฉันรู้ว่ามันใช้เวลากว่าหนึ่งปีในภายหลัง แต่ฉันประสบความสำเร็จในการใช้และ UNO ในฐานะโปรแกรมเมอร์ AVR ( แต่ผมไม่ได้เปลี่ยนร่าง ArduinoISP เพื่อdelay(20)insted ของdelay(40)ในความหมายของvoid heartbeat().)
JellicleCat

ฉันรู้ว่ามันใช้งานได้ในภายหลัง แต่ฉันใช้ Uno เป็นโปรแกรมเมอร์ AVR ได้สำเร็จโดยไม่ต้องเปลี่ยนอะไรเลยในแบบร่าง
ingh.am

4

ฉันใช้ Arduino UNO + ArduinoISP สำเร็จแล้ว

เพิ่มการตั้ง-Uค่าสถานะในavrdudeคำสั่งของคุณเพื่อตั้งค่าฟิวส์ ATtiny ใด ๆ หรือทั้งหมด

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

การเลือกนาฬิกาทำในบิต [3: 0] ในฟิวส์ที่สาม ('Fuse Low Byte') ตั้งค่าดังต่อไปนี้เพื่อใช้งานคริสตัลภายนอก (8MHz หรือเร็วกว่า):

-U lfuse:w:0x6f:m

คำจำกัดความ (ฉันอนุมาน) ต้องเป็นดังนี้: [Fuse Low Byte]: [write]: [ค่า hex]: [ตั้งค่าด้วยตนเอง]

ค่าเริ่มต้นสำหรับสี่บิตสูงของไบต์นี้0110เพื่อให้ออกจาก6ใน0x6fขณะที่มันเป็นเพียงการเปลี่ยนแปลงหลักสองf(ค่าเริ่มต้นของมันคือ2)

หมายเหตุ: หากกระบวนการของคุณใช้เวลานานหรือสั้นกว่าที่คุณคาดไว้ให้ตรวจสอบพรีสเกลเลอร์นาฬิกาและคำจำกัดความของ F _ CPU


ฉันต้องการเตือนว่าฉันเพิ่งปิด AtTiny85 ของฉันโดยใช้-U lfuse:w:0x6f:mตัวเลือก avrdude ด้านบน ฉันจะต้องรีเซ็ตมันโดยใช้การตั้งค่าไฟฟ้าแรงสูง ดังนั้นคำเตือนสำหรับคน (เช่นตัวเอง) ที่พยายามรีเซ็ตฟิวส์โดยไม่ทราบว่ากำลังทำอะไรอยู่
MV

@MV คุณก่ออิฐจริง ๆ หรือไม่ใช้ XO ภายนอกเมื่อพยายามรีเซ็ตฟิวส์
damd

ไม่มีนาฬิกาภายนอกให้ใช้ การก่ออิฐหมายถึงอะไรในแง่ที่เข้มงวด?
JellicleCat

@JellicleCat หากคุณตั้งค่าฟิวส์ให้ใช้ XO ภายนอกคุณจะต้องใช้ XO ภายนอกที่ต่ออยู่กับ mcu ตั้งแต่นั้นมาเพื่อตั้งค่าฟิวส์ / โปรแกรม / รีเซ็ต การไม่ทำเช่นนั้นจะทำให้คุณรู้สึกว่า mcu ถูกปิดกั้น (~ ไม่ได้ทำงานอีกต่อไป) เพราะมันต้องการความช่วยเหลือ XO ทำงานได้แม้จะตั้งโปรแกรมผ่าน ISP
damd

Alright ถ้าฉันเข้าใจเรื่องนี้ฉันจะตั้งค่าฟิวส์ให้คาดว่าจะเป็น XO จากนั้นเพื่อคืนค่าชิปฉันใช้ Arduino เพื่อส่งคลื่นนิ่งซึ่งทำหน้าที่เป็น XO
JellicleCat

3

ลองใช้การกวดวิชาที่เกี่ยวข้องโดยกลุ่มเดียวกัน (เอ็มไอทีสูงต่ำเทค) ได้รับสิทธิในการเขียนโปรแกรม ATtiny w / Arduino 1.0

ข้อมูลสรุปอย่างย่อ: จากเมนู Tools-> Board ใน Arduino IDE เลือก ATtiny85 และความถี่ที่คุณต้องการทำงานที่ (นาฬิกาภายใน 1 หรือ 8 Mhz หรือคริสตัลภายนอก 20Mhz) จากนั้นใช้เครื่องมือ -> Burn Bootloader " ฉันเชื่อว่าการเลือกบอร์ดความเร็วที่ต้องการจะปรับเปลี่ยนวิธีการหน่วงเวลา () และฟังก์ชั่น Arduino ที่เกี่ยวข้องกับเวลาอื่น ๆ เพื่อให้สามารถซิงค์กับความเร็วสัญญาณนาฬิกาได้

ฉันประสบความสำเร็จในการใช้วิธีนี้ด้วยการใช้ชิป ATtiny84 โปรแกรมกะพริบง่ายได้รับการแก้ไขเช่นเดียวกับเวลาที่มีความละเอียดอ่อนมากขึ้นสำหรับการควบคุมพัลส์ที่ส่งไปยังเซอร์โวด้วยตนเองโดยใช้ delayMicroseconds ()


1

ดูเหมือนว่าคุณกำลังใช้ ArduinoISP ลองใช้AVR Studioavrdudeหรือตัวเลือกบรรทัดคำสั่งสำหรับ ขึ้นอยู่กับวิธีเขียน ArduinoISP มันอาจทำงานเหมือนกับ Atmel AVRISP mkII หรือคล้ายกัน


ฉันไม่คิดว่า Arduino เป็นตัวโปรแกรมเมอร์ ISP - ฉันคิดว่ามันมีส่วนหัว ISP อยู่เพื่อให้คุณสามารถเขียน bootloader ตัวใหม่ลงบน ATMega328 ใหม่ในวงจร ...
vicatcu

อ่านบทความอย่างละเอียดยิ่งขึ้นดูเหมือนว่าคุณสามารถใช้ร่าง ArduinoISP เพื่อทำสิ่งนี้ - คุณเรียนรู้สิ่งใหม่ทุกวัน! :)
vicatcu

AVR studio ใช้ได้ถ้าคุณใช้ Windows รู้ว่ามีปลั๊กอิน AVR สำหรับ Eclipse (ซึ่งแตกต่างจากปลั๊กอิน Arduino ที่รู้จักกันในชื่อ Sloeber) มีกล่องโต้ตอบฟิวส์ที่ดีอยู่ในคุณสมบัติ -> AVR แต่ใช่ OP ต้องการใช้ความถี่ "แกนกลาง" และ "เขียน Bootloader"
mckenzm

1

การตั้งค่าฟิวส์เริ่มต้นสำหรับ ATtiny85 คือ: lfuse 0x62, hfuse 0xdf, efuse 0xff สิ่งนี้ใช้ออสซิลเลเตอร์ RC ภายใน (8 MHz) กับ "หารด้วย 8" ดังนั้นนาฬิกาคือ 1 MHz

ดูhttp://www.engbedded.com/fusecalcสำหรับการตั้งค่าฟิวส์เพิ่มเติม

คุณยังสามารถใช้ avrdude โดยตรงเพื่อเปลี่ยนการตั้งค่าฟิวส์ของ ATtiny85 ของคุณแม้ว่าจะใช้ ArduinoISP เป็นโปรแกรมเมอร์

หากคุณเปลี่ยนฟิวส์ด้วยตนเองเพื่อเปลี่ยนนาฬิกาตรวจสอบให้แน่ใจว่าได้แก้ไขattiny85.build.f_cpuบรรทัดของไฟล์ [arduino_folder] \ hardware \ attiny45_85 \ boards.txt


+1 สิ่งนี้มีประโยชน์จริง ๆ โดยเฉพาะความเร็วของสัญญาณนาฬิกาที่ 1MHz ขอบคุณ
fearoffours

0

ฉันคิดว่าคุณสามารถตั้งค่าฟิวส์ด้วย ArduinoISP แต่ไม่ใช่กับ Arduino IDE แต่ใช้ avrdude ตรวจสอบลิงค์นี้ ไม่เคยทดสอบด้วยตัวเอง

บทช่วยสอนบอกอย่างชัดเจนว่าคุณสามารถใช้ Arduino UNO และฉันได้ทำการทดสอบและใช้งานได้ดังนั้นฉันสามารถยืนยันได้ดังนั้นหน้า ArduinoISP ล้าสมัยและไม่ควรเตือนคำเตือน UNO หาก UNO ของคุณมาจากชุดแรกคุณอาจมี bootloader ที่ผิดพลาดคุณจะต้อง reflash bootloader ตรวจสอบหน้านี้สำหรับข้อมูลเพิ่มเติม (เพิกเฉยต่อหมายเลขซีเรียล UNO ของฉันทั้งหมดไม่ได้มาจากซีรี่ส์นั้นและมีปัญหา)

ไลบรารีหลักที่โอนย้ายที่คุณดาวน์โหลดจากบทช่วยสอนถูกเขียนขึ้นเพื่อใช้ Oscillator ภายใน 1MHz (ยืนยันจากไฟล์ boards.txt) ดังนั้นอาจมีปัญหาการปรับสีอาจอยู่ในไลบรารีหลักที่มีพอร์ตหรือในรหัสของคุณ

ขอแสดงความนับถือ


0
  1. เลือกบอร์ด ATTiny จาก "ผู้จัดการบอร์ด" ที่มี ATTiny85 นี่คือในเมนู "เครื่องมือ" ฉันคิดว่านี่รวมถึง "16MHz internal PLL" แล้ว (คุณสามารถติดตั้งได้จากhttp://drazzy.com/package_drazzy.com_index.json )

  2. เลือก ATTiny85 อย่างชัดเจนหากต้องการ

  3. เลือกนาฬิกา จนกว่าคุณจะรู้มากขึ้นเลือกนาฬิกาภายใน

  4. คลิก "เขียน Bootloader" เป็นรายการเมนู

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.