Effektpedal för elgitarr

Relevanta dokument
Växtviskaren EITF11 Digitala projekt VT15, I12

Digitala Projekt(EITF40) - Larm

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

ETSA01 Digitala Projekt (I) VT- 13. Projektarbete AC Handledare Bertil Lindvall

Digitala Projekt (EITF11)

Guitar tuner Digitala Projekt (EITF40)

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

DIGITALA PROJEKT Väderstation

Projektrapport - Feststation

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Digitala Projekt(EITF40) - Larm

Pulsmätare med varningsindikatorer

Rafiki Wa Kupanda. EITF11, Digitala projekt VT18. Linnea Håkansson, Anton Gunneberg, Ruben Schultz

TEMPERATURMÄTARE MED GRAFRITARE

Projektrapport i Digitala System

A-del motsvarande KS1

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Digitala Projekt (EITF11) Larmanläggning

Att använda pekare i. C-kod

Feeding Daisy. EITF11 Lunds Tekniska Högskola. Grupp 12: Pontus Akervall Louise Landare Anton Schölin. En automatisk blomvattnare

Digitala Projekt (EITF11) Hemlarm

Projektrapport - Roterande digital LED-klocka

Väderstation. Digitala Projekt EITF11 Institutionen för Elektro- och Informationsteknik Lunds Tekniska Högskola

LOOKY LUKE. Caroline Hellström och Ville Orlander Arvola Industriell ekonomi I10. - Att välja en lyckosam väg EITF11 Digitala projekt

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Thunder s Truck projektrapport

D/A- och A/D-omvandlarmodul MOD687-31

Enchipsdatorns gränssnitt mot den analoga omvärlden

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

Lunds Tekniska Högskola Elektro- och informationsteknik Digitala projekt (EITF11)

LTH. EITF11- Digitalaprojekt. Projektrapport WEB

A/D D/A omvandling. Lars Wallman. Lunds Universitet / LTH / Institutionen för Mätteknik och Industriell Elektroteknik

DIGITALA PROJEKT (EITF40) Fartmätare

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

RAPPORT: DIGITALA PROJEKT

2E1112 Elektrisk mätteknik

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Op-förstärkarens grundkopplingar. Del 2, växelspänningsförstärkning.

High Core Remote Car X8000 Cool

2E1112 Elektrisk mätteknik

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

EITF40 - RFID-terminal. Joakim Marculescu (dt08jm6), Eric Johansson (dt08ej6)

Elektro och Informationsteknik LTH. Laboration 6 A/D- och D/A-omvandling. Elektronik för D ETIA01

JOFEN-Prototypes. Målsökande pansarvagn. Projektarbete i Kursen EITA15. Jonatan Claesson, Olle Jonasson, Felix Rödén, Edvin Rossi & Nils Olén

Tentamen i Signaler och kommunikation, ETT080

Enchipsdatorns gränssnitt mot den analoga omvärlden

LEU240 Mikrodatorsystem Laboration 2: Ett komplett avbrottsstyrt system med in- och utenheter

Microprocessor / Microcontroller

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

1 Bakgrund 4. 2 Kravspecifikation Definitioner Grundläggande krav Användarfall 5

Linjeföljare Digitala projekt Johan Engström e02je Henrik Persson e02hp

Grundläggande A/D- och D/A-omvandling. 1 Inledning. 2 Digital/analog(D/A)-omvandling

Jan Babor och Oscar Ågren Handledare: Bertil Lindvall 5/16/2011

WALL E. WALL EVADER EDI021 DIGITALA PROJEKT

AD-DA-omvandlare. Mätteknik. Ville Jalkanen. 1

Rapport i Digitala Projekt (EDI021)

Rapportsammanfattning. Optima Sous Vide

LABORATIONSINSTRUKTION DIGITAL REGLERTEKNIK. Lab nr. 3 DIGITAL PI-REGLERING AV FÖRSTA ORDNINGENS PROCESS

Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia

Projekt EITA15. Väckarklocka. LTH Ingenjörshögskolan vid Campus Helsingborg Datateknik

Pulsmätare Digitala Projekt EITF11

Guitar Tuner EITF11 Digitala Projekt, Projektrapport Elektro- och informationsteknik

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Digitala projekt rapport

Assistent: Cecilia Askman Laborationen utfördes: 7 februari 2000

Tentamen i Krets- och mätteknik, fk - ETEF15

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Projektlaboration 4, synkronisering av klockan

/* * dancing3.c * * Created: :53:20 * Author: digpi10 */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.

Laboration 5 C-programmering på AVR TSEA57 Datorteknik I

Skizz till en enkel databas

Rapport Digitala Projekt EITF Grupp 12 Elin Blomstergren, Victor Sundgren Handledare: Bertil Lindvall. Fyra i rad

EITF11: Bandkanon Grp 05

Digitalt eller Analogt

Bilen som inte kan krocka

Blinkande discogolv. Lunds Tekniska Högskola, LTH Elektro- och informationsteknik. EITF11 Digitala Projekt VT 2014

Systemkonstruktion SERIEKOMMUNIKATION

Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006

Granska befintlig kod och kommentarer Testa loopbackfunktionen

(Lösningsförslag finns sist i denna fil.)

Digitala Projekt(EITF40) Robert Linjeföljaren

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

EDI022. Digitala Projekt. Rapport. Björn Åkesson 5/20/2011

Elektronik. Viktor Öwall, Digital ASIC Group, Dept. of Electroscience, Lund University, Sweden-

Liftmaestro. Lunds Tekniska Högskola Elektro- och informationsteknik. Olle Gemfors, I13 Dayanand Sagar, I13 Mattias Wendler, I13

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

4 Laboration 4. Brus och termo-emk

Digitalteknik: CoolRunner-II CPLD Starter Kit

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

Analogt och Digital. Viktor Öwall. Elektronik

Voltmeter EITF11 LUNDS TEKNISKA HÖGSKOLA Grupp 3 Timmy Andersson Jesper Tempel Christoffer Lundgren

Transkript:

EITF11 - Digitala Projekt Effektpedal för elgitarr Handledare: Bertil Lindvall Ivan Rimac (I05) Jimmy Lundberg (I08) 2011-05-10

Contents Bakgrund... 3 Kravspecifikation... 3 Kravspecifikation Effektpedal... 3 Systemet innehåller:... 3 Mål... 4 Användning... 4 Hårdvara... 4 Mjukvara... 5 Resultat... 7 Appendix A Källkod... 8

Bakgrund Detta projekt ingår i kursen EITF11 Digitala projekt. Under sju veckors tid ska vi jobba med ett digitalt projekt som vi själva väljer. Vi har valt ett projekt som går ut på att ta fram en prototyp av en effektpedal för elgitarr. Pedalen ska ta in analogt ljud och behandla den digitalt för att sedan skicka ut analogt ljud med en förhöjd frekvens. Frekvenshöjningens storlek beror på läget hos pedalen. Frekvensen på insignalen från gitarren är ca 80-1300 Hz. I detta projekt kommer vi endast att kunna ta fram en väldigt primitiv prototyp. Tid, pengar och kunskap är begränsad och detta kommer i sin tur att påverka kvalitén på slutresultatet. Syftet med projektet är därför i huvudsak att vi ska lära oss hur man genomför ett mindre digitalt projekt och få ökad kunskap om de tekniker som används i denna typ av projekt. Kravspecifikation Kravspecifikation Effektpedal Pedalen ska ta en analog insignal från en elgitarr och beroende på pedalens läge ska pedalen skicka ut samma signal eller en med högre frekvens. Utsignalen ska höja frekvensen på insignalen med 0 4 ggr. För att göra detta behövs A/D-omvandlare för insignalen från gitarren, D/A-omvandlare för utsignalen från pedalen till en förstärkare. Ett sätt att mäta pedalens läge, samt omvandla detta värde till en digital signal (då den inte redan är det). Systemet innehåller: 1 mikroprocessor (AVR atmega16) 2 insignaler, gitarrens ljud, samt pedalens läge 1 utsignal, ljud som ska skickas till en förstärkare 2 kontakter från gitarr input och output till förstärkare 1 JTAG för att föra över vårt program till mikroprocessorn Outputens kvalitet avgörs av frekvensen samt upplösningen på A/D- och D/A-omvandlarna. För att testa systemet behöver vi någon form av tongenerator. Vi måste även kunna mäta utsignalen från systemet.

Mål Avläsning i 5 khz (sampling 10 khz), i mån av tid bättre. Användning Systemet är tänkt att användas som en gitarr-effektpedal där den utgör en tredje komponent mellan en elgitarr och dess förstärkare. För att använda pedalen kopplar man in gitarrsladden i gitarren och i input-kontakten i pedalkomponenten. En likadan sladd kopplas mellan förstärkaren och pedalkomponentens output-kontakt. Sedan ska förstärkaren sättas på så att man kan höra ljudet som genereras. Systemet kan nu användas. Nu kan man ändra ljudets frekvens genom att ändra pedalens läge, d.v.s. skruva på potentiometern. Vid noll-läget (potentiometern är skruvad så långt som möjligt åt ena hållet) så ger pedalen ingen frekvenshöjning alls, utan ljudet skickas bara vidare in i förstärkaren (men med sämre kvalitet p.g.a. samplingen). När man sedan skruvar på potentiometern så ökar ljudets frekvens, ju mer man skruvar desto högre frekvens. När pedalen når sitt max-läge (potentiometern är skruvad så långt som går åt andra hållet) så ökas frekvensen maximalt, vilket innebär att output-ljudet har ca 4 ggr högre frekvens än input-ljudet. I max-läget är också ljudkvalitén som sämst, vilket beror på begränsningar i hårdvaran. Hårdvara Komponentlista: Microcontroller Atmel AVR Atmega16 TLC7524 8-bit D/A Converter Potentiometer (linjär, 10k) Atmel JTAG ICE Kristall Kontakter, TS hona (6.3 mm), 2 st. Två kapacitatorer Vi använder oss utav processorn Atmel AVR Atmega16, eftersom den har många funktioner färdiga i systemet som gör den relativt lättanvänd för en nybörjare. Denna processor har en inbyggd ADC och en klockfrekvens på upp till 16 MHz. Till denna kopplades också en DAC, TLC7524 8-bit D/A Converter. Vi kopplade sedan en potentiometer (linjär, 10k) till AVR:n för att kunna skicka insignaler till den inbyggda ADC:n. För att kunna få upp processorns klockfrekvens till 16 MHz använde vi en extern klocka som består av en kristall och två kapacitatorer. Vi använde oss utav Atmel JTAG ICE för att kunna föra över vårt c-program från datorn till AVR:n. Systemet använder också två kontakter av typen TS hona, 6.3 mm där analog input från gitarren skickas in och analog output skickas vidare till gitarrens förstärkare. Kopplingsschemat nedan visar precis hur alla komponenter är kopplade till varandra.

Figur 1. Kopplingsschema Mjukvara Här följer en beskrivning av mjukvaran som används av systemet. Den fullständiga källkoden finns i appendix A. Nedanstående konstanter och variabler är tillgängliga för alla funktioner i programmet: #define sampsize 256 unsigned char samples[sampsize]; unsigned char samppos = 0; unsigned long outpos = 0; unsigned char pedaltimer = 0; unsigned char pedalratio = 10; unsigned char ADCchan = 0; unsigned char pedal = 0; Programmet utgörs av följande funktioner: void startadcconversion(); void portinit(); void ADCInit(); void ADCRun(); void selectadcchanel(unsigned char chan); void sendoutput(); void savesample(unsigned char s); ISR(ADC_vect); void guitarinputinit();

int main(); Programmet gör analog till digital omvandling av värden från gitarren och lägger resultatet i en ringbuffert, samples. Vi representerar ringbufferten med en vanlig array, de funktioner som använder bufferten måste själv hålla koll på buffertens storlek och vilken possition man försöker läsa ifrån. sampsize anger buffertens storlek. #define sampsize 256 unsigned char samples[sampsize]; Då D/A omvandlaren omvandlar maximalt 8-bitars tal omvandlar vi endast till 8 bitar, för att spara värdena används datatypen unsigned char. samppos är den plats som nästa lästa värde från gitarren ska läggas på. outpos är den plats som nästa ut-värde till D/A omvandlaren ska hämtas ifrån. unsigned char samppos = 0; unsigned long outpos = 0; Pedalens läge läses av efter pedalratio antal värden har lästs till bufferten och skrivits ut till D/A omvandlaren. pedaltimer används för att avgöra om det är dags att uppdatera pedalens värde som sparas i pedal. ADCchan används för att indikera vilken kanal som A/D omvandlaren läser ifrån. unsigned char pedaltimer = 0; unsigned char pedalratio = 10; unsigned char pedal = 0; unsigned char ADCchan = 0; portinit() initierar vilka ben på portarna som ska användas. Alla ben på port B kopplas till D/A omvandlaren DB0-DB7. PC0 är kopplad till CS och PC1 till WR på D/A omvandlaren; och initieras båda till 1. PA0 är kopplad till gitarren, och PA1 till pedalen. void portinit(); ADCInit() och ADCRun initierar A/D omvandlaren, att endast 8 bitar ska sparas, att hela värdet ska sparas i ADCH, vilken klockhastighet som ska användas, att det genereras avbrott när en omvandling är klar, och att globala avbrott är tillåtna. Avslutningsvis anropar funktionen startadcconversion() som startar den första omvandlingen. void ADCInit(); void ADCRun(); void startadcconversion(); guitarinputinit() nollställer bufferten. void guitarinputinit(); selectadcchanel() byter vilken kanal A/D omvandlaren läser ifrån. Kanal 0 är kopplad till gitarren, och kanal 1 till pedalen. Då det endast finns 8 kanaler på ADC n ignoreras värden större än 7. void selectadcchanel(unsigned char chan); sendoutput() beräknar utifrån pedal vilket som är nästa element i bufferten som ska skrivas ut. Detta värde läggs på port B. För att utföra D/A omvandlingen skickas värdet noll till CS på DAC n via PC0, sedan noll till WR (via PC1) dessa värden återställs sedan i omvänd ordning. På WR s uppåtflank utförs omvandlingen. sendoutput anropas från ISR(ADC_vect) när ADCchan är noll.

void sendoutput(); savesample() anropas från ISR(ADC_vect) när ADCchan är noll. Till funktionen skickas ADCH, som läggs i bufferten. void savesample(unsigned char s); ISR(ADC_vect) är en avbrottsrutin som anropas när en A/D omvandling är klar. Om ADCchan är noll var omvandlingen från gitarren och savesample() och sendoutput ska skickas. Annars om ADCchan är ett har pedalens läge avlästs och pedal ska uppdateras. ISR(ADC_vect); main() kör init funktionerna och lägger sig sedan i en tom oändlig loop. int main(); Resultat Resultatet av vårt projekt blev en effektpedal som fungerar som vi tänkt oss, dock med en del brus i ljudsignalen. Målet med sampling i 10 khz uppnåddes precis, enligt en grov bedömning av outputen med hjälp av ett oscilloskop. För att ta reda på samplingsfrekvensen kopplade vi inputen till en tongenerator och outputen till ett oscilloskop. På oscilloskopet observerade vi att outputen hade en period på 100 mikrosekunder vilket innebär en samplingsfrekvens på 10 khz. Om man har en bättre ADC, som är snabbare och framför allt har mindre brus i sin signal kan outputen förbättras. I nuläget utnyttjas ADC på AVR:en maximalt, och på grund av tidsbrist har vi inte testat en separat ADC kopplad till AVR:en. Med tanke på den hårdvara som användes och den begränsade tid vi lade på projektet, är kvalitén på slutresultatet bättre än vi förväntade oss. Vi är alltså mycket nöjda över resultatet.

Appendix A Källkod #include <avr/io.h> #include <avr/interrupt.h> /* PA0 är input från gitarr PA1 är pedalens läge PC0 är kopplad till CS på DAC'n PC1 är kopplad till WR på DAC'n PB0-PB7 är kopplade till DB0-DB7 på DAC'n PD0 används av catch-all interrupt rutinen för felmedelande */ #define sampsize 256 unsigned char samples[sampsize]; unsigned char samppos = 0; unsigned long outpos = 0; unsigned char pedaltimer = 0; unsigned char pedalratio = 10; unsigned char ADCchan = 0; unsigned char pedal = 0; void startadcconversion(){ ADCSRA = (1 << ADSC); // Start A2D Conversions void portinit(){ DDRB = 0xFF; DDRC = 0x3; PORTC = 3; //00000011 "nollställer" de inverterade CS och WR benen på DAC'en void ADCInit(){ //ADCSRA = (1 << ADPS2) (1 << ADPS1) (1 << ADPS0); // Set ADC prescaler to 128-125KHz sample rate @ 16MHz ADCSRA &= 0xF8; //ADCSRA &= 11111000 ADMUX = (1 << REFS0); // Set ADC reference to AVCC ADMUX = (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading ADMUX = 0; // välj kanal 0 på ADC'n detta är default void ADCRun(){ //ADCSRA = 0x20; // Set ADC to Free-Running Mode //SFIOR &= ~(0xE0); // också free-running mode ADCSRA = (1 << ADEN); // Enable ADC ADCSRA = (1 << ADIE); // Enable ADC Interrupt sei(); // Enable Global Interrupts startadcconversion();

void selectadcchanel(unsigned char chan){ if(chan < 8){ ADMUX &= ~(7); ADMUX = chan; void sendoutput(){ PORTB = samples[outpos/100]; outpos = (outpos + 100 + 10*pedal/7) % (sampsize*100); PORTC = 2; //00000010 => noll skickas till CS på DAC'en PORTC = 0; //00000000 => noll skickas till WR på DAC'en //sleep(?); //Det verkar inte som om man behörver vänta på DAC'en PORTC = 2; //Uppåtflank på WR PORTC = 3; //Uppåtflank på CS void savesample(unsigned char samp){ samples[samppos] = samp; samppos = (++samppos) % sampsize; ISR(ADC_vect) { if(adcchan == 0){ savesample(adch); sendoutput(); pedaltimer = (++pedaltimer) % pedalratio; if(pedaltimer == 0){ ADCchan = 1; selectadcchanel(adcchan); else{ pedal = ADCH; ADCchan = 0; selectadcchanel(adcchan); startadcconversion(); void guitarinputinit(){ for(unsigned char i = 0; i < sampsize; ++i){ samples[i] = 0; int main(){ portinit(); ADCInit(); ADCRun(); for(;;){ return 0;