Frekvensbestemmelse. HWP I1 Kursusarbejde Forår 2007



Relaterede dokumenter
Logbog. Torsdag d. 28. marts: Onsdag d. 4. april: Onsdag d. 11. april: Torsdag d. 12. april: Fredag d. 13. april:

Automatisk Guitartuner

Automatisk Guitartuner

Microcontroller, Arduino

Arduino Programmering

Microcontroller, Arduino

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)

Journal JTAG: Udarbejde af: Benjamin Grydehøj I samarbejde med PDA Projektgruppen. Elektronikteknologafdelingen på Erhvervsakademi Fyn.

Micro:bit. Komponenter i CFU-kasser. Lær komponenterne at kende

AVR MP Ingeniørhøjskolen i Århus Michael Kaalund

LabQuest Manual Til indsættelse af hukommelseskort (SD-kort) til at forøge dataloggerens hukomelse

Analog Øvelser. Version. A.1 Afladning af kondensator. Opbyg følgende kredsløb: U TL = 70 % L TL = 50 %

Projekt. Analog Effektforstærker.

Indholdsfortegnelse:

Analoge indgange og A/D konvertering. Analoge udgange

Embedded controller, almen.

Total systembeskrivelse af AD1847

Undersøgelse teknologi og resurser: Eleverne skal lære om enkel produktudvikling fra ide til implementering.

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

Michael Jokil

Figur 0.1: To kredsløb hvor en operationsforstærker bliver brugt som komparator. [1]

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning

Enes Kücükavci Roskilde Tekniske Gymnasium Mathias Turac Informationsteknolog B Vejleder: Karl Bjranasson Programmering C

CANSAT & ARDUINO step by step

Øvelsesvejledning. Frekvenskarakteristikker Simulering og realisering af passive filtre.

SPIDER Quick guide. DATO: August 2017 FORHANDLER: WASYS A/S. Langebjergvænget Roskilde

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Intro til AVR. Mads Pedersen, OZ6HR

Signalbehandling og matematik 1 (Tidsdiskrete signaler og systemer)

Projektbeskrivelse. Automatisk Guitartuner. Steffen Nissen. Ole Sønderby. Signe Lisby. Søren Riis

WEA-Base Brugervejledning til vejetransmitter

Alle dip 1 7 sættes til On for at opnå stand-alone operation fra PC.

Metal Detektor. HF Valgfag. Rapport.

Software Dokumentation

MP3 player med DMX interface.

Start af nyt schematic projekt i Quartus II

Efter installation af GEM Drive Studio software fra Delta s CD-rom, skal hoved skærmbilledet se således ud: (koden til administrator adgang er: admin)

Temperaturmåler. Klaus Jørgensen. Itet. 1a. Klaus Jørgensen & Ole Rud. Odense Tekniskskole. Allegade 79 Odense C /

Seriel kommunikation

Resonans 'modes' på en streng

Strømforsyning +/- 12V serieregulator og 5V Switch mode

Projektopgave Observationer af stjerneskælv

Lyskryds. Thomas Olsson Søren Guldbrand Pedersen. Og der blev lys!

Klasse 1.4 Michael Jokil

MVT380 Vejledning. Forord. Website: Kontakt: Tillykke med din nye GPS tracker MVT380.

KNX løsninger til. Erhvervsbygninger. KNX Automatisk dagslysregulering med foldedørsstyring og manuel dæmp

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Logik Rapport - Alarm. Klaus Jørgensen Itet. 1a. Klaus Jørgensen & Ole Rud 9/ Vejledere: PSS & SKH

Svendeprøve Projekt Tyveri alarm

U Efter E12 rækken da dette er den nærmeste I

LH-CD6(P) tykkelsessmåling

GSM SMS Modem MODEL: SA RTU-1 V1.01

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Piano Tuning & String Analyzing Tool

Elektronikken bag medicinsk måleudstyr

03/ PW xxxxxdk BETJENINGSVEJLEDNING. SKIOLD FlexMix PC software Version 2.34

Synopsis. Hardi Bootlader m. Java ME

Vildtkamera DTC-530V.

Bruger manual for SW 3.06

IsoBar ControlModul. Brugsanvisning. Indhold. Introduktion og tekniske specifikationer 1. Generel beskrivelse af display og tastatur 2

Autoriseret forhandler Quick Guide DLC Covert Special OPS

Trådløs Radio modtager

HTX, RTG. Rumlige Figurer. Matematik og programmering

Indholdsfortegnelse PSpice modul 3. Forudsætninger. Forberedelse til øvelser

Parametrisk analyse Redigeret

BrunataNet GateGPRS med fast strømforsyning

4. Semesterprojekt System Arkitektur. MyP3000 I4PRJ4 E2004

Svane Electronic Universal timer med 4 relæer og et valg af 18 funktioner hver 1. 4 kanals timer med 18 funktioner

Arduino Programmering

Simulering af en Mux2

Indholdsfortegnelse :

Sampling. Reguleringsteknik for Grundfos Lektion 6. Jan Bendtsen

ADDA/ADACDT vejledning

CANSAT & ARDUINO step by step

MCE9637 DeviceNet Modul

Emergency call button. Stabilt og simpelt

Opgaver - PLC - analogteknik - forbindelsesteknik...3 Opgaver - PLC - analogteknik - programmering...9

3. Computerens opbygning.

2x50 ETHERNET MODUL. RS485 slave med Ethernet-IP. Gælder for: Program nr.: AUXSLAVE v1 Dokument nr.: 0422md2x50-2v1 Dato:

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

UniLock System 10. Manual til T550 Secure Radiomodtager og håndsender. Version 2.0 Revision

Tilslutning- og programmeringseksempler

LOGO!Soft Comfort version 4.0 Hurtig i gang med LOGO! Soft Comfort

Fag: Projekt E1PRJ1 Emne: Kravspecifikation Softdrink-Automat Gruppe: 6 Dato: 10. april 2003 Medlemmer: Benjamin Sørensen, Joanna Christensen, Jacob

Automatisk Guitartuner. Der skal foretages desk research såvel som field research.

LCD Character display Intro

Nanovip Energimåler. El-Nr:

Monteringsvejledning for AP900 til Suzuki Swift 1,3 benzin 2007> med Original betjening

ATD. Bruger manual. By AntiTremor.org. Revsion 1.1

Brugervejledning. Fjernbetjening display MT-5

Grafisk visning af hjertelyde

Projekt rapport. for. Zigbee kommunikation

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Rapport. Undersøgelse af Dantale DVD i forhold til CD. Udført for Erik Kjærbøl, Bispebjerg hospital og Jens Jørgen Rasmussen, Slagelse sygehus

Fysikøvelse Erik Vestergaard Musik og bølger

WELLPLOT ARCGIS BRUGERMANUAL I G I S A P S

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor

Transkript:

HWP I1 Kursusarbejde Forår 2007 Søren Riis, 3024 Vitus Bering Danmark 31 05 2007

University College Vitus Bering Danmark Teknologi og Managementdivisionen Titel: Frekvensbestemmelse Tema: Hardwareprogrammering Projektperiode: 1. maj 29. maj 2007 Gruppemedlemmer: Signe Kjær Lisby, 2030 Søren Riis, 3024 Vejleder: Ib Havn (IHA) Synopsis: Projektet beskriver udviklingen af et embedded system, som kan bestemme tonen fra en anslået guitarstreng. Dette sker ud fra en lydoptagelse, hvilken gennemgår en FFT analyse. Funktionaliteten kan bruges i forbindelse med at stemme en guitar. Sideantal: 25 Afleveret: 31. maj 2007

Indholdsfortegnelse 1 Indledning... 3 2 Analyse og Kravspecifikation... 4 2.1 Formål... 4 2.2 Funktionelle krav... 4 2.3 Ikke funktionelle krav... 6 2.4 Blok diagram... 6 2.5 Guitaren... 7 3 Design... 8 3.1 Signalforstærkning... 8 3.2 Valg af microcontroller... 11 3.3 LCD Display... 12 3.4 A/D Converter... 13 3.4.1 Beregning af opløsning... 14 3.4.2 Beregning af prescaler faktor... 14 3.5 Switches... 15 3.6 STK500... 16 3.7 Diagrammer... 17 4 Implementering og tests... 19 4.1 Tests... 20 5 Færdig løsning... 21 6 Konklusion... 22 7 Appendiks: Fast Fourier Transformation... 24 Side 2 af 25

1 Indledning Projektet beskriver udviklingen af en elektronisk anordning, der kan bestemme hvilken tone en anslået guitarsteng spiller. Dette skal bestemmes ud fra en lydoptagelse fra guitaren. Til at bestemme tonen, anvendes der FFT analyse. Projektet er baseret på Atmels microcontrollere. Undervejs i projektet er følgende hardware komponenter anvendt: Atmel STK500 Starter Kit Atmel microcontrollere (ATmega16) Atmel AVR JTAGICE mkii (til debugging af kode) LCD Display (Optrex DMC 20215) Kredsløb til signalforstærkning På forhånd var der ingen sikkerhed for, at problemstillingen overhovedet kunne løses med de komponenter der var stillet til rådighed. Dette betød at der ikke var de store forventninger til et færdigt produkt. Projektet er en del af et større projekt, som omhandler udviklingen af en automatisk guitartuner. Rapporten her vil dog udelukkende fokusere på hvordan en den mest dominerende tone bestemmes ud fra en lydoptagelse. Denne funktionalitet kan for eksempel bruges i forbindelse med at stemme en guitar. Med rapporten følger kode, datablade samt Doxygen dokumentation. Alt dette kan findes på den vedlagte cd. Side 3 af 25

2 Analyse og Kravspecifikation 2.1 Formål Projektet har til formål at udvikle en elektronisk anordning, som kan bestemme den dominerende tone ud fra en lydoptagelse. Eftersom anordningen i første omgang betragtes som en prototype vil der blive implementeret funktioner, som udelukkende vil blive brugt i forbindelse med tests. Disse vil altså blive fjernet i en eventuel færdig løsning. 2.2 Funktionelle krav Systemet skal opfylde følgende funktionelle krav: Databehandlingen skal startes ved hjælp af tryk på en knap. Der skal være en knap til at simulere et input (til at teste om FFT analysen giver det forventede resultat). Det skal være muligt at regulere relevante værdier i forbindelse med tests (for eksempel samplingsfrekvensen). Resultatet af databehandlingen skal vises på et LCD display. Det skal være i stand til at bestemme tonen der spilles (eller rettere sagt den mest dominerende frekvens). Frekvensen skal kunne bestemmes på under 1 sekund. Frekvensen skal kun kunne bestemmes for løse strenge. For yderligere at udspecifisere de funktionelle krav til løsningen, er det valgt at lave UseCase samt aktivitetsdiagram for den overordnede funktionalitet. Usecase beskrivelsen samt aktivitetsdiagrammet kan ses på næste side. Side 4 af 25

Use Case Betjening af anordningen Actors Almene bruger Preconditions LCD display, knapper, og guitar skal være korrekt tilsluttet. Flow of events 1. Hardwaren initialiseres. 2. I tilfælde af at knap0 er aktiv: a. Dataopsamling startes. b. Databehandling foretages. 3. I tilfælde af at knap1 er aktiv: a. Samplingfrekvensen forøges 4. I tilfælde af at knap2 er aktiv: a. Samplingsfrekvensen formindskes 5. I tilfælde af at knap3 er aktiv: a. Generer datasæt ud fra en givet funktion. b. Databehandling på datasæt Related information Der kan kun aktiveres én knap ad gangen. Figur 1: Aktivitetsdiagram for UseCase Side 5 af 25

2.3 Ikke funktionelle krav Systemet skal opfylde følgende ikke funktionelle krav: Simpel, men kompakt, konstruktion. I kraft af at der er tale om en prototype er der ikke fokus på designet. Løsningen skal baseres på Atmels MCU serie. 2.4 Blok diagram På figur 2 kan ses et blok diagram, som grundlæggende beskriver opbygningen af det ønskede system. Pickup en står for at opsamle data, microcontrolleren for selve databehandlingen og LCD displayet står for at vise resultatet. Figur 2: Blokdiagram af systemet Figur 3: Atmel STK500 Starter Kit Side 6 af 25

2.5 Guitaren Guitaren har 6 strenge, som hver især udsender en bestemt tone, når de anslås. Da projektet kun koncentrerer sig om de løse strenge (da det er disse der tages udgangspunkt i, når den skal stemmes), kan antallet af toner der skal bestemmes defineres ved: Streng Tone Frekvens 1 E 329,63 Hz 2 B 246,94 Hz 3 G 196,00 Hz 4 D 146,83 Hz 5 A 110,00 Hz 6 E 82,407 Hz For at afgrænse det yderligere fokuseres der i første omgang på A strengen. Men generelt kan der siges at tonerne, der er interesse for, ligger i intervallet 80 Hz til 350 Hz. Guitaren der anvendes forventes iøvrigt at have en pickup indbygget, hvilket betyder at der ikke vil tages højde for hvordan lyden i praksis opsamles. Projektet fokuserer istedet på hvordan signalet behandles, således at tonen kan bestemmes. Side 7 af 25

3 Design Efter analysefasen kan arbejdet med at designe de enkelte dele af systemet begynde. Det første der blev undersøget var om guitarens output var kraftigt nok til at blive direkte tilsluttet til AVR boardet. Men da guitarens output maksimalt nåede en amplitude på 0,1 V, var det nødvendigt at forstærke signalet også selvom at den anvendte guitar havde indbygget pre amplifier. 3.1 Signalforstærkning Det kredsløb, der skal opbygges, skal opfylde følgende krav: 1. Input et er et AC signal med en amplitude på max. 0,1 V. 2. Output et fastsættes af A/D Converteren. I vores tilfælde kører den med en referencespænding på 5 V (omtalt som AREF i dokumentationen), hvilket betyder at vores output skal ligge i intervallet fra 0 5 V. Præcisionen af den frekvens der bestemmes ved hjælp af FFT, er meget afhængig af konverteringen af signalet, hvorfor det er vigtigt at give A/D converteren de bedste forudsætninger. Det betyder at kredsløbet skal være i stand til at forstærke signalet samt flytte dets nulpunkt, således at hele signalet ligger i det positive område. I praksis betyder det at nulpunktet flyttes til 2,5 V (midt i måleområdet) og at den teoretiske forstærkning fastsættes til (når der ønskes en amplitude på 2,5 V): 2,5V 25 0,1V = Det betyder altså at input signalet skal forstærkes med en faktor på 25. Side 8 af 25

I praksis viste det sig dog umuligt, da de anvendte operationsforstærkere ikke var i stand til at gå helt op til deres forsyningsspænding (5 V). I praksis endte forstærkningsfaktor med at blive: 560Ω = 20,74 27Ω Denne værdi er fastsat ud fra forsøg baseret på simuleringer gennem programmet PSpice Schematics. Det endelige kredsløb ser således ud: Figur 4: Diagram over forstærkerkredsløbet Kredsløbet består af 2 operationsforstærkere, som hver varetager sin funktion. Den første operationsforstærker står for at forstærke signalet med den fastsatte faktor (som vist tidligere forholdet mellem de 2 modstande). Den anden sørger for at flytte nulpunktet de 2,5 V op. På begge operationsforstækere bruges non amplifying input, således at signalet på intet tidspunkt inverteres. I kredsløbet representeres input et fra guitaren af V3. Output et kan aflæses i punktet yderst til højre. Side 9 af 25

Figur 5: Spændingsforsyning Figur 6: Spændingsdeler Kredsløbet indeholder desuden en spændingsdeler samt en strømforsyning. Spændingsdeleren er koblet til punktet c2. Spændingsdeleren gør det muligt at hæve signalet med de ønskede 2,5V (hvis der anvendes en strømforsyning på 5 V). Figur 7: Simulering af forstærkerkredsløb På figur 7 ses en simulering fra PSpice Schematics. Den grønne graf representerer output et, mens den røde representerer guitarens input i form af en sinus formet kurve med en amplitude på 0,1 V. Side 10 af 25

3.2 Valg af microcontroller Sammen med AVR Starter Kit et medfølger der 2 MCU er: Type Flash EEPROM SRAM Hastighed Volt ATmega8515L 8kB 512B 512B 0 8 MHz 2,7 5,5 V ATmega16 16kB 512B 1024B 0 16 MHz 4,5 5,5 V ATmega8515L blev hurtigt fravalgt. Dels har den ingen A/D converter og dels opererer den maksimalt ved 8 MHz. Desuden har den ikke ret meget SRAMhukommelse, hvilket er vigtigt i forbindelse med FFT analyserne. Derfor faldt valget naturligt nok på ATmega16 MCU en, som har indbygget en 10bit A/D converter. Et problem med ATmega16 MCU en kunne være mængden af SRAM i forbindelse med FFT analysen. Hvis dette bliver et problem kan der skiftes til ATMega128, som skolen ligger inde med. Dette kræver dog at der monteres et STK501 modul på STK500 Starter Kit et. Type Flash EEPROM SRAM Hastighed Volt ATmega128 128kB 4096B 4096B 0 16 MHz 4,5 5,5 V På cd en kan der findes datablade for alle omtalte MCU er. Figur 8: Atmel STK501 udviddelses modul Side 11 af 25

3.3 LCD Display LCD Displayet der blev stillet til rådighed, er et Optrex DMC 20215. Det er baseret på HD44780 controlleren, som er en meget brugt LCD Display controller. Displayet er har plads til 20 tegn på hver af de 2 linjer, der er til rådighed. Der findes adskillige biblioteker på nettet til denne type display, hvilket betød at en af disse blev brugt for at spare tid. Senere kan der eventuelt ligges kræfter i at udvikle en mere optimeret udgave til projektet. Det anvendte bibliotek muliggør at LCD Displayet kan køres enten i 4bit eller 8bit mode. Da 8bit mode kræver at der anvendes mere end én port, blev det besluttet at køre displayet i 4bit mode. Displayet havde ikke monteret nogle ledninger, hvilket betød at der skulle laves en pin konfiguration så den kunne tilsluttes til AVR boardet. AVR PIN0 PIN1 PIN2 PIN3 PIN4 PIN5 PIN6 PIN7 GND VTG LCD 14 13 12 11 1 5 6 4 1 2 Ledninger blev loddet på som skemaet viser og derefter tilsluttet til PortB på AVR boardet. PortB blev valgt grundet at PortA skulle bruges senere til A/Dconverteren. Figur 9: LCD displayet Side 12 af 25

3.4 A/D Converter Eftersom A/D converterens samplingsfrekvens skal være justerbar, er A/Dconverteren sat til at køre i Free Running mode. Dette betyder at A/Dconverteren kontinuerligt gemmer målinger (hver konvertering tager 13 clock cycles, bortset fra den første som tager 25). Det er så timerens opgave at sørge for at aflæse målingerne, således at den ønskede samplingsfrekvens opnås. Dette gøres i praksis ved at manipulere med følgende 3 registre: ADMUX ADC Multiplexer Selection Register Hele dette register sættes til 0. Dette skyldes at der læses fra kanal 0, AREF bruges som reference og der ikke ønskes nogen intern forstærkning af signalet. Figur 10: ADMUX ADC Multiplexer Selection Register ADCSRA ADC Control and Status Register A Følgende bits skal sættes til et: ADEN, ADPS2, ADPS1, ADPS0 Derved tændes A/D converteren og prescaleren sættes til 128 (forklaring følger). For at starte den første konvertering sættes ADSC bitten til 1. Figur 11: ADCSRA ADC Control and Status Register A Side 13 af 25

SFIOR Special Function IO Register Hele dette register sættes til 0. Derved sættes den i Free Running mode. 3.4.1 Beregning af opløsning A/D converteren på ATmega128 MCU en har en opløsning på 10bit og da referencespændingen er sat til 5V (AREF), kan opløsningen beregnes til: 5V = 0,0049 10 2 1 A/D converterens måleinterval i opdeles altså i 1024 steps (2 10 ), hvor der mellem hvert step er 0,0049. Dette er altså den mindste forskel der kan måles. 3.4.2 Beregning af prescaler faktor Prescaleren er den faktor, som MCU ens clockfrekvens divideres med for at få A/D converterens clockfrekvens. For at A/D converteren kan fungere optimalt, skal dens clockfrekvens ligge mellem 50 khz og 200 khz. Kører den med en højere clockfrekvens, vil opløsningen blive dårligere. Prescaler faktoren sættes i ADC Control and Status Register A (ADCSRA) og den teoretiske værdi kan beregnes således: MCU AD Clock Clock(max) 16.000.000Hz = = 80 200.000Hz Side 14 af 25

Ud fra denne beregning vælges en passende prescaler faktor fra tabellen herunder: Figur 12: Prescaler tabel I dette tilfælde vælges 128 som prescaler faktor for at holde A/D converterens clockfrekvens indenfor de 50 khz til 200KHz. Dette kan gøres ved: ADCSRA = _BV(ADPS0) _BV(ADPS1) _BV(ADPS2) 3.5 Switches Der bruges 4 knapper til at styre programmet. De 4 knapper sidder på Starter Kit et og er tilsluttet til PortD. Knap SW0 SW1 SW2 SW3 Beskrivelse Start Forminsk samplingsfrekvens Forøg samplingsfrekvens Start simulation Der kan kun aktiveres én knap ad gangen. Side 15 af 25

Frekvensbestemmelse 3.6 STK500 På figur 13 kan det ses hvordan jumperne er placeret. Figur 13: Opsætning af STK500 Boardet har ligeledes fået en 16 MHz krystal monteret, således at ATmega16 MCU en kan køre ved 16MHz. Ud over at isætte krystallen, skal følgende indstillinger anvendes i AVR Studio: Figur 14: Screenshot fra AVR Studio Side 16 af 25

3.7 Diagrammer Herunder er metoden skitseret til hvordan samplingsfrekvensen reguleres ved hjælp af et sekvensdiagram. Main ADC Fourier init_adc() enableadc() sampledata() Loop så længe der er behov for at lave målinger disableadc() storedata() fft() findpeakfrequency() Figur 15: Sekvensdiagram Først initialiseres A/D converteren, hvorefter den startes. Herefter gemmes der målinger med den fastsatte samplingsfrekvens indtil det ønskede antal målinger er opnået, hvorefter A/D converteren deaktiveres. Til sidst laves der FFT analyse, hvorefter det frekvensen for det maksimale peak aflæses. Side 17 af 25

For bedre at kunne overskue opgaven, blev der desuden lavet et klassediagram. I C programmering er det i princippet ikke muligt at lave deciderede klasse, men for overskueligheden skyld følger her hvordan de forskellige filer hænger sammen. ADC +init_adc() +enableadc() +disableadc() Button +setportd() +isbuttonpressed() +allbuttonsreleased() +buttonactivated() +buttondeactivated() Main +main() Fourier +sampledata() +inc_samplingfrequency() +dec_samplingfrequency() +getsamplingfrequency() +printtolcd() +simulate() +findpeakfrequency() +fft() LCD +lcd_init() +lcd_clrscr() +lcd_goto() +lcd_puts() Figur 16: Klassediagram Klassenavn Main ADC Button Fourier LCD Beskrivelse Indeholder main metoden, som står for at starte programmet. Indeholder metoder til A/D controlleren. Indeholder metoder til styre hvad der skal ske, når en given knap bliver aktiveret. Indeholder FFT algoritmen. Det er også her alle opsamlede data gemmes og behandles. Indeholder metoder til LCD displayet. Side 18 af 25

Frekvensbestemmelse 4 Implementering og tests Implementeringen er foregået igennem AVR Studio 4, som er et glimrende udviklingsværktøj til AVR s microcontrollere. Koden er opbygget i mindre moduler i løbet af projektet og så til sidst sat sammen til et program. Kredsløbene er blevet loddet på en prototype printplade og ser således ud: Figur 17: Det færdige kredsløb I forbindelse med implementeringen af FFT algoritmen er der brugt en del energi på at implementere testmetoder, som kunne teste om algoritmen virkede som planlagt. Selve algoritmen er direkte kopieret fra en artikel fra internettet (artiklen er vedlagt på cd en). Der har under implementering været lagt vægt på at dele koden op i forskellige lag med hvert deres ansvar. Dette gør at koden bliver nemmere at forstå samt lettere at vedligeholde og genbruge. Som eksempel kan nævnes A/D Side 19 af 25

converteren, hvor der både er metoder til at initializere den (hardware nært) samt metoder til at gemme data, som ligger tættere på applikationsniveau. 4.1 Tests Ud over at implementere testmetoder (f.eks. som det blev gjort i forbindelse med at test FFT algoritmen), er Atmels JTAG ICE mkii blevet brugt i forbindelse med debugging. Den gør det muligt trinvist at gå igennem koden mens den eksekveres på MCU en, hvilket har vist sig meget anvendeligt i flere situationer. Ligeledes er det muligt at følge med i hvordan variabler ændrer sig løbende samt indsætte breakpoints i koden. Eneste problem ved at anvende JTAG en istedet for seriel kommunikation, er at projektet i AVR Studio skal oprettes på ny, hvor der så vælges JTAG en (gør man ikke dette, så er der stor sandsynlighed for at det ikke virker!). Figur 18: Atmel JTAG ICE mkii Side 20 af 25

5 Færdig løsning Herunder ses et billede af hele opstillingen. Figur 19: Den færdige løsning Forstærkerkredsløbet skal forbindes til den grønne (V+) og gule ledning (GND). Side 21 af 25

6 Konklusion Generelt har projektet været utroligt lærerigt og ufordrende. Omfanget af opgaven var fra start ukendt, da gruppen ikke havde den store viden og/eller erfaring med de behandlede emner. Gennem projektet har der været mange ting der skulle løses undervejs, da der nærmest hele tiden var tale om nyt stof. Set i det lys, er der stor tilfredshed med hvad der er opnået på godt 3 ugers intensivt arbejde. Desværre var det ikke muligt at teste om hele løsningen virkede i praksis. Den begrænsede SRAM hukommelse muliggjorde kun at lave FFT analyse på 64 målinger og det er for lidt. Som minimum skulle der nok bruges 256 eller 512 målinger. En anden faktor der gav problemer var MCU en regnekraft. En FFT analyse på 64 målinger tog ca. 3 sekunder og det er for lang tid, hvis den skal bruges i forbindelse med den automatiske guitartuner. Men løsningen virker på simuleret data, så den forventes også at gøre det, hvis en guitar kobles til og der kan gemmes nok målinger i MCU en. Problemer gennem projektet Det blev forsøgt at skifte til ATmega128, men det blev opgivet tidligt. Det anvendte bibliotek til display et fungerede tilsyneladende overhovedet ikke samme med denne MCU. I forbindelse med at udskrive doubles til displayet, blev sprintf metoden anvendt. Dette kom dog aldrig til at virke, så der blev lavet en hjemmestrikket algoritme. Som allerede nævnt var der for lidt lagerplads på MCU en. Side 22 af 25

Der var opsætningsproblemer med JTAG en i starten, men det viste sig at der skulle oprettes et helt nyt projekt før den kan bruges. Man kan ikke bare skifte til JTAG en midt i et projekt, hvor man i starten sendte data til Starter Kit et via seriel porten. Forbedringer Finde nogle bedre operationsforstærkere, som kan gå tættere ud til deres forsyningsspænding. Derved udnyttes A/D converterens måleområde bedre. FFT algoritmen kunne optimeres, hvilket måske kunne reducere den tid det tager at lave et FFT analyse. Metoden der er brugt til at styre samplingsfrekvensen kunne også forbedres, så den blev mere præcis. Den er afgørende i forbindelse med FFT analysen. Søren Riis Side 23 af 25

7 Appendiks: Fast Fourier Transformation Fast Fourier Transformation (FFT) er en effektiv algoritme der bruges til at udføre den diskrete Fourier Transformation (DFT). DFT er en matematisk algoritme, der bruges indenfor blandt andet signalbehandling. Den kan splitte et signal, så alle dets frekvenskomponenter bliver adskilt i et spektrum, og derved gør det let at identificere de enkelte frekvensers værdier. Hvordan FFT algoritmen i praksis fungerer vil ikke blive beskrevet her, da der fokuseres på hvordan den anvendes. Det første man skal være opmærksom på er samplingsfrekvensen. Den skal være dobbelt så høj som den maksimale frekvens man ønsker at måle. Hvis man f.eks. sampler med 64 Hz, ser regnestykket således ud: f sampling = 64Hz f max fsampling = = 32Hz 2 Antallet af målinger spiller også ind. Jo flere målinger, jo mere præcist bliver resultatet i sidste ende. Men jo flere målinger, jo mere regnekraft kræves der af MCU en. Hvis man for eksempel har lavet 128 målinger, kan afstanden mellem frekvenserne i det komplekse domæne beregnes til: fsampling 64Hz 1 Δ f = = = N 128 2 Denne værdi bruges senere til at bestemme den endelige frekvens. Side 24 af 25

Figur 20: Fast Fourier Transformation af en sinus kurve Når FFT analysen er gennemført, har man 2 datasæt en reel del og en imaginær del. Disse to skal samles til et datasæt, som indeholder længde af den reelle og den imaginære del. Længden bestemmes som vist herunder: Z = R + J 2 2 n n Derefter plottes halvdelen af datasæt et (hvis 128 målinger, plottes de 64 første) og man ender med noget lignende hvad der er vist på figur 19. Herefter skal man til at søge efter peaks. I princippet er højeste peak, den mest dominerende frekvens. Når højeste peak er fundet, aflæser man værdien på 1. aksen og multiplicere tallet med Δf. Resultatet af denne beregning giver (forhåbentlig) den mest dominerende frekvens i det analyserede datasæt. Side 25 af 25