สารบัญ:

ATMega1284P แป้นเหยียบกีต้าร์และดนตรี: 6 ขั้นตอน (พร้อมรูปภาพ)
ATMega1284P แป้นเหยียบกีต้าร์และดนตรี: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ATMega1284P แป้นเหยียบกีต้าร์และดนตรี: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ATMega1284P แป้นเหยียบกีต้าร์และดนตรี: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Микроконтроллеры ATMEL - ATmega1284P-AU 2024, กรกฎาคม
Anonim
ATMega1284P แป้นเหยียบกีต้าร์และดนตรี
ATMega1284P แป้นเหยียบกีต้าร์และดนตรี

ฉันได้ย้าย Arduino Uno ATMega328 Pedalshield (ตามที่พัฒนาโดย Electrosmash และบางส่วนจากการทำงานที่ Open Music Lab) ไปยัง ATMega1284P ซึ่งมี RAM มากกว่า Uno ถึงแปดเท่า (16kB เทียบกับ 2kB) ประโยชน์ที่ไม่คาดคิดเพิ่มเติมคือ บิลด์ Mega1284 มีส่วนประกอบเสียงที่ต่ำกว่ามาก - เท่าที่เมื่อฉันเปรียบเทียบ Uno และ Mega1284 โดยใช้วงจรสนับสนุนเดียวกัน ไม่มีเหตุผลที่จะอธิบาย Uno ว่า "เสียงดัง" และ Mega1284 เป็น " เงียบ". RAM ที่ใหญ่ขึ้นหมายความว่าสามารถรับเอฟเฟกต์การหน่วงเวลาได้นานขึ้น - และนั่นแสดงให้เห็นโดยตัวอย่างร่าง Arduino ที่ฉันรวมไว้ เสียงหายใจพื้นหลังเมื่อใช้เอฟเฟกต์ Tremelo (เกือบ) หายไปกับ ATMega1284

การเปรียบเทียบไมโครโปรเซสเซอร์ Atmel AVR สามตัว ได้แก่ 328P ซึ่งเป็น Uno, 2560P คือ Mega2560 และ Mega1284 แสดงให้เห็นว่าตัวหลังมี RAM มากที่สุดในสามตัว:

มุมมอง 328P 1284P 2560P RAM 2k 16k 8k แฟลช 32k 128k 256k EEPROM 1k 4k 4k UART 1 2 4 IO พิน 23 32 86 อินเตอร์รัปต์ 2 3 8 อนาล็อกใน 6 8 16

ฉันเริ่มต้นด้วยการใช้ pedalSHIELD แบบใช้ Uno แบบ bread-boarding เช่นเดียวกับในข้อกำหนด Electrosmash แต่ฉันไม่มี RRO OpAmp เดียวกันตามที่ระบุ เป็นผลให้ฉันจบลงด้วยวงจรที่ฉันคิดว่าให้ผลลัพธ์ที่ยอมรับได้ รายละเอียดของ Uno เวอร์ชันนี้มีอยู่ในภาคผนวก 2

วงจรเดียวกันนี้ถูกย้ายไปยัง ATMega1284 นอกเหนือจากการเปลี่ยนแปลงที่ไม่จำเป็นอย่างน่าประหลาดใจ เช่น การกำหนดสวิตช์และ LED ให้กับพอร์ตอื่น และการจัดสรร 12,000 kB แทน RAM 2, 000 kB สำหรับบัฟเฟอร์การหน่วงเวลาเท่านั้น ต้องทำการเปลี่ยนแปลงที่สำคัญอย่างหนึ่งในซอร์สโค้ด นั่นคือการเปลี่ยนเอาต์พุต Timer1/PWM OC1A และ OC1B จากพอร์ต B บน Uno เป็น Port D (PD5 และ PD4) บน ATMega1284

ต่อมาฉันค้นพบการดัดแปลงที่ยอดเยี่ยมของวงจรอิเล็กโตรสแมชโดย Paul Gallagher และหลังจากการทดสอบ นี่คือวงจรที่ฉันจะนำเสนอที่นี่ - แต่ยังมีการดัดแปลงด้วย: การแทนที่ Uno ด้วย Mega1284 โดยใช้ Texas Instruments TLC2272 เป็น OpAmp และ เนื่องจากประสิทธิภาพเสียงที่ยอดเยี่ยมของ Mega1284 ฉันจึงสามารถยกระดับความถี่ตัวกรองความถี่ต่ำผ่านได้

สิ่งสำคัญที่ควรทราบคือ แม้ว่าจะมีบอร์ดพัฒนาสำหรับ ATMega1284 (Github: MCUdude MightyCore) แต่การซื้อชิปเปล่า (ไม่มี bootloader) ก็เป็นแนวทางง่ายๆ (ซื้อเวอร์ชัน PDIP ซึ่งเป็น bread-board และ strip-board เป็นมิตร) จากนั้นโหลด Mark Pendrith fork ของ Maniacbug Mighty-1284p Core Optiboot bootloader หรือ MCUdude Mightycore โดยใช้ Uno เป็นโปรแกรมเมอร์ ISP แล้วโหลดภาพสเก็ตช์อีกครั้งผ่าน Uno ไปยัง AtMega1284 รายละเอียดและลิงค์สำหรับกระบวนการนี้มีให้ในภาคผนวก 1

ฉันต้องการรับทราบแหล่งข้อมูลที่สำคัญที่สุดสามแหล่งที่สามารถหาข้อมูลเพิ่มเติมได้และจะให้ลิงก์ไปยังเว็บไซต์ของพวกเขาและส่วนท้ายของบทความนี้: Electrosmash, Open Music Labs และ Tardate/Paul Gallagher

ขั้นตอนที่ 1: รายการชิ้นส่วน

ATMega1284P (รุ่นแพ็คเกจ PDIP 40 พิน) Arduino Uno R3 (ใช้เป็น ISP เพื่อโอนบูตโหลดเดอร์และสเก็ตช์ไปยัง ATMega1284) OpAmp TLC2272 (หรือ RRIO ที่คล้ายกัน (Rail to Rail Input and Output) OpAmp เช่น MCP6002, LMC6482, TL972) LED สีแดง 16 MHz คริสตัล 2 x 27 pF ตัวเก็บประจุ ตัวเก็บประจุ 5 x 6n8 ตัวเก็บประจุ 270 pF ตัวเก็บประจุ 4 x 100n ตัวเก็บประจุอิเล็กโทรไลต์ 2 x 10uF 16v 6 x 4k7 ตัวต้านทาน 100k ตัวต้านทาน 2 x 1M ตัวต้านทาน 470 โอห์ม ตัวต้านทาน 1M2 ตัวต้านทาน 100k โพเทนชิโอมิเตอร์ 3 x สวิตช์ปุ่มกด (หนึ่ง ของเหล่านี้ควรแทนที่ด้วยสวิตช์เท้าเหยียบ 3 ขั้ว 2 ทางหากกล่องเอฟเฟกต์จะใช้สำหรับงานสด)

ขั้นตอนที่ 2: การก่อสร้าง

การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง
การก่อสร้าง

Schematic 1 ให้วงจรที่ใช้และ Breadboard 1 คือการแสดงทางกายภาพ (Fritzing 1) โดยที่ Photo 1 เป็นวงจร bread-board ที่เกิดขึ้นจริงในการดำเนินงาน อาจเป็นประโยชน์ที่จะมีโพเทนชิออมิเตอร์เป็นเครื่องผสมสำหรับสัญญาณแห้ง (เท่ากับอินพุต) และสัญญาณเปียก (หลังจากประมวลผลโดย MCU) และ Schematic 2, Breadboard 2 และ Photo 2 (แสดงรายการในภาคผนวก 2) ให้ รายละเอียดวงจรของวงจรที่สร้างขึ้นก่อนหน้านี้ซึ่งรวมเอาอินพุตไปยังเครื่องผสมสัญญาณเอาท์พุต ดูที่ Open Music Labs StompBox สำหรับการใช้งานมิกเซอร์อื่นโดยใช้ OpAmps สี่ตัว

ขั้นตอนอินพุตและเอาต์พุตของ OpAmp: เป็นสิ่งสำคัญที่ต้องใช้ RRO หรือโดยเฉพาะอย่างยิ่ง RRIO OpAmp เนื่องจากการแกว่งของแรงดันไฟฟ้าขนาดใหญ่ที่เอาต์พุต OpAmp ไปยัง ADC ของ ATMega1284 รายการชิ้นส่วนประกอบด้วย OpAmp หลายประเภท โพเทนชิออมิเตอร์ 100k ใช้เพื่อปรับระดับเกนอินพุทให้อยู่ในระดับที่ต่ำกว่าการบิดเบือน และยังใช้เพื่อปรับความไวอินพุตสำหรับแหล่งอินพุตอื่นที่ไม่ใช่กีตาร์ เช่น เครื่องเล่นเพลง สเตจเอาท์พุต OpAmp มีตัวกรอง RC ลำดับที่สูงกว่าเพื่อลบสัญญาณรบกวน MCU ที่สร้างแบบดิจิทัลออกจากสตรีมเสียง

เวที ADC: ADC ได้รับการกำหนดค่าให้อ่านผ่านการขัดจังหวะตลอดเวลา โปรดทราบว่าควรเชื่อมต่อตัวเก็บประจุ 100nF ระหว่างพิน AREF ของ ATMega1284 และกราวด์เพื่อลดเสียงรบกวนเนื่องจากแหล่ง Vcc ภายในถูกใช้เป็นแรงดันอ้างอิง - อย่าเชื่อมต่อพิน AREF กับ +5 โวลต์โดยตรง!

DAC PWM Stage: เนื่องจาก ATMega1284 ไม่มี DAC ของตัวเอง สัญญาณเสียงที่ส่งออกจึงถูกสร้างขึ้นโดยใช้การปรับความกว้างพัลส์ของตัวกรอง RC เอาต์พุต PWM สองตัวบน PD4 และ PD5 ถูกตั้งค่าเป็นไบต์สูงและต่ำของเอาต์พุตเสียง และผสมกับตัวต้านทานสองตัว (4k7 และ 1M2) ในอัตราส่วน 1:256 (ไบต์ต่ำและไบต์สูง) ซึ่งจะสร้างเอาต์พุตเสียง. การทดลองกับตัวต้านทานคู่อื่น ๆ เช่นคู่ 3k9 1M ohm ที่ใช้โดย Open Music Labs ใน StompBox อาจคุ้มค่า

ขั้นตอนที่ 3: ซอฟต์แวร์

ซอฟต์แวร์นี้ใช้ภาพสเก็ตช์ไฟฟ้า และตัวอย่างที่รวมไว้ (pedalshield1284delay.ino) ได้รับการดัดแปลงจากภาพร่างการหน่วงเวลา Uno สวิตช์และไฟ LED บางตัวถูกย้ายไปยังพอร์ตอื่นนอกเหนือจากที่ใช้โดยโปรแกรมเมอร์ ISP (SCLK, MISO, MOSI และรีเซ็ต) บัฟเฟอร์การหน่วงเวลาเพิ่มขึ้นจาก 2,000 ไบต์เป็น 12000 ไบต์ และ PortD ถูกตั้งค่าเป็น เอาต์พุตสำหรับสัญญาณ PWM สองตัว แม้ว่าบัฟเฟอร์การหน่วงเวลาจะเพิ่มขึ้น แต่ร่างก็ยังใช้เพียงประมาณ 70% ของ RAM 1284 ที่มีอยู่

ตัวอย่างอื่นๆ เช่น octaver หรือ tremolo จากเว็บไซต์ electrosmash สำหรับ pedalSHIELD Uno สามารถปรับให้ใช้กับ Mega1284 ได้โดยการเปลี่ยนสามส่วนในโค้ด:

(1) เปลี่ยน DDRB |= ((PWM_QTY << 1) | 0x02); เป็น DDRD |= 0x30;// การเปลี่ยนแปลงข้างต้นเป็นเพียงการเปลี่ยนแปลงรหัสที่จำเป็นเท่านั้น // เมื่อย้ายจาก AtMega328 ไปยัง ATMega1284

(2) เปลี่ยน #define LED 13 #define FOOTSWITCH 12 #define TOGGLE 2 #define PUSHBUTON_1 A5 #define PUSHBUTTON_2 A4

ถึง

#define LED PB0 #define สวิตช์เท้า PB1 #define PUSHBUTTON_1 A5 # กำหนด PUSHBUTTON_2 A4

(3) เปลี่ยนโหมดพิน (FOOTSWITCH, INPUT_PULLUP); โหมดพิน (TOGGLE, INPUT_PULLUP); โหมดพิน (PUSHBUTTON_1, INPUT_PULLUP); โหมดพิน (PUSHBUTTON_2, INPUT_PULLUP); โหมดพิน (LED, เอาต์พุต)

ถึง

โหมดพิน (FOOTSWITCH, INPUT_PULLUP); โหมดพิน (PUSHBUTTON_1, INPUT_PULLUP); โหมดพิน (PUSHBUTTON_2, INPUT_PULLUP); โหมดพิน (LED, เอาต์พุต);

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

หากต้องการเปลี่ยนการหน่วงเวลาเป็นเอฟเฟกต์เสียงสะท้อน (เพิ่มการทำซ้ำ) ให้เปลี่ยนบรรทัด:

DelayBuffer [DelayCounter] = ADC_high;

ถึง

DelayBuffer[DelayCounter] = (ADC_high + (DelayBuffer [DelayCounter]))>>1;

สวิตช์เท้าควรเป็นสวิตช์สองทางแบบสามขั้ว และต้องเชื่อมต่อตามที่อธิบายไว้ในเว็บไซต์ของ electrosmash

ขั้นตอนที่ 4: ลิงค์

ลิงค์
ลิงค์

(1) อิเล็กโตรสแมช:

(2) เปิดห้องทดลองดนตรี:

(3) พอล กัลลาเกอร์:

(4) 1284 บูตโหลดเดอร์:

(5) ATmega1284 8 บิต AVR ไมโครคอนโทรลเลอร์:

ElectrosmashOpenlabs เพลงPaul Gallagher1284 Bootloader 11284 Bootloader 2ATmega1284 8bit AVR Microcontroller

ขั้นตอนที่ 5: ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P

ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P
ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P
ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P
ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P
ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P
ภาคผนวก 1 การเขียนโปรแกรม ATMega1284P

มีบางเว็บไซต์ที่ให้คำอธิบายที่ดีเกี่ยวกับวิธีการตั้งโปรแกรมชิป ATMega1284 เปล่าสำหรับใช้กับ Arduino IDE กระบวนการนี้โดยพื้นฐานแล้วมีดังนี้: (1) ติดตั้งส้อม Mark Pendrith ของ Maniacbug Mighty-1284p Core Optiboot bootloader ลงใน Arduino IDE (2) ต่อ ATMega1284 บนเขียงหั่นขนมที่มีการกำหนดค่าขั้นต่ำที่เป็นคริสตัล 16 MHz, ตัวเก็บประจุ 2 x 22 pF ที่กราวด์ทั้งสองด้านของคริสตัล เชื่อมต่อพินกราวด์ทั้งสองเข้าด้วยกัน (พิน 11 และ 31) จากนั้น กับกราวด์ Arduino Uno เชื่อมต่อ Vcc และ AVcc เข้าด้วยกัน (พิน 10 และ 30) จากนั้นไปที่ Uno +5v จากนั้นเชื่อมต่อพินรีเซ็ต 9 กับพิน Uno D10, พิน MISO 7 กับ UNO D12, MOSI พิน 8 กับ Uno D11 และ SCLK pin 7 กับพิน Uno D13 (3) เชื่อมต่อ Uno กับ Arduino IDE และโหลด Arduino ตัวอย่างร่างเป็น ISP ลงใน Uno (4) ตอนนี้เลือก 1284 "maniac" optiboot board อันทรงพลังแล้วเลือกตัวเลือก Burn bootloader (5) จากนั้นเลือกภาพร่างการหน่วงเวลา 1284 ที่ให้ไว้ที่นี่เป็นตัวอย่างและอัปโหลดโดยใช้ตัวเลือก Uno เป็นโปรแกรมเมอร์ในเมนูภาพร่าง

ลิงค์ที่อธิบายกระบวนการโดยละเอียดเพิ่มเติมคือ:

การใช้ ATmega1284 กับ Arduino IDEArduino Mightycore สำหรับ AVR ที่เป็นมิตรกับบอร์ดบอร์ดขนาดใหญ่การสร้างต้นแบบ ATMega1284p Arduino ATmega1284p bootloader

ขั้นตอนที่ 6: ภาคผนวก 2 Arduino Uno PedalSHIELD Variation

ภาคผนวก 2 Arduino Uno PedalSHIELD Variation
ภาคผนวก 2 Arduino Uno PedalSHIELD Variation
ภาคผนวก 2 Arduino Uno PedalSHIELD Variation
ภาคผนวก 2 Arduino Uno PedalSHIELD Variation
ภาคผนวก 2 Arduino Uno PedalSHIELD Variation
ภาคผนวก 2 Arduino Uno PedalSHIELD Variation

Schematic3, Breadboard3 และ Photo3 ให้รายละเอียดของวงจร Uno-based ที่นำหน้า AtMega1284 build

อาจเป็นประโยชน์ที่จะมีโพเทนชิออมิเตอร์เป็นเครื่องผสมสำหรับสัญญาณแห้ง (เท่ากับอินพุต) และสัญญาณเปียก (หลังจากประมวลผลโดย MCU) และ Schematic 2, Breadboard 2 และ Photo 2 ให้รายละเอียดวงจรของวงจรที่สร้างขึ้นก่อนหน้านี้ ซึ่งรวมเอาอินพุตดังกล่าวเข้ากับตัวผสมเอาต์พุต ดูที่ Open Music Labs StompBox สำหรับการใช้งานมิกเซอร์อื่นโดยใช้ OpAmps สี่ตัว

แนะนำ: