สารบัญ:
- ขั้นตอนที่ 1: วัสดุและการก่อสร้าง
- ขั้นตอนที่ 2: บัดกรี AVR กับ LED และลำโพง
- ขั้นตอนที่ 3: การเขียนโปรแกรม Attiny13a
- ขั้นตอนที่ 4: การสร้างเฟิร์มแวร์สำหรับ Marioman
- ขั้นตอนที่ 5: ปล่อยให้ Marioman Loose
วีดีโอ: กระพริบตา ร้องเพลง Marioman 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:09
ใช้ attiny13a ไฟ LED สองดวง และลำโพงการ์ดอวยพรเพื่อสร้าง Marioman ที่กะพริบและเล่นเพลงธีม Super Mario Brothers นี่อาจเป็นโครงการราคาประหยัดที่ง่ายสำหรับทุกคนที่กำลังมองหาวิธีสนุก ๆ ในการเจาะเข้าสู่การเขียนโปรแกรม AVR! โน้ตของเพลงถูกสร้างขึ้นโดยคลื่นสี่เหลี่ยมที่ส่งออกบนขาเดียวของไมโครคอนโทรลเลอร์ AVR ไฟ LED ที่สลับกันในแต่ละโน้ตจะเชื่อมต่อกับ 2 พินของชิปตัวเดียวกัน
ขั้นตอนที่ 1: วัสดุและการก่อสร้าง
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: $1.40
- ไฟ LED 2 ดวง - ไฟ LED ใด ๆ จะทำ
- แบตเตอรี่ลิเธียมแบบเหรียญ 1 ก้อน
www.sparkfun.com/commerce/product_info.php?products_id=338ค่าใช้จ่าย: $2.00
ที่ใส่เหรียญ 1 อัน
www.sparkfun.com/commerce/product_info.php?products_id=8822ต้นทุน: $1.25
1 ลำโพงขนาดเล็กจากการ์ดอวยพรดนตรี
ต้นทุนรวมของวัสดุ ~ $5ไฟ LED สองดวงถูกต่อเข้ากับหมุดสองตัวของ attiny13A แต่ละตัวโดยตรง LED แต่ละตัวใช้พินสองตัว พินที่สองถูกตั้งค่าให้ต่ำเพื่อใช้เป็นการเชื่อมต่อกราวด์ ขีดจำกัดปัจจุบันของพิน I/O บน AVR จะป้องกันไม่ให้ไฟ LED ดึงมากเกินไป ดังนั้นจึงไม่จำเป็นต้องเชื่อมต่อตัวต้านทาน ซีรีส์ ลำโพงที่ใช้เป็นเรื่องปกติของหนึ่งในการ์ดอวยพรดนตรี ลำโพงขนาดเล็กใดๆ ก็ตาม เนื่องจากเป็นเอาต์พุตเสียงคลื่นสี่เหลี่ยม ไม่ต้องกังวลเกี่ยวกับการขับรถของลำโพงหรือคุณภาพเสียงมากนัก
ขั้นตอนที่ 2: บัดกรี AVR กับ LED และลำโพง
เพื่อให้ไฟ LED เอื้อมมือออกไปเหมือนแขนขาข้างหนึ่งงอเหนือ AVR แต่ละด้าน การวาง AVR ด้วยวิธีนี้ทำให้ง่ายต่อการเชื่อมต่อกับลำโพง (ภาพที่สอง) เนื่องจากการเชื่อมต่ออยู่ที่หมุดด้านล่างทั้งสองข้าง เพื่อความสวยงามที่คุณต้องการให้ด้านหน้าของชิปหันออก ดังนั้น ตรวจสอบให้แน่ใจว่าลำโพงหันไปทางเดียวกันเมื่อ มันถูกแนบ
ขั้นตอนที่ 3: การเขียนโปรแกรม Attiny13a
มีตัวเลือกมากมายสำหรับการเขียนโปรแกรม AVR สำหรับโครงการนี้ USBtiny ถูกใช้ซึ่งมีให้ใช้งานเป็นชุดจากไซต์ของ ladyadahttps://www.ladyada.net/make/usbtinyisp/index.htmlในการเชื่อมต่อ AVR กับโปรแกรมเมอร์ คุณสามารถ ต่อสายไฟเข้ากับเต้ารับตัวเมียแล้วเสียบเข้ากับเขียงหั่นขนมหรือควรซื้ออะแดปเตอร์เขียนโปรแกรม AVR ราคาถูกแบบนี้.
ขั้นตอนที่ 4: การสร้างเฟิร์มแวร์สำหรับ Marioman
attiny13A มีแฟลชที่ตั้งโปรแกรมได้ 1K และ SRAM ขนาด 64 ไบต์ ไฟล์ tar ที่แนบมามีไฟล์ต้นฉบับรวมถึงเฟิร์มแวร์ที่คอมไพล์สำหรับการดาวน์โหลด อาร์เรย์สามอาร์เรย์ในรหัส c ถูกใช้เพื่อสร้างเพลง
- freq - ความถี่ของโน้ตแต่ละตัว
- length - ความยาวของแต่ละโน้ต
- ล่าช้า - หยุดชั่วคราวระหว่างโน้ตแต่ละตัว
อาร์เรย์ความถี่ไม่มีความถี่จริง แต่เป็นค่าที่จะใส่ในการลงทะเบียน TTCROB เพื่อสร้างคลื่นสี่เหลี่ยมจากพิน PB0 ต่อไปนี้เป็นข้อมูลสรุปโดยย่อของการคำนวณและการกำหนดค่าพินสำหรับการสร้างคลื่นสี่เหลี่ยม:
- attiny13A มีออสซิลเลเตอร์ภายในตั้งไว้ที่ 9.6MHz
- นาฬิกาภายในสำหรับ IO คือออสซิลเลเตอร์หารด้วย 8 หรือ 1.2MHz
- ตัวจับเวลาภายในถูกตั้งค่าในการลงทะเบียน 8 บิตเพื่อนับรอบนาฬิกาทุกรอบด้วยพรีสเกล 8
- ส่งผลให้หนึ่งขีดเท่ากับ 1 / (1.2MHz / 8) =.006667ms
- attiny13A ได้รับการกำหนดค่าเพื่อเปรียบเทียบสิ่งที่อยู่ในรีจิสเตอร์ 8 บิต TCCR0B กับตัวจับเวลาและสลับพินเมื่อจับคู่
- ตัวอย่างเช่น เพื่อสร้างคลื่นสี่เหลี่ยมที่ 524Hz (หนึ่งอ็อกเทฟเหนือ C กลาง) ซึ่งมีคาบ 1.908ms
1.908ms = 286 นาฬิกาติ๊ก (1.908/.0067) หาร 286 ด้วย 2 เพื่อสลับพินที่ t/2 (286/2 = 143) ใส่ 143 ในการลงทะเบียน TTCR0B เพื่อสร้างบันทึกย่อนี้ นี่คือรหัสทั้งหมดที่จำเป็น ในการตั้งค่าตัวจับเวลา ให้เปรียบเทียบและส่งออกคลื่นสี่เหลี่ยม:
TCCR0A |= (1<<WGM01); // กำหนดค่าตัวจับเวลา 1 สำหรับโหมด CTC TCCR0A |= (1<<COM0A0); // สลับ OC0A เมื่อเปรียบเทียบการแข่งขัน TCCR0B |= (1<<CS01); // clk/8 พรีสเกล TTCR0B = 143; // สร้างคลื่นสี่เหลี่ยมที่ 524Hzในการหน่วงเวลาเสียงและการหยุดชั่วคราวระหว่างกัน มีการใช้ฟังก์ชันหน่วงเวลาอย่างง่าย
โมฆะสลีป (int ms) { int cnt; สำหรับ (cnt=0; cnt<(ms); cnt++) { int i = 150; ในขณะที่ (i--) { _asm ("NOP"); } }}นับถอยหลังจาก 150 โดยที่แต่ละรอบ NOP จะอยู่ที่ประมาณ.006667 มิลลิวินาที สิ่งสุดท้ายที่โค้ดทำคือวนซ้ำในอาร์เรย์ สร้างเพลง และกะพริบไฟ LED สองดวง การดำเนินการนี้ทำแบบวนซ้ำต่อเนื่องกันโดยใช้โค้ดต่อไปนี้
const uint8_t freq PROGMEM = { … data };const uint8_t length PROGMEM = { … data };const uint8_t delay PROGMEM = { … data };… while (1) { for (cnt=0; cnt< 156; cnt++) { OCR0A=pgm_read_byte(&freq[cnt]); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); สลีป(pgm_read_byte(&ความยาว[cnt])); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); // หยุดจับเวลา TCCR0B = 0; สลีป (pgm_read_word(&delay[cnt])); // เริ่มจับเวลา TCCR0B |= (1<<CS01); // clk/8 พรีสเกล }}มี 156 องค์ประกอบในอาร์เรย์ความถี่/ความยาว/การหน่วงเวลา ลูปนี้จะข้ามผ่านพวกมัน พิน PB3 และ PB4 ถูกสลับกันดังนั้นพวกเขาจะสลับกับโน้ตแต่ละตัว การนอนหลับครั้งแรกคือความยาวของโน้ตที่เราเล่นหลังจากตั้งค่าการลงทะเบียน OCR0A เป็นค่าที่เหมาะสม การนอนหลับครั้งที่สองเป็นการหยุดชั่วคราวระหว่างโน้ตที่เราเล่น ในโค้ดด้านบน คุณอาจสังเกตเห็นสองฟังก์ชัน pgm_read_byte() และ pgm_read_word() รวมถึงคีย์เวิร์ด PROGMEM ด้วยชิปฝังตัวเช่น attiny จำนวน SRAM นั้นจำกัดมาก ในกรณีนี้มีเพียง 64 ไบต์เท่านั้น อาร์เรย์ที่เราใช้สำหรับข้อมูลความถี่/ความล่าช้า/ความยาวทั้งหมดมีขนาดใหญ่กว่า 64 ไบต์มาก ดังนั้นจึงไม่สามารถโหลดลงในหน่วยความจำได้ โดยการใช้คำสั่งพิเศษ PROGMEM avr-gcc อาร์เรย์ข้อมูลขนาดใหญ่เหล่านี้จะป้องกันไม่ให้โหลดเข้าสู่หน่วยความจำ แต่จะอ่านจากแฟลชแทน
ขั้นตอนที่ 5: ปล่อยให้ Marioman Loose
วิดีโอด้านบนแสดงการทำงานของ Marioman การใช้พลังงานเฉลี่ยอยู่ที่ประมาณ 25mA เพื่อให้เขาสามารถกระพริบตาและทำเสียงได้ประมาณ 10 ชั่วโมงก่อนที่จะระบายเซลล์ลิเธียมแบบเหรียญ วิธีเดียวที่จะเปิดและปิดเขาคือการถอดแบตเตอรี่เซลล์แบบเหรียญ แบบที่ทนทานที่ระบุไว้ในวัสดุคือ เหมาะอย่างยิ่งสำหรับสิ่งนี้ สามารถเพิ่มสวิตช์ได้ แต่มีบางอย่างที่ต้องพูดเพื่อให้ง่าย
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
ร้องเพลง Arduino Nutcracker: 8 ขั้นตอน
ร้องเพลง Arduino Nutcracker: แคร็กเกอร์นี้เปิดปากตามเสียงอินพุต สามารถทำได้ง่ายๆ ภายใน 3 ชั่วโมงสำหรับผู้เริ่มต้นที่จะเปลี่ยนจากกองชิ้นส่วนไปจนถึงแคร็กเกอร์ร้องเพลง สำหรับโครงการนี้ คุณจะต้องใช้ Nutcracker ที่มีปากที่ขยับได้ ต้นแบบ