Bassokitaran virittimen toteutus mbedmikrokontrollerin
|
|
- Vilho Nurminen
- 9 vuotta sitten
- Katselukertoja:
Transkriptio
1 Igor Oleynik Bassokitaran virittimen toteutus mbedmikrokontrollerin avulla Metropolia Ammattikorkeakoulu Insinööri (AMK) Sähkötekniikan koulutusohjelma Insinöörityö
2 Tiivistelmä Tekijä Otsikko Sivumäärä Aika Igor Oleynik Bassokitaran virittimen toteutus mbed-mikrokontrollerin avulla 19 sivua + 1 liite Tutkinto Insinööri (AMK) Koulutusohjelma Sähkötekniikan koulutusohjelma Suuntautumisvaihtoehto Elektroniikka Ohjaaja Lehtori Kai Lindgren Työn tavoitteena oli suunnitella ja ohjelmoida laite, joka auttaisi käyttäjää kielisoittimen, erityisesti bassokitaran, virittämisessä. Toissijaisena tavoitteena oli löytää FFT:lle vaihtoehtoinen menetelmä signaalin analysoimiseen. Työssä käytettiin mbed LPC1768 -alustaa, jolla tapahtuu signaalin A/D-muunnos ja analyysi. Käyttäjän ohjaamiseen ja tulosten näyttämiseen käytettiin Adruino TFT LCD -näyttöä. Ohjelmointi tapahtui mbedin oman verkossa toimivan ohjelmointiympäristön avulla. Vaihtoehtoiseksi menetelmäksi signaalin analyysille osoittautui Suomessa melkein tuntematon Goertzel-algoritmi. Menetelmä osoittautui toimivaksi ja työn ensimmäiseen tavoitteeseen täysin sopivaksi. Lopputuloksena on laite, joka lukee sisään tulevan audiosignaalin, laskee signaalin taajuuden ja vertaa sitä haluttuun taajuuteen. Tämän jälkeen laite ohjaa käyttäjää kitaran virittämisessä. Valmista laitetta on helppo soveltaa mihin kielisoittimeen tahansa, pitää vain tietää soittimen kielten oikeat taajuudet. Avainsanat mbed, kitaraviritin, Goertzel-algoritmi
3 Abstract Author Title Number of Pages Date Igor Oleynik Realization of Bass Guitar Tuner Using mbed Microcontroller 19 pages + 1 appendices 1 September 2015 Degree Bachelor of Engineering Degree Programme Electrical Engineering Specialisation option Electronics Instructor Kai Lindgren, Senior Lecturer Thesis includes realization of bass guitar tuner using mbed microcontroller. The goal of the study was to design and program a device that would help users to tune stringed instrument, especially bass guitar. The secondary objective was to find an optional method to analyze the signal beside a FFT. The mbed LPC1768 microcontroller board was used in the work. AD conversion and signal analysis takes place with this board. For controlling the user and displaying results Arduino TFT LCD-monitor is used. Programming was performed in mbeds own, network based, integrated development environment. An alternative method for signal analysis proved to be the Goertzel algorithm, which is almost unknown in Finland. The method proved to be effective and fully fitting to the first objective of the thesis. The result is device that reads the input audio signal, calculates the frequency of the signal and compare it to desired frequency. After this the device guides the user in guitar tuning. The ready device is easy to apply to any string instrument; you only need to know the correct frequencies of the instrument strings. Keywords mbed, guitar tuner, Goertzel-algorithm
4 Sisällys Lyhenteet 1 Johdanto 1 2 Laitteessa käytetyt osat ja komponentit Kehitysalusta Yleistä mbed-systeemeistä LPC1768-kehitysalusta MBed-ohjelmointiympäristö (mbed Compiler) Näyttö Arduino TFT LCD Näytön kirjasto Muut komponentit Äänen kaappaus Signaalin vahvistaminen Fourier-muunnos Goertzel-algoritmi Kitaran virittäminen ADC 11 3 Laitteen ohjelmointi Algoritmin toteutus C-kielellä Näytettävä teksti Kytkentäkaavio Laitteen kokoonpano 16 4 Loppusanat 17 Lähteet 18 Liite 1. Ohjelmakoodi
5 Lyhenteet FFT Fast Fourier Transform. ARM Advanced Risc Machines USB Universal Serial Bus SPI Serial Peripheral Interface I2C Inter-Integrated Circuit UART Universal Asynchronous Receiver/Transmitter CAN Controller Area Network PWM Pulse Width Modulation TFT LCD Thin-Film-Transistor Liquid-Crystal Display DFT Discrete Furier Transform DSP Digital Signal Processing IIR Infinite Impulse Responce ADC, A/D Analog-Digital Converter OFDM Orthogonal Frequency-Division Multiplexing DCT Discrete Cosine Transform
6 1 (19) 1 Johdanto Työn tavoitteena on suunnitella ja ohjelmoida laite, joka auttaisi bassokitaran virittämisessä. Laite havaitsisi soitetun kielen taajuuden ja sen mukaan ohjeistasi käyttäjää bassokitaran virittämisessä. Laitteen tarkoitus on mahdollistaa bassokitaran virittäminen niille, jotka eivät pysty virittämään sitä omatoimisesti. Vaikka yleensä äänen analysointiin käytetään Fast Fourier Transform (FFT) -algoritmeja, työn tavoitteena on myös löytää vaihtoehtoinen menetelmä. Tällaiseksi menetelmäksi ilmenee ns. Goertzel-algoritmi. Laite on sopiva havaitsemaan äänisignaalin sekä piuhan että mikrofonin avulla. Laitteen ohjelmointia on myös helppo muuttaa muita kielisoittimia varten. Muutosta varten pitää vain tietää soittimien kielten taajuudet. 2 Laitteessa käytetyt osat ja komponentit 2.1 Kehitysalusta Yleistä mbed-systeemeistä MBed on käyttöjärjestelmä ja alusta Internet-päätelaitteelle. Alusta perustuu 32- bittiseen ARM Cortex-M mikrokontrolleriin. Projektin ovat kehittäneet ARM ja sen yhteistyökumppanit. [1.] Ohjelmat mbed-alustalle kirjoitetaan käyttäen ilmaista, verkossa ( toimivaa koodieditoria ja ohjelmointikielen kääntäjää. Näitä voi käyttää tavallisen verkkoselaimen kautta ja käännös tapahtuu verkkopilvessä, käyttäen ARMCC C/C++ kääntäjää. Verkko-ohjelmointiympäristö mahdollistaa helpon koodien jakamisen. [1.] On olemassa useita erilaisia vaihtoehtoja alustoille, mutta suosituin niistä on alkuperäinen "mbed Microcontroller board". "MBed Microcontroller Board" ("mbed NXP LPC17680") on NXP mikrokontrolleriin perustuva demo-alusta, jossa on ARM Cortex M3-ydin. [1.]
7 2 (19) LPC1768-kehitysalusta Kuva 1. LPC1768 ulkonäkö ja jalkojen kytkennät [2.] Työssä käytetään LPC1768-mikrokontrolleria (kuva 1). Se on tehokas ja luotettava kehitysalusta. MBed LPC1768 sopii sekä kokeneelle, että vasta aloittaville käyttäjälle. Mikrokontrolleri on suunniteltu sovelluksiin jotka perustuvat ARMmikroprosessoriarkkitehtuuriin. ARM (Advanced Risc Machines) on 32-bittinen mikroprosessoriarkkitehtuuri, joka on nykyään suosittu sulautettujen järjestelmien suorittimissa. MBed NXP LPC1768 -alusta käytetään erilaisissa automaattisissa ja teollisuuden ohjausjärjestelmissä, antureissa sekä mikrokontrollereissa. Se sopii sovelluksiin, jotka vaativat suurta suorituskykyä sekä reaaliaikaista toimintaa. Se sisältää 512 kilotavua flash- ja 32 kilotavua RAMmuistia. MBed NXP LPC1768 sisältää sisäänrakennetut Ethernet- ja USB-liitännät, portit SPI-, I2C-, UART- ja CAN- väyliä varten, kuusi jalkaa ADC-muunninta ja kuusi jalkaa PWM-ohjausta (pulssinleveysmodulaatio) varten (kuva 2). Mikrokontrollerin jalkoja 5 30 voidaan myös käyttää tavallisina digitaalisina tulo/lähtö portteina. [2.]
8 3 (19) Kuva 2. LPC1768 mikrokontrollerin tekniset ominaisuudet [2.] MBed-ohjelmointiympäristö (mbed Compiler) MBed Compiler tarjoaa kevyen, verkossa toimivan C / C++ -ohjelmointiympäristön, joka on valmiiksi konfiguroitu, jotta voi nopeasti kirjoittaa ohjelmia, kääntää niitä ja ladata ne mbed-mikrokontrolleriin (kuva 3). Itse asiassa, käyttäjän ei tarvitse asentaa tai määrittää mitään saadakseen ohjelman toimimaan mbedin kanssa. Koska se on websovellus, voi siihen kirjautua sisään mistä tahansa ja jatkaa siitä, mihin jäi. Ohjelmointiympäristö toimii kaikilla käyttöjärjestelmillä. [3.] Kuva 3. MBed Compiler-ohjelmointiympäristö
9 4 (19) Kääntäjä käyttää ammatillista ARMCC-moottoria, joten se tuottaa tehokkaita koodeja, joita voidaan käyttää ilman mitään maksuja myös kaupallisissa sovelluksissa. Ohjelmistoympäristö sisältää työtilan version ohjauksen, koodin muotoilun ja automaattisen dokumentoinnin julkaisevia kirjastoja varten. MBed-työkalut keskittyvät prototyyppeihin, ja ovat suunniteltu nopeaa kokeilua varten. Ne täydentävät muita ammattilaisia tuotantotason työkaluja. Käyttäjä voi julkaista projektia suoraan Compiler-työtilan mbed.orgverkkosivuilla jakaakseen koodia muiden kanssa ja viedä jo valmiita kirjastoja työtilaan saadakseen hyvän startin. [3.] 2.2 Näyttö Arduino TFT LCD Arduino TFT -näyttö on taustavalaistu LCD-näyttö (kuva 4). Näyttöön voi piirtää tekstiä, kuvia ja muotoja TFT-kirjaston avulla. Näytössä on sisäänrakennettu micro-sdkorttipaikka, johon voi esimerkiksi varastoida kuvia näyttämistä varten. Vaikka näyttö on suunniteltu Arduino Esploraa varten, sitä voi käyttää minkä tahansa AVR:n kanssa. Näyttö on 1.77-tuumainen ja näytön resoluutio on 160 x 128 pikseliä. Näyttö toimii +5 V:n DC:llä. [5.] Kuva 4. Arduino LCD TFT [5.]
10 5 (19) Näytön kirjasto Toimiakseen mbed-mikrokontrollerin kanssa näyttö vaati erikoiskirjaston. Kirjasto on kokoelma koodeja, joiden tarkoitus on mahdollistaa erityisen osan toimintaa. Tärkein kirjaston tavoite on pakata jotain niin, ettei joka kerta tarvitse kirjoittaa uutta koodia, jotta saisi lisäosan tai funktion toimimaan. Kirjastoa voi pitää ohjelman rakennuspalikkana, mutta ei ohjelmana itsenään, sillä kirjastolla ei esimerkiksi ole main() funktiota. [5.] Työssäni käytin Jonne Valolan tekemää kirjastoa Arduino TFT LCD -näytön ohjelmoimiseen [6.]. 2.3 Muut komponentit Äänen kaappaus Äänisignaalin kaappausta varten työssäni käytetään kahta vaihtoehtoista laitetta: mikrofonia tai 6-millimetristä mono audio plugia. Mikrofonina on Adafruit MAX mikrofoni Signaalin vahvistaminen Operaatiovahvistin on analogiaelektroniikan komponentti. Operaatiovahvistin sisältää useita transistoreita, vastuksia, kondensaattoreita, sekä muita komponentteja. Kuitenkin yleensä operaatiovahvistin myydään yhtenä komponenttina, vaikka esimerkiksi opetustarkoitukseen sitä voi rakentaa erillisistä komponenteista. Operaatiovahvistimen tarkoituksena on vahvistaa sisääntulon jännitettä tietyllä vahvistinkertoimella. Operaatiovahvistin sisältää tavallisesti kaksi sisäänmenoa ja yhden ulostulon. Tämän lisäksi on myös ns. käyttösähkön navat. Operaatiovahvistimessa käytetään tavallisesti kaksipuoleista jännitesyöttöä, jolloin ulostulojännite on samassa vaiheessa kuin sisäänmenojännite. [11.] Operaatiovahvistin vertailee tuloliittimien välistä jännite-eroa. Kytkentätyyppeinä käytetään joko suljettua silmukkaa tai avointa silmukkaa. Avoin silmukka tarkoittaa, että piirissä ei ole takaisinkytkentää ulostulosta sisääntuloon. [11.]
11 6 (19) Operaatiovahvistimissa yleensä käytetään negatiivistä silmukkaa. Suljettu silmukka voi olla joko negatiivinen tai positiivinen takaisinkytkentä. Negatiivinen takaisinkytkentä parantaa vahvistinta kasvattamalla kaistanleveyttä ja vähentämällä häiriöitä. Negatiivisella takaisinkytkennällä myös saadaan suodatettua ei toivottuja signaalin komponentteja pois. Positiivista takaisinkytkennän tuloksena on hystereesipari. [11.] Kitarasta tulevasta signaalin mittauksesta selvisi, että kitaran voimakkaimman signaalin amplitudin voimakkuus on 280mV +/- 10mV, joka saavutetaan 168 Hz:llä.. Kuva 5. Vahvistamaton signaali Koska kitarasta tuleva signaali on heikko, kytkentä tarvitsee erillisen vahvistimen. Signaalin vahvistamiseen käytettiin LM386-audiovahvistinta. Lisäksi käytettiin kahta 10Kpotentiometriä ja yhtä 330nF-kondensaattoria. LM386-vahvistin on suunniteltu vahvistamaan 26 db:n verran, eli vahvistuskerroin on 20. Vahvistuksen jälkeen kitarasta tuleva signaali on noin 1 V. Itse signaali on sinimuotoista ja vaihtelu on näin -1 V:n ja +1 V:n välillä. Koska LPC1768-mikrokontrollerin analoginen sisääntulo tunnistaa ainoastaan 0 V:n ja 5 V:n välillä olevat signaalit, on kitarasta tulevaan signaaliin kytkettävä erillinen jännite. Lopputuloksena on kuvan 6 mukainen signaali.
12 7 (19) Kuva 6. Vahvistettu signaali Koska laite on suunniteltu käytettäväksi erilaisten soittimien kanssa, tavallisten vastusten sijaan käytin 10k:n potentiometreja. Näin vahvistusta voi tarvittaessa pienentää. Vahvistimen lopullinen kytkentä on kuvassa 7. Kuva 7. Signaalivahvistuksen kytkentäkaavio Mikrofonin tapauksessa kolmas jalka kytketään +5 V:n jännitteeseen.
13 8 (19) Fourier-muunnos Fourier-muunnos on matematiikassa käytetty jatkuva integraalimuunnos. Muunnosta käytetään erityisesti analyysissä, differentiaaliyhtälöiden ratkaisemisessa ja signaalinkäsittelyssä erilaisiin taajuusanalyysiä vaativiin sovelluksiin. Muunnos perustuu teoreemaan, jonka mukaan mikä tahansa jatkuva riittävän säännöllinen funktio voidaan esittää sinimuotoisten funktioiden integraalina. Fourierin muunnoksella voidaan laskea näiden sinimuotoisten komponenttien amplitudi ja vaihe. [7.] Fourier-muunnos sopii parhaiten jatkuva-amplitudisten ja jatkuva-aikaisten signaalien taajuusanalyysiin. Käytännössä signaali tunnetaan usein vain mitattujen näytteiden muodossa, eikä signaalilauseketta ole käytettävissä. On kaksi lähestymistapaa taajuusanalyysin suorittamiseksi. Ensimmäinen tapa on approksimoida signaalia ja suorittaa approksimaatiolle analyyttisesti Fourier-muunnos. Toinen tapa on käyttää numeerista algoritmia, jolloin signaalispektrikin tunnetaan vain numeerisessa muodossa. Diskreetti Fourier muunnos on esimerkki tällaisesta algoritmista. [7.] Diskreetti Fourier-muunnos, eli DFT, on Fourier-muutoksen diskreettiaikainen yleistys. Siinä signaali esitettään äärellisenä Fourier sarjana ja integraali korvautuu summalausekkeella. Jossa on :n pituinen reaali- tai kompleksiarvoinen sarja. Diskreetin käänteismuunnos on. [7.] Goertzel-algoritmi Goertzel-algoritmi on digitaalinen signaalikäsittelytekniikka (DSP), joka tarjoaa tehokkaan keinon yksittäisen taajuuskomponentin arviointiin diskreetti Fourier-muunnoksen puitteissa. Tämä tekee algoritmistä erityisen sopivan tiettyihin sovelluksiin, kuten puhe-
14 9 (19) linlaitteissa käytettyyn numeroiden äänitaajuusvalintaan (DFT). Algoritmin on ensimmäisen kerran kuvannut Gerald Goertzel, vuonna [9.] Kuten DFT, Goertzel-algoritmi analysoi yhden valittavissa olevan taajuuden komponentin diskreettisignaalista. Toisin kuin suorat DFT-laskelmat, Goertzel-algoritmi operoi jokaisella iteraatiolla yhdellä reaaliarvoisella kertoimella, käyttäen reaaliarvoista aritmeettista syötesekvenssiä. Koko spektrin kääntämiseksi Goertzel algoritmi on monimutkaisempi kuin Fast Fourier algoritmi, mutta muutaman valikoidun taajuuskomponentin laskemiseen, se on numeerisesti tehokas. Goertzel-algoritmin yksinkertainen rakenne tekee sen hyvin sopivaksi pienille prosessiohjelmille ja sulautettuihin sovelluksiin, eikä se rajoitu näihin. [9.] Goertzel-algoritmia voidaan myös käyttää "käänteisesti" sinikäyrän muodostamista varten. Sinikäyrä tällöin vaatii vain yhden kerto- ja yhden vähennyslaskun yhtä generoitua näytettä kohden. [9.] Peruslaskutoimitukset Goertzel-algoritmissä ovat digitaalisia suodattimia, ja tästä syystä algoritmia kutsutaan usein Goertzel-suodattimeksi. Suodatin toimii tulosekvenssissä, kahden tason kaskadissa. Parametri antaa analysoitavan taajuuden, joka on taas normalisoitu näytesykliin. Ensimmäinen vaihe laske välisekvenssin, : Toisessa vaiheessa sovelletaan filtteri, jolloin tuloksena saadaan sekvenssiyhtälö. Ensimmäistä vaihetta voidaan pitää toissijaisena lineaarisena IIR- (Infinite impulse response) suodattimena. Tälle rakenteelle on ominaista, että sen sisäiset tilamuuttujat ovat yhtä suuria kuin edellisen laskelman tulokset. Sisääntulot ehdolle,
15 10 (19) ovat kaikki yhtä suuret kuin 0. Aloitusfiltterin alustamista varten yhtälöä voi aloittaa näytteellä. Suodattimen tilat ovat esiasennettuja arvoille. Toista vaihetta voi pitää FIR -filtterinä, koska sen laskutoimituksissa ei käytetä yhtään vanhempaa lähtöä. Z-muunnoksen metodia voi soveltaa filterin tutkimiseen. Z-muunnos ensimmäisestä vaiheesta on Toisen vaiheen Z-muunnos on Yhdistetty muunnosfunktio kahdelle vaiheelle on näin ollen Tämä voidaan muuntaa takaisin vastaavaan ajan funktioon: [9.]
16 11 (19) Kitaran virittäminen Viritetyssä neljäkielisessä bassokitarassa kielten taajuudet ovat seuraavat: Kieli: Nuotit: Taajuus: 4 G Hz 3 D Hz 2 A 55 Hz 1 E Hz Taajuudet ovat perustaajuuksia, eikä yläsävelsarjoja oteta huomioon ADC A/D-muunnin eli analogia digitaali muunnin on elektroniikassa laite, joka muuntaa jatkuvan analogisen signaalin esimerkiksi jännitteen arvoja digitaalisiksi lukuarvoiksi. (D/A-muunnin eli digitaali-analogiamuunnin suorittaa päinvastaisen operaation.) [10.] Toisin kuin analogista signaalia, digitaalista signaalia voi käsitellä esimerkiksi tietokoneella tai jollain muulla erityisellä digitaalisella signaaliprosessorilla. A/D-muuntimia käytetään hyvin erilaisissa sovelluksissa. Tämänlaisia ovat esimerkiksi matkapuhelimet, mittalaitteet, äänentalletuslaitteet ja radiomodeemit. [10.] Muuntimien ominaisuuksia ovat resoluutio ja näytteentaajuudesta riippuva muunnosaika. Muuntimen resoluutio, eli erottelukyky näyttää kuinka monella bitillä muunnin muuntaa signaalia digitaaliseksi arvoksi. Näytteenottotaajuus kertoo, kuinka usein muunnos tehdään. A/D muuntimen suurin näytteenottotaajuus riippuu siitä mikä on yhteen muunnokseen tarvittava aika. Nyquistin teoreeman mukaan digitoitavasta signaalista tulee ottaa näytteitä taajuudella, joka on suurempi kuin kaksinkertainen alkuperäinen signaali [10.] Koska ohjelmassa käytettävät taajuudet ovat erittäin matalia (< 1 khz), muunnosajasta ei tarvitse välittää. Ohjelmassa A/D muunnosta vastaa ADC_full-ohjain (kuva 8).
17 12 (19) Kuva 8. ADC_full-ohjain 3 Laitteen ohjelmointi 3.1 Algoritmin toteutus C-kielellä Goertzel-algoritmi käyttää alla esitettyä koodia. Koko koodi ilman kommentteja löytyy liitteestä yksi. int string_select = 0; //Valitun kielen nollaus float high, high1, in_tune, in_tune1, in_tune2, in_tune3, low, low1, note, low_mod, high_mod; char* key; int Counter = 0; int Buffer[6000]; float goertzelfilter(int samples[], float frequency, int N) { //frequency = kielen taajuus float s_preview = 0.0; float s_preview2 = 0.0; //Väliaikainen muisti float coefficent, normalizedfrequency, power, s;//lisää muuttujaa int i; normalizedfrequency = frequency / SAMPLE_RATE; coefficent = 2 * cos(2 * PI*normalizedfreqency);//Itse laskutoimitus for (i = 0; i<n; i++) {
18 13 (19) s = samples[i] + coefficent * s_preview - s_prevpriew2; s_preview2 = s_preview; s_preview = s; power = s_preview2*s_preview2 + s_preview*s_preview - coefficent*s_preview*s_preview2; return power; ADC adc(sample_rate, 1); //Määritetään puskuri void sample_audio(int chan, uint32_t value) { Buffer[Counter] = adc.read(p20); Counter += 1; while (1) { // Määritetään analysoivat kielet. switch (string_select) { case 0: note = 70; key = "E"; case 1: note = 93; key = "B"; case 2: note = 123; key = "F#"; case 3: note = 166; key = "C#"; //Valmistellaan pinnit A/D muunnosta varten ja asetetaan keskeytyksen ohjaus (käyttäen Simon Blandfordin ADC draiveria) adc.append(sample_audio); adc.startmode(0, 0); adc.burst(1); adc.setup(p20, 1); //Aloitetaan keskeytys ja odotetaan noin 4096 näytettä adc.interrupt_state(p20, 1); wait(.2); //A/D muunoksen lopetus, 20 pinnin alustus adc.interrupt_state(p20, 0); adc.setup(p20, 0); int actual_rate = adc.actual_sample_rate(); high = 0; low = 0; //Määritetään liian korkean ja matalan äänen rajat for (int i = 2; i<46; i += 2) { high1 = goertzelfilter(buffer, (note + i), Counter); if (high1 > high) high = high1; //Määritetään liian korkean ja matalan äänen rajat
19 14 (19) for (int i = 2; i<46; i += 2) { low1 = goertzelfilter(buffer, (note - i), Counter); if (low1 > low) low = low1; //Määritetään nuottiin osunutta ääntä in_tune1 = goertzelfilter(buffer, (note + 1), Counter); in_tune2 = goertzelfilter(buffer, note, Counter); in_tune3 = goertzelfilter(buffer, (note - 1), Counter); if ((in_tune1 > in_tune2) && (in_tune1 > in_tune3)) in_tune = in_tune1; else if ((in_tune2 > in_tune1) && (in_tune2 > in_tune3)) in_tune = in_tune2; 3.2 Näytettävä teksti Näyttöön ilmestyvästä tekstistä vastaa seuraava koodi: // Näytön teksti TFT.locate(0, 0); TFT.printf("::Kitaraviritin::"); TFT.locate(0, 15); TFT.printf("Virittävä kieli: %i", (4 - string_select)); TFT.locate(0, 30); TFT.printf("%s kielen taajuus: %i Hz", key, (int)note); TFT.locate(0, 45); if (led_ok) TFT.printf("Vireessä!"); else if (led_low) TFT.printf("Liian matala!"); else if (led_high) TFT.printf("Liian korkea!"); else TFT.printf("~~~~~~~~");
20 15 (19) 3.3 Kytkentäkaavio Kuva 9. Näytön ja mikroprosessorin kytkentä Kytkennässä (kuva 9) audiojakin voi vaihtaa mikrofoniksi. Koodissa ei tarvitse vaihtaa mitään. Laite soveltuu myös muiden kielisoittimen virittämiseen, pitää vain tietää soittimen kielten taajuudet. Ohjelmassa pitää tällöin muuttaa kohtaa, jossa määritetään analysoivat kielet. Uudessa sovelluksessa voi olla enemmän kuin neljä kieltä. Tällöin lisätään vain puutuvat case kohdat ja muokataan kohtaa: TFT.printf("Tuning String: %i", (4-string_select)); Esimerkiksi tavallisen kuusikielisen kitaran koodi näyttäisi tältä: while (1) { switch (string_select) { case 0: note = 82; key = "E"; case 1:
21 16 (19) case 2: case 3: case 4: case 5: note = 110; key = "A"; note = 146; key = "D"; note = 196; key = "G"; note = 247; key = "B"; note = 330; key = "E"; 3.4 Laitteen kokoonpano Laite on koottu tavalliselle PCB-alustalle (kuva 10). Pinnien välisiä yhteyksiä varten on käytetty tavallista 2 mm:n alumiinikaapelia. Virtaa laite saa USB-kaapelin välityksellä. Laite myös voi toimia 5 V:n paristojen tai akun kautta. Kuva 10. Valmis kytkentä
22 17 (19) 4 Loppusanat Työn tavoitteena oli suunnitella laite, joka tunnistaa kitarasta tulevan signaalin ja tämän mukaan neuvoo käyttäjää pyörittämään virityskoneiston nuppeja oikeaan suuntaan. Laitteen rakentaminen ei tuottanut suuria haasteita. Haasteellisinta oli ohjelmointi. Vaikeuksia tuotti näytön sovittaminen mbed-mikrokontrollerin kanssa. Lopputuloksena on kuitenkin täysin toimiva laite, jonka parhaimpana ominaisuutena pidän hyviä muokkaamismahdollisuuksia. Laitetta on helppo soveltaa erilaisten soittimien kanssa. Tämä vaatii ainoastaan pienen muutokseen koodissa, eikä itse laitteen osiin tarvitse koskea. Erityisen kiinnostavaa työstä teki se, että pääsi tutustumaan erilaisiin analysointimenetelmiin. Työssä käytetty Goertzel-algoritmi on Suomessa melkein tuntematon, vaikka tietyissä tapauksissa, kuten tässä työssä, se on paljon kätevämpi ja yksinkertaisempi kuin esimerkiksi FFT.
23 18 (19) Lähteet 1 Wikipedia. MBed Verkkodokumentti < Luettu MBed. LPC1768 alusta Verkkodokumentti. < Luettu MBed. Compiler Verkkodokumentti. < Luettu Arduino. TFT LCD Näyttö Verkkodokumentti. < Luettu MBed. Kirjastot Verkkodokumentti. < Luettu MBed. Näytön ohjauskirjasto Verkkodokumentti. < mbed-work-in-progress/>. Luettu Fourier n muunnos Verkkodokumentti. < Luettu Nopea Fourier n muunnos Verkkodokumentti. < 80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1% D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0% B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5>. Luettu Aalto. Diskreetti Fourier n muunnos Verkkodokumentti < 72_1110_dft osa_1.pdf>. Luettu
24 19 (19) 10 A/D muunnin Verkkodokumentti. < Luettu Operaatiovahvistin Verkkodokumentti. < Luettu
25 Liite 1 1 (11) 1 Main.cpp #include "mbed.h" #include "adc.h" #include "ST7735_TFT.h" #include "Arial12x12.h" #include "Arial24x23.h" #include "Arial28x28.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 160 #define PI #define SAMPLE_RATE DigitalOut led_low(led1); DigitalOut led_ok(led2); DigitalOut led_high(led4); InterruptIn button1(p12); ST7735_TFT TFT(p5, p6, p7, p8, p11, p15,"tft"); int string_select = 0; float high, high1, in_tune, in_tune1, in_tune2, in_tune3, low, low1, note, low_mod, high_mod; char* key; int Counter = 0; int Buffer[6000]; float goertzelfilter(int samples[], float frequency, int N) { float s_preview = 0.0; float s_preview2 = 0.0; float coefficent, normalizedfrequency, power, s; int i; normalizedfrequency = frequency / SAMPLE_RATE; coefficent = 2 * cos(2 * PI*normalizedfrequency); for (i = 0; i<n; i++) { s = samples[i] + coefficent * s_preview - s_prevpriew2; s_preview2 = s_preview; s_preview = s; power = s_preview2*s_preview2 + s_preview*s_preview coefficient*s_preview*s_preview2; return power; ADC adc(sample_rate, 1); void sample_audio(int chan, uint32_t value) { Buffer[Counter] = adc.read(p20); Counter += 1; void button1_pressed() { string_select++; if (string_select > 3) string_select = 0; int main() { button1.mode(pulldown);
26 Liite 1 2 (11) %u.\n", button1.rise(&button1_pressed); TFT.cls(); TFT.set_font((unsigned char*) Arial12x12); while (1) { switch (string_select) { case 0: note = 70; key= "E1"; case 1: note = 93; key= "A1"; case 2: note = 123; key= "D2"; case 3: note = 166; key= "G2"; adc.append(sample_audio); adc.startmode(0,0); adc.burst(1); adc.setup(p20,1); adc.interrupt_state(p20,1); wait(.2); adc.interrupt_state(p20,0); adc.setup(p20,0); int actual_rate = adc.actual_sample_rate(); printf("requested max sample rate is %u, actual max sample rate is SAMPLE_RATE, actual_rate); printf("we did %i samples\n",counter); high = 0; low = 0; for (int i=2; i<46; i+=2) { high1 = goertzelfilter(buffer, (note + i ), Counter); if (high1 > high) high=high1; for (int i=2; i<46; i+=2) { low1 = goertzelfilter(buffer, (note - i ), Counter); if (low1 > low) low=low1; in_tune1 = goertzelfilter(buffer, (note+1), Counter); in_tune2 = goertzelfilter(buffer, note, Counter); in_tune3 = goertzelfilter(buffer, (note-1), Counter); if ((in_tune1 > in_tune2) && (in_tune1 > in_tune3)) in_tune = in_tune1; else if ((in_tune2 > in_tune1) && (in_tune2 > in_tune3)) in_tune = in_tune2;
27 Liite 1 3 (11) else in_tune = in_tune3; if ((in_tune >= high) && (in_tune >= low)) { led_high = 0; led_ok = 1; led_low = 0; else if (high >= in_tune) { led_high = 1; led_ok = 0; led_low = 0; else if (low >= in_tune) { led_high = 0; led_ok = 0; led_low = 1; TFT.locate(0,0); TFT.printf("::Guitar Tuner::"); TFT.locate(0,15); TFT.printf("Tuning String: %i", (4-string_select)); TFT.locate(0,30); TFT.printf("%s at %i Hz",key, (int) note); TFT.locate(0,45); if (led_ok) TFT.printf("In Tune!"); else if (led_low) TFT.printf("Too Low "); else if (led_high) TFT.printf("Too High"); else TFT.printf("~~~~~~~~"); TFT.locate(0,60); TFT.printf("%.0f high %.0f low %.0f tune", high, low, in_tune); Counter = 0; 1.1 adc.h #ifndef MBED_ADC_H #define MBED_ADC_H #include "mbed.h" #define XTAL_FREQ #define MAX_ADC_CLOCK #define CLKS_PER_SAMPLE 64 class ADC { public: ADC(int sample_rate, int cclk_div); void setup(pinname pin, int state); int setup(pinname pin); void burst(int state); void select(pinname pin);
28 Liite 1 4 (11) int burst(void); void startmode(int mode, int edge); int startmode(int mode_edge); void start(void); void interrupt_state(pinname pin, int state); int interrupt_state(pinname pin); void attach(void(*fptr)(void)); void detach(void); void append(pinname pin, void(*fptr)(uint32_t value)); void unappend(pinname pin); void append(void(*fptr)(int chan, uint32_t value)); void unappend(void); void offset(int offset); int offset(void); int read(pinname pin); int done(pinname pin); int overrun(pinname pin); int actual_adc_clock(void); int actual_sample_rate(void); PinName channel_to_pin(int chan); int channel_to_pin_number(int chan); private: int _pin_to_channel(pinname pin); uint32_t _data_of_pin(pinname pin); int _adc_clk_freq; void adcisr(void); static void _adcisr(void); static ADC *instance; ; uint32_t _adc_data[8]; void(*_adc_isr[8])(uint32_t value); void(*_adc_g_isr)(int chan, uint32_t value); void(*_adc_m_isr)(void);
29 Liite 1 5 (11) #endif 1.2 adc.cpp #include "mbed.h" #include "adc.h" ADC *ADC::instance; ADC::ADC(int sample_rate, int cclk_div) { int i, adc_clk_freq, pclk, clock_div, max_div = 1; adc_clk_freq = CLKS_PER_SAMPLE*sample_rate; int m = (LPC_SC->PLL0CFG & 0xFFFF) + 1; int n = (LPC_SC->PLL0CFG >> 16) + 1; int cclkdiv = LPC_SC->CCLKCFG + 1; int Fcco = (2 * m * XTAL_FREQ) / n; int cclk = Fcco / cclkdiv; LPC_SC->PCONP = (1 << 12); LPC_SC->PCLKSEL0 &= ~(0x3 << 24); switch (cclk_div) { case 1: LPC_SC->PCLKSEL0 = 0x1 << 24; case 2: LPC_SC->PCLKSEL0 = 0x2 << 24; case 4: LPC_SC->PCLKSEL0 = 0x0 << 24; case 8: LPC_SC->PCLKSEL0 = 0x3 << 24; default: fprintf(stderr, "Warning: ADC CCLK clock divider must be 1, 2, 4 or 8. %u supplied.\n", cclk_div); fprintf(stderr, "Defaulting to 1.\n"); LPC_SC->PCLKSEL0 = 0x1 << 24; pclk = cclk / cclk_div; clock_div = pclk / adc_clk_freq; if (clock_div > 0xFF) { fprintf(stderr, "Warning: Clock division is %u which is above 255 limit. Re-Setting at limit.\n", clock_div); clock_div = 0xFF; if (clock_div == 0) {
30 Liite 1 6 (11) Setting to 1.\n"); fprintf(stderr, "Warning: Clock division is 0. Re- clock_div = 1; _adc_clk_freq = pclk / clock_div; if (_adc_clk_freq > MAX_ADC_CLOCK) { fprintf(stderr, "Warning: Actual ADC sample rate of %u which is above %u limit\n", _adc_clk_freq / CLKS_PER_SAMPLE, MAX_ADC_CLOCK / CLKS_PER_SAMPLE); while ((pclk / max_div) > MAX_ADC_CLOCK) max_div++; fprintf(stderr, "Maximum recommended sample rate is %u\n", (pclk / max_div) / CLKS_PER_SAMPLE); ; LPC_ADC->ADCR = ((clock_div - 1) << 8) (1 << 21); LPC_ADC->ADCR &= ~0xFF; _adc_g_isr = NULL; for (i = 7; i >= 0; i--) { _adc_data[i] = 0; _adc_isr[i] = NULL; instance = this; NVIC_SetVector(ADC_IRQn, (uint32_t)&_adcisr); LPC_ADC->ADINTEN &= ~0x100; void ADC::_adcisr(void) { instance->adcisr(); void ADC::adcisr(void) { uint32_t stat; int chan; stat = LPC_ADC->ADSTAT; if (stat & 0x0101) _adc_data[0] = LPC_ADC->ADDR0; if (stat & 0x0202) _adc_data[1] = LPC_ADC->ADDR1; if (stat & 0x0404) _adc_data[2] = LPC_ADC->ADDR2; if (stat & 0x0808) _adc_data[3] = LPC_ADC->ADDR3; if (stat & 0x1010) _adc_data[4] = LPC_ADC->ADDR4; if (stat & 0x2020) _adc_data[5] = LPC_ADC->ADDR5; if (stat & 0x4040) _adc_data[6] = LPC_ADC->ADDR6; if (stat & 0x8080) _adc_data[7] = LPC_ADC->ADDR7; chan = (LPC_ADC->ADGDR >> 24) & 0x07; if (_adc_isr[chan]!= NULL) _adc_isr[chan](_adc_data[chan]); if (_adc_g_isr!= NULL) _adc_g_isr(chan, _adc_data[chan]);
31 Liite 1 7 (11) return; int ADC::_pin_to_channel(PinName pin) { int chan; switch (pin) { case p15: default: chan = 0; case p16: chan = 1; case p17: chan = 2; case p18: chan = 3; case p19: chan = 4; case p20: chan = 5; return(chan); PinName ADC::channel_to_pin(int chan) { const PinName pin[8] = { p15, p16, p17, p18, p19, p20, p15, p15 ; if ((chan < 0) (chan > 5)) fprintf(stderr, "ADC channel %u is outside range available to MBED pins.\n", chan); return(pin[chan & 0x07]); int ADC::channel_to_pin_number(int chan) { const int pin[8] = { 15, 16, 17, 18, 19, 20, 0, 0 ; if ((chan < 0) (chan > 5)) fprintf(stderr, "ADC channel %u is outside range available to MBED pins.\n", chan); return(pin[chan & 0x07]); uint32_t ADC::_data_of_pin(PinName pin) { if (burst() && (LPC_ADC->ADINTEN & 0x3F)) { return(_adc_data[_pin_to_channel(pin)]); else { switch (pin) { case p15: default: return(lpc_adc->adinten & 0x01? _adc_data[0] : LPC_ADC->ADDR0); case p16:
32 Liite 1 8 (11) _adc_data[1] : LPC_ADC->ADDR1); case p17: _adc_data[2] : LPC_ADC->ADDR2); case p18: _adc_data[3] : LPC_ADC->ADDR3); case p19: _adc_data[4] : LPC_ADC->ADDR4); case p20:// _adc_data[5] : LPC_ADC->ADDR5); return(lpc_adc->adinten & 0x02? return(lpc_adc->adinten & 0x04? return(lpc_adc->adinten & 0x08? return(lpc_adc->adinten & 0x10? return(lpc_adc->adinten & 0x20? void ADC::setup(PinName pin, int state) { int chan; chan = _pin_to_channel(pin); if ((state & 1) == 1) { switch (pin) { case p15: default: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 14); LPC_PINCON->PINSEL1 = (unsigned int)0x1 << 14; LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 14); LPC_PINCON->PINMODE1 = (unsigned int)0x2 << 14; case p16: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 16); LPC_PINCON->PINSEL1 = (unsigned int)0x1 << 16; LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 16); LPC_PINCON->PINMODE1 = (unsigned int)0x2 << 16; case p17: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 18); LPC_PINCON->PINSEL1 = (unsigned int)0x1 << 18; LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 18); LPC_PINCON->PINMODE1 = (unsigned int)0x2 << 18; case p18: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 20); LPC_PINCON->PINSEL1 = (unsigned int)0x1 << 20; LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 20); LPC_PINCON->PINMODE1 = (unsigned int)0x2 << 20; case p19: LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 28); LPC_PINCON->PINSEL3 = (unsigned int)0x3 << 28; LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 28); LPC_PINCON->PINMODE3 = (unsigned int)0x2 << 28; case p20: LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 30); LPC_PINCON->PINSEL3 = (unsigned int)0x3 << 30; LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 30); LPC_PINCON->PINMODE3 = (unsigned int)0x2 << 30;
33 Liite 1 9 (11) else { if (!burst()) LPC_ADC->ADCR &= ~0xFF; LPC_ADC->ADCR = (1 << chan); switch (pin) { case p15: default: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 14); LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 14); case p16: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 16); LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 16); case p17: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 18); LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 18); case p18: LPC_PINCON->PINSEL1 &= ~((unsigned int)0x3 << 20); LPC_PINCON->PINMODE1 &= ~((unsigned int)0x3 << 20); case p19: LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 28); LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 28); case p20: LPC_PINCON->PINSEL3 &= ~((unsigned int)0x3 << 30); LPC_PINCON->PINMODE3 &= ~((unsigned int)0x3 << 30); LPC_ADC->ADCR &= ~(1 << chan); int ADC::setup(PinName pin) { int chan; chan = _pin_to_channel(pin); return((lpc_adc->adcr & (1 << chan)) >> chan); void ADC::select(PinName pin) { int chan; if (!burst()) LPC_ADC->ADCR &= ~0xFF; chan = _pin_to_channel(pin); LPC_ADC->ADCR = (1 << chan); void ADC::burst(int state) { if ((state & 1) == 1) { if (startmode(0)!= 0) fprintf(stderr, "Warning. startmode is %u. Must be 0 for burst mode.\n", startmode(0)); LPC_ADC->ADCR = (1 << 16); else LPC_ADC->ADCR &= ~(1 << 16);
34 Liite 1 10 (11) int ADC::burst(void) { return((lpc_adc->adcr & (1 << 16)) >> 16); void ADC::startmode(int mode, int edge) { int lpc_adc_temp; lpc_adc_temp = LPC_ADC->ADCR & ~(0x0F << 24); lpc_adc_temp = ((mode & 7) << 24) ((edge & 1) << 27); LPC_ADC->ADCR = lpc_adc_temp; int ADC::startmode(int mode_edge){ switch (mode_edge) { case 0: default: return((lpc_adc->adcr >> 24) & 0x07); case 1: return((lpc_adc->adcr >> 27) & 0x01); void ADC::start(void) { startmode(1, 0); void ADC::interrupt_state(PinName pin, int state) { int chan; chan = _pin_to_channel(pin); if (state == 1) { LPC_ADC->ADINTEN &= ~0x100; LPC_ADC->ADINTEN = 1 << chan; NVIC_EnableIRQ(ADC_IRQn); else { LPC_ADC->ADINTEN &= ~(1 << chan); if ((LPC_ADC->ADINTEN & 0xFF) == 0) NVIC_DisableIRQ(ADC_IRQn); int ADC::interrupt_state(PinName pin) { int chan; chan = _pin_to_channel(pin); return((lpc_adc->adinten >> chan) & 0x01); void ADC::attach(void(*fptr)(void)) { NVIC_SetVector(ADC_IRQn, (uint32_t)fptr); void ADC::detach(void) { instance = this; NVIC_SetVector(ADC_IRQn, (uint32_t)&_adcisr);
35 Liite 1 11 (11) void ADC::append(PinName pin, void(*fptr)(uint32_t value)) { int chan; chan = _pin_to_channel(pin); _adc_isr[chan] = fptr; void ADC::unappend(PinName pin) { int chan; chan = _pin_to_channel(pin); _adc_isr[chan] = NULL; void ADC::append(void(*fptr)(int chan, uint32_t value)) { _adc_g_isr = fptr; void ADC::unappend() { _adc_g_isr = NULL; void offset(int offset) { LPC_ADC->ADTRM &= ~(0x07 << 4); LPC_ADC->ADTRM = (offset & 0x07) << 4; int offset(void) { return((lpc_adc->adtrm >> 4) & 0x07); int ADC::read(PinName pin) { _adc_data[_pin_to_channel(pin)] &= ~(((uint32_t)0x01 << 31) ((uint32_t)0x01 << 30)); return((_data_of_pin(pin) >> 4) & 0xFFF); int ADC::done(PinName pin) { return((_data_of_pin(pin) >> 31) & 0x01); int ADC::overrun(PinName pin) { return((_data_of_pin(pin) >> 30) & 0x01); int ADC::actual_adc_clock(void) { return(_adc_clk_freq); int ADC::actual_sample_rate(void) { return(_adc_clk_freq / CLKS_PER_SAMPLE);
6. Analogisen signaalin liittäminen mikroprosessoriin 2 6.1 Näytteenotto analogisesta signaalista 2 6.2. DA-muuntimet 4
Datamuuntimet 1 Pekka antala 19.11.2012 Datamuuntimet 6. Analogisen signaalin liittäminen mikroprosessoriin 2 6.1 Näytteenotto analogisesta signaalista 2 6.2. DA-muuntimet 4 7. AD-muuntimet 5 7.1 Analoginen
Digitaalinen signaalinkäsittely Johdanto, näytteistys
Digitaalinen signaalinkäsittely Johdanto, näytteistys Teemu Saarelainen, teemu.saarelainen@kyamk.fi Lähteet: Ifeachor, Jervis, Digital Signal Processing: A Practical Approach H.Huttunen, Signaalinkäsittelyn
Successive approximation AD-muunnin
AD-muunnin Koostuu neljästä osasta: näytteenotto- ja pitopiiristä, (sample and hold S/H) komparaattorista, digitaali-analogiamuuntimesta (DAC) ja siirtorekisteristä. (successive approximation register
11. kierros. 1. Lähipäivä
11. kierros 1. Lähipäivä Viikon aihe AD/DA-muuntimet Signaalin digitalisointi Kvantisointivirhe Kvantisointikohina Kytkinkapasitanssipiirit Mitoitus Kontaktiopetusta: 6 tuntia Kotitehtäviä: 4 tuntia Tavoitteet:
Signaalien datamuunnokset. Näytteenotto ja pito -piirit
Signaalien datamuunnokset Muunnoskomponentit Näytteenotto ja pitopiirit Multiplekserit A/D-muuntimet Jännitereferenssit D/A-muuntimet Petri Kärhä 26/02/2008 Signaalien datamuunnokset 1 Näytteenotto ja
OPERAATIOVAHVISTIN. Oulun seudun ammattikorkeakoulu Tekniikan yksikkö. Elektroniikan laboratoriotyö. Työryhmä Selostuksen kirjoitti 11.11.
Oulun seudun ammattikorkeakoulu Tekniikan yksikkö Elektroniikan laboratoriotyö OPERAATIOVAHVISTIN Työryhmä Selostuksen kirjoitti 11.11.008 Kivelä Ari Tauriainen Tommi Tauriainen Tommi 1 TEHTÄVÄ Tutustuimme
1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä
OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan
ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle
ELEC-A4010 Sähköpaja Arduinon ohjelmointi Jukka Helle Arduino UNO R3 6-20VDC 5VDC muunnin 16 MHz kideoskillaattori USB-sarjamuunnin (ATmega16U2) ATmega328 -mikro-ohjain 14 digitaalista I/O väylää 6 kpl
Arduino. Kimmo Silvonen (X)
Arduino Kimmo Silvonen (X) Arduino, toimiva oma versio (osat Pajalla) ATmega 328P IC DIL-kotelossa (DIP) päältä katsottuna, Arduinon pinnit +5 V TX RX DTR FT232 10k 22p 22p Reset 1 RX D0 TX D1 D2 PWM D3
Virheen kasautumislaki
Virheen kasautumislaki Yleensä tutkittava suure f saadaan välillisesti mitattavista parametreistä. Tällöin kokonaisvirhe f määräytyy mitattujen parametrien virheiden perusteella virheen kasautumislain
Operaatiovahvistimen vahvistus voidaan säätää halutun suuruiseksi käyttämällä takaisinkytkentävastusta.
TYÖ 11. Operaatiovahvistin Operaatiovahvistin on mikropiiri ( koostuu useista transistoreista, vastuksista ja kondensaattoreista juotettuna pienelle piipalaselle ), jota voidaan käyttää useisiin eri kytkentöihin.
ELEC-C5070 Elektroniikkapaja (5 op)
(5 op) Luento 5 A/D- ja D/A-muunnokset ja niiden vaikutus signaaleihin Signaalin A/D-muunnos Analogia-digitaalimuunnin (A/D-muunnin) muuttaa analogisen signaalin digitaaliseen muotoon, joka voidaan lukea
Spektri- ja signaalianalysaattorit
Spektri- ja signaalianalysaattorit Pyyhkäisevät spektrianalysaattorit Suora pyyhkäisevä Superheterodyne Reaaliaika-analysaattorit Suora analoginen analysaattori FFT-spektrianalysaattori DFT FFT Analysaattoreiden
Ohjelmistoradio. Mikä se on:
1 Mikä se on: SDR = Software Defined Radio radio, jossa ohjelmisto määrittelee toiminnot ja ominaisuudet: otaajuusalue olähetelajit (modulaatio) olähetysteho etuna joustavuus, jota tarvitaan sovelluksissa,
Tekniikka ja liikenne (5) Tietoliikennetekniikan laboratorio
Tekniikka ja liikenne 4.4.2011 1 (5) Tietoliikennetekniikan laboratorio Työ 1 PCM-työ Työn tarkoitus Työssä tutustutaan pulssikoodimodulaation tekniseen toteutustapaan. Samalla nähdään, miten A/Dmuunnin
Kojemeteorologia. Sami Haapanala syksy 2013. Fysiikan laitos, Ilmakehätieteiden osasto
Kojemeteorologia Sami Haapanala syksy 2013 Fysiikan laitos, Ilmakehätieteiden osasto Datan käsittely ja tallentaminen Käytännössä kaikkien mittalaitteiden ensisijainen signaali on analoginen Jotta tämä
ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Peter Kronström
ELEC-A4010 Sähköpaja Arduinon ohjelmointi Peter Kronström Arduinon rakenne 5 voltin regulaattori 16 MHz kide USB-sarjamuunnin ATmega328 -mikrokontrolleri 20 I/O-pinniä, joista 14 digitaalista ja 6 analogista
1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä
OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan
Anturit ja Arduino. ELEC-A4010 Sähköpaja Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka
Anturit ja Arduino Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka Anturit ja Arduino Luennon sisältö 1. Taustaa 2. Antureiden ominaisuudet 3. AD-muunnos 4. Antureiden lukeminen Arduinolla
LABORATORIOTYÖ 2 A/D-MUUNNOS
LABORATORIOTYÖ 2 A/D-MUUNNOS 2-1 2. A/D-muunnos Työn tarkoitus Tässä työssä demotaan A/D-muunnoksen ominaisuuksia ja ongelmia. Tarkoitus on osoittaa käytännössä, miten bittimäärä ja näytteenottotaajuus
Vahvistimet. A-luokka. AB-luokka
Vahvistimet A-luokka A-luokan vahvistimen molemmat päätevahvistin tarnsistorit johtavat, vaikke vahvistinta käytettäisi. Vahvistinta käytettäessä jatkuva lepovirta muuttuu ja näin vältytään kytkentäsäröltä
6.3. AVR_rauta. EEPROM-muisti 09.12.2007 pva
6.3. AVR_rauta. EEPROM-muisti 09.12.2007 pva Experience is what causes people to make new mistakes instead of old ones... - Unknown Sisältö Yleistä EEPROM-rekisterit Protoilu-ohje EEPROMmista ja Fuse-biteistä
LUMA SUOMI -kehittämisohjelma LUMA FINLAND -utvecklingsprogram LUMA FINLAND development programme Ohjelmointia Arduinolla
Ohjelmointia Arduinolla Kyösti Blinnikka, Olarin koulu ja lukio LUMA-keskus Aalto Mikä on Arduino? Open Source Electronics Prototyping Platform Arduino on avoimeen laitteistoon ja ohjelmistoon perustuva
A/D-muuntimia. Flash ADC
A/D-muuntimia A/D-muuntimen valintakriteerit: - bittien lukumäärä instrumentointi 6 16 audio/video/kommunikointi/ym. 16 18 erikoissovellukset 20 22 - Tarvittava nopeus hidas > 100 μs (
Tiedonkeruu ja analysointi
Tiedonkeruu ja analysointi ViDRoM Virtual Design of Rotating Machines Raine Viitala 30.9.2015 ViDRoM Virtual Design of Rotating Machines Mitataan dynaamista käyttäytymistä -> nopeuden funktiona Puhtaat
Signaalien datamuunnokset
Signaalien datamuunnokset Muunnoskomponentit Näytteenotto ja pitopiirit Multiplekserit A/D-muuntimet Jännitereferenssit D/A-muuntimet Petri Kärhä 17/02/2005 Luento 4b: Signaalien datamuunnokset 1 Näytteenotto
LABORATORIOTYÖ 2 A/D-MUUNNOS
LABORATORIOTYÖ 2 A/D-MUUNNOS Päivitetty: 23/01/2009 TP 2-1 2. A/D-muunnos Työn tarkoitus Tässä työssä demotaan A/D-muunnoksen ominaisuuksia ja ongelmia. Tarkoitus on osoittaa käytännössä, miten bittimäärä
DIGITAALISEN SIGNAALINKÄSITTELIJÄN TOTEUTUS ARDUINOLLA
Opinnäytetyö (AMK) Tietotekniikka Sulautetut ohjelmistot 2014 Jami Koivisto DIGITAALISEN SIGNAALINKÄSITTELIJÄN TOTEUTUS ARDUINOLLA OPINNÄYTETYÖ (AMK) TIIVISTELMÄ TURUN AMMATTIKORKEAKOULU Tietotekniikan
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka
Flash AD-muunnin. Ominaisuudet. +nopea -> voidaan käyttää korkeataajuuksisen signaalin muuntamiseen (GHz) +yksinkertainen
Flash AD-muunnin Koostuu vastusverkosta ja komparaattoreista. Komparaattorit vertailevat vastuksien jännitteitä referenssiin. Tilanteesta riippuen kompraattori antaa ykkösen tai nollan ja näistä kootaan
Sähköpajan elektroniikkaa
Sähköpajan elektroniikkaa Kimmo Silvonen (X) "Virtalähde", teholähde, verkkolaite (wall-wart) Elektroniikkapiirit vaativat toimiakseen käyttöjännitteen. Paristot noin 1,5 V tai 3 V / kenno Ladattavat NiMH-akut
Johdanto tieto- viestintäteknologian käyttöön: Äänitystekniikka. Vfo135 ja Vfp124 Martti Vainio
Johdanto tieto- viestintäteknologian käyttöön: Äänitystekniikka Vfo135 ja Vfp124 Martti Vainio Akustiikka Äänityksen tarkoitus on taltioida paras mahdo!inen signaali! Tärkeimpinä kolme akustista muuttujaa:
Tiedonkeruu ja analysointi
Tiedonkeruu ja analysointi ViDRoM Virtual Design of Rotating Machines Raine Viitala ViDRoM Virtual Design of Rotating Machines Mitataan dynaamista käyttäytymistä -> nopeuden funktiona Puhtaat laakerit,
Ohjelmointiharjoituksia Arduino-ympäristössä
Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet
6.2. AVR_rauta. Analogia-komparaattori-ohjelmointia 12.12.2007, pva
6.2. AVR_rauta. Analogia-komparaattori-ohjelmointia 12.12.2007, pva Joka hitaasti kulkee, se kauaksi pääsee. - tuntematon Sisältö yleistä rekisterit analogiavertailijan käyttö - jännitevahti - audiokytkin
Matlab-tietokoneharjoitus
Matlab-tietokoneharjoitus Tämän harjoituksen tavoitteena on: Opettaa yksinkertaisia piirikaavio- ja yksikkömuunnoslaskuja. Opettaa Matlabin perustyökaluja mittausten analysoimiseen. Havainnollistaa näytteenottotaajuuden,
LOPPURAPORTTI 19.11.2007. Lämpötilahälytin. 0278116 Hans Baumgartner xxxxxxx nimi nimi
LOPPURAPORTTI 19.11.2007 Lämpötilahälytin 0278116 Hans Baumgartner xxxxxxx nimi nimi KÄYTETYT MERKINNÄT JA LYHENTEET... 3 JOHDANTO... 4 1. ESISELOSTUS... 5 1.1 Diodi anturina... 5 1.2 Lämpötilan ilmaisu...
T-61.246 DSP: GSM codec
T-61.246 DSP: GSM codec Agenda Johdanto Puheenmuodostus Erilaiset codecit GSM codec Kristo Lehtonen GSM codec 1 Johdanto Analogisen puheen muuttaminen digitaaliseksi Tiedon tiivistäminen pienemmäksi Vähentää
TIETORAKENTEET JA ALGORITMIT
TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle
Säätötekniikan ja signaalinkäsittelyn työkurssi
Säätötekniikan ja signaalinkäsittelyn työkurssi Työ D102: Sinimuotoisen signaalin suodattaminen 0.4 op. Julius Luukko Lappeenrannan teknillinen yliopisto Sähkötekniikan osasto/säätötekniikan laboratorio
S-108.3020 Elektroniikan häiriökysymykset. Laboratoriotyö, kevät 2010
1/7 S-108.3020 Elektroniikan häiriökysymykset Laboratoriotyö, kevät 2010 Häiriöiden kytkeytyminen yhteisen impedanssin kautta lämpötilasäätimessä Viimeksi päivitetty 25.2.2010 / MO 2/7 Johdanto Sähköisiä
Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä
1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä 2) Kahdesta rinnankytketystä sähkölähteestä a) kuormittuu enemmän se, kummalla on
SISÄLLYS - DIGITAALITEKNIIKKA
SISÄLLYS - DIGITAALITEKNIIKKA Digitaalitekniikan perusteita...2 Bitti (bit)...2 Tavu (bytes)...2 Sana (word)...2 Yksiköt...2 Binääri järjestelmän laskutapa...2 Esimerkki: Digikuvan siirron kestoaika...2
GSM PUHEVIESTI & SMS HÄLYTYKSENSIIRTOLAITE
ZEUS4-VD GSM PUHEVIESTI & SMS HÄLYTYKSENSIIRTOLAITE V 1.2 ASENNUS, TOIMINTA JA OHJELMOINTI MAAHANTUOJA: FIN- ALERT ELECTRONICS OY WWW.FINALERT.FI PERUSTIEDOT ZEUS4 - VD on GSM hälytyksensiirtolaite joka
Tämä on PicoLog Windows ohjelman suomenkielinen pikaohje.
Tämä on PicoLog Windows ohjelman suomenkielinen pikaohje. Asennus: HUOM. Tarkemmat ohjeet ADC-16 englanninkielisessä User Manual issa. Oletetaan että muuntimen kaikki johdot on kytketty anturiin, käyttöjännite
Tietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Taulukon edut Taulukon haitat Taulukon haittojen välttäminen Dynaamisesti linkattu lista Linkatun listan solmun määrittelytavat Lineaarisen listan toteutus dynaamisesti linkattuna
LABORATORIOTYÖ 3 VAIHELUKITTU VAHVISTIN
LABORATORIOTYÖ 3 VAIHELUKITTU VAHVISTIN Päivitetty: 23/01/2009 TP 3-1 3. VAIHELUKITTU VAHVISTIN Työn tavoitteet Työn tavoitteena on oppia vaihelukitun vahvistimen toimintaperiaate ja käyttömahdollisuudet
OPERAATIOVAHVISTIMET 2. Operaatiovahvistimen ominaisuuksia
KAJAANIN AMMATTIKORKEAKOULU Tekniikan ja liikenteen ala TYÖ 11 ELEKTRONIIKAN LABORAATIOT H.Honkanen OPERAATIOVAHVISTIMET 2. Operaatiovahvistimen ominaisuuksia TYÖN TAVOITE Tutustua operaatiovahvistinkytkentään
Tietoliikennesignaalit & spektri
Tietoliikennesignaalit & spektri 1 Tietoliikenne = informaation siirtoa sähköisiä signaaleja käyttäen. Signaali = vaihteleva jännite (tms.), jonka vaihteluun on sisällytetty informaatiota. Signaalin ominaisuuksia
AV-muotojen migraatiotyöpaja - ääni. KDK-pitkäaikaissäilytys 2013 -seminaari 6.5.2013 / Juha Lehtonen
AV-muotojen migraatiotyöpaja - ääni KDK-pitkäaikaissäilytys 2013 -seminaari 6.5.2013 / Juha Lehtonen Äänimuodot Ääneen vaikuttavia asioita Taajuudet Äänen voimakkuus Kanavien määrä Näytteistys Bittisyvyys
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne
Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:
1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri
Supply jännite: Ei kuormaa Tuuletin Vastus Molemmat DC AC Taajuus/taajuudet
S-108.3020 Elektroniikan häiriökysymykset 1/5 Ryhmän nro: Nimet/op.nro: Tarvittavat mittalaitteet: - Oskilloskooppi - Yleismittari, 2 kpl - Ohjaus- ja etäyksiköt Huom. Arvot mitataan pääasiassa lämmityksen
1 db Compression point
Spektrianalysaattori mittaukset 1. Työn tarkoitus Työssä tutustutaan vahvistimen ja mixerin perusmittauksiin ja spektrianalysaattorin toimintaan. 2. Teoriaa RF- vahvistimen ominaisuudet ja käyttäytyminen
TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:
KILPAILIJAN TEHTÄVÄT Kilpailijan nimi / Nro: Tehtävän laatinut: Hannu Laurikainen, Deltabit Oy Kilpailutehtävä Kilpailijalle annetaan tehtävässä tarvittavat ohjelmakoodit. Tämä ohjelma on tehty laitteen
Arduino ohjelmistokehitys
Arduino ohjelmistokehitys http://www.arduino.cc/ jak Sisältö Mikä on Arduino? Ohjelmistonkehitysympäristö (Arduino IDE) Ohjelmointikieli Esimerkkejä Lähteitä Arduino -ohjelmistokehitys/ jak 2 Mikä on Arduino?
KON-C3004 Kone- ja rakennustekniikan laboratoriotyöt Tiedonkeruu ja analysointi Panu Kiviluoma
KON-C34 Kone- ja rakennustekniikan laboratoriotyöt Tiedonkeruu ja analysointi Panu Kiviluoma Mitattava suure Tarkka arvo Mittausjärjestelmä Mitattu arvo Ympäristö Mitattava suure Anturi Signaalinkäsittely
KÄYTTÖOHJE PEL 1000 / PEL 1000-M
V1.0 (19.02.2015) 1 (8) KÄYTTÖÖNOTTO Asennus - Lähetin tulisi asentaa mittauskohdan yläpuolelle kondensoitumisongelmien välttämiseksi. - Kanavan ylipaine mitataan siten, että kanavan mittayhde yhdistetään
Signaalien datamuunnokset
Signaalien datamuunnokset Datamuunnosten teoriaa Muunnosten taustaa Muunnosten teoriaa Muunnosten rajoituksia ja ongelmia Petri Kärhä 06/02/2004 Luento 4a: Signaalien datamuunnokset 1 Digitaalitekniikan
Signaalien datamuunnokset. Digitaalitekniikan edut
Signaalien datamuunnokset Datamuunnosten teoriaa Muunnosten taustaa Muunnosten teoriaa Muunnosten rajoituksia ja ongelmia Petri Kärhä 09/02/2009 Signaalien datamuunnokset 1 Digitaalitekniikan edut Tarkoituksena
Laskuharjoitus 2 ( ): Tehtävien vastauksia
TT12S1E Tietoliikenteen perusteet Metropolia/A. Koivumäki Laskuharjoitus 2 (11.9.2013): Tehtävien vastauksia 1. Eräässä kuvitteellisessa radioverkossa yhdessä radiokanavassa voi olla menossa samanaikaisesti
U-REMIX USB RF 2 RF 1 POWER
LANGATON MIKROFONIJÄRJESTELMÄ MIKSERILLÄ MUSIC MIC 1 MIC 2 TONE ECHO USB RF 1 RF 2 SD OFF/ON /V- /V+ MODE IN LOW HIGH MIN MAX POWER KÄYTTÖOPAS VASTAANOTIN/MIKSERI Etupaneeli 1 2 3 13 15 USB MUSIC MIC 1
ELEC-A4010 Sähköpaja Arduinon väylät tutuiksi
ELEC-A4010 Sähköpaja Arduinon väylät tutuiksi Risto Järvinen 2.11.2015 Luennon sisältö Alustus: Väylät, mitä ja miksi. Alustus: logiikka-analysaattori. Yleisnäkymä Arduino/AVR:n väyliin. Väylä: I2C Väylä:
HARJOITUSTYÖ: LabVIEW, Liiketunnistin
Tämä käyttöohje on kirjoitettu ESR-projektissa Mikroanturitekniikan osaamisen kehittäminen Itä-Suomen lääninhallitus, 2007, 86268 HARJOITUSTYÖ: LabVIEW, Liiketunnistin Tarvittavat laitteet: PC Labview
////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä. #include <EEPROM.h> #include <SoftwareSerial.h>
////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä #include #include SoftwareSerial gps(0, 1); // RX, TX -pinnit const int buttonpinset = 2; // painonäppäimen
1 Tehtävän kuvaus ja analysointi
Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.
PR 3100 -SARJA ASENNUS JA KYTKENTÄ
PR 3100 SARJA ASENNUS JA KYTKENTÄ 3100V105 3114V101 FIN Yksiköitä voi syöttää 24 VDC ± 30 % jännitteellä suoraan johdottamalla tai johdottamalla maks. 130 yksikköä rinnakkain toisiinsa. 3405tehonliitäntäyksikkö
Anturit ja Arduino. ELEC-A4010 Sähköpaja Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka
Anturit ja Arduino Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka Anturit ja Arduino Luennon sisältö 1. Taustaa 2. Antureiden ominaisuudet 3. AD-muunnos 4. Antureiden lukeminen Arduinolla
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne
Radioamatöörikurssi 2017
Radioamatöörikurssi 2017 Elektroniikan kytkentöjä 7.11.2017 Tatu Peltola, OH2EAT 1 / 20 Suodattimet Suodattaa signaalia: päästää läpi halutut taajuudet, vaimentaa ei-haluttuja taajuuksia Alipäästösuodin
Ch4 NMR Spectrometer
Ch4 NMR Spectrometer Tässä luvussa esitellään yleistajuisesti NMR spektrometrin tärkeimmät osat NMR-signaalin mittaaminen edellyttää spektrometriltä suurta herkkyyttä (kykyä mitata hyvin heikko SM-signaali
MITTAUSTEKNIIKAN LABORATORIOTYÖOHJE TYÖ 9 MITTAUSTIEDON KERUU JA KÄSITTELY
OAMK / Tekniikan yksikkö MITTAUSTEKNIIKAN LABORATORIOTYÖOHJE TYÖ 9 MITTAUSTIEDON KERUU JA KÄSITTELY Heikki Kurki TEHTÄVÄN MÄÄRITTELY TEORIA VÄLINEET Työn tehtävänä on tutustua mittausjärjestelmään, jossa
ELEC-C5070 Elektroniikkapaja (5 op)
(5 op) Luento 3, osa 2 PSoC (yksityiskohtaisempi esittely) 1. luennolta: Programmable System-on-Chip (PSoC) Ohjelmoitava järjestelmä vain yhdellä mikropiirillä PSoC 1,3,4,5 eri suoritustasoja Tietoa: www.cypress.com
Multivibraattorit. Bistabiili multivibraattori:
Multivibraattorit Elektroniikan piiri jota käytetään erilaisissa kahden tason systeemeissä kuten oskillaattorit, ajastimet tai kiikkut. Multivibraattorissa on vahvistava elementtti ja ristiinkytketyt rvastukset
Radioamatöörikurssi 2015
Radioamatöörikurssi 2015 Polyteknikkojen Radiokerho Radiotekniikka 5.11.2015 Tatu Peltola, OH2EAT 1 / 25 Vahvistimet Vahvistin ottaa signaalin sisään ja antaa sen ulos suurempitehoisena Tehovahvistus,
Digitaalinen audio
8003203 Digitaalinen audio Luennot, kevät 2005 Tuomas Virtanen Tampereen teknillinen yliopisto Kurssin tavoite Johdanto 2 Tarjota tiedot audiosignaalinkäsittelyn perusteista perusoperaatiot, sekä niissä
Perusmittalaitteet 2. Yleismittari Taajuuslaskuri
Mittaustekniikan perusteet / luento 4 Perusmittalaitteet 2 Digitaalinen yleismittari Yleisimmin sähkötekniikassa käytetty mittalaite. Yleismittari aajuuslaskuri Huomaa mittareiden toisistaan poikkeaat
Numeeriset menetelmät
Numeeriset menetelmät Luento 13 Ti 18.10.2011 Timo Männikkö Numeeriset menetelmät Syksy 2011 Luento 13 Ti 18.10.2011 p. 1/43 p. 1/43 Nopeat Fourier-muunnokset Fourier-sarja: Jaksollisen funktion esitys
Varauspumppu-PLL. Taulukko 1: ulostulot sisääntulojen funktiona
Varauspumppu-PLL Vaihevertailija vertaa kelloreunoja aikatasossa. Jos sisääntulo A:n taajuus on korkeampi tai vaihe edellä verrattuna sisääntulo B:hen, ulostulo A on ylhäällä ja ulostulo B alhaalla ja
ELEC-C5070 Elektroniikkapaja (5 op)
(5 op) Luento 3, osa 2 PSoC (yksityiskohtaisempi esittely / JM) Alkuluennolta: Programmable System-on-Chip (PSoC) Ohjelmoitava järjestelmä vain yhdellä mikropiirillä PSoC 1,3,4,5LP eri suoritustasoja Tietoa:
Mono- ja stereoääni Stereoääni
1 Mitä ääni on? Olet ehkä kuulut puhuttavan ääniaalloista, jotka etenevät ilmassa näkymättöminä. Ääniaallot käyttäytyvät meren aaltojen tapaan. On suurempia aaltoja, jotka ovat voimakkaampia kuin pienet
TYÖ 2: OPERAATIOVAHVISTIMEN PERUSKYTKENTÖJÄ
TYÖ 2: OPERAATIOVAHVISTIMEN PERUSKYTKENTÖJÄ Työselostus xxx yyy, ZZZZZsn 25.11.20nn Automaation elektroniikka OAMK Tekniikan yksikkö SISÄLLYS SISÄLLYS 2 1 JOHDANTO 3 2 LABORATORIOTYÖN TAUSTA JA VÄLINEET
A / D - MUUNTIMET. 2 Bittimäärä 1. tai. A / D muunnin, A/D converter, ADC, ( Analog to Digital Converter )
A / D - MUUNTIMET A / D muunnin, A/D converter, ADC, ( Analog to Digital Converter ) H. Honkanen Muuntaa analogisen tiedon ( yleensä jännite ) digitaalimuotoon. Lähtevä data voi olla sarja- tai rinnakkaismuotoista.
Arduinon ohjelmointi. Sami-Petteri Pukkila. 6. helmikuuta 2017
Sami-Petteri Pukkila sami-petteri.pukkila@aalto.fi Mistä kaikki lähtee liikkeelle? Ennen kuin alat ohjelmoimaan, mieti mitä projektissa kannattaa tehdä. Jaa projekti pieniin osaprojekteihin ja kehitä näille
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena
Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja
Laskuharjoitus 4 ( ): Tehtävien vastauksia
TT12S1E Tietoliikenteen perusteet Metropolia/A. Koivumäki Laskuharjoitus 4 (2.10.2013): Tehtävien vastauksia 1. Tutkitaan signaalista näytteenotolla muodostettua PAM (Pulse Amplitude Modulation) -signaalia.
z muunnos ja sen soveltaminen LTI järjestelmien analysointiin
z muunnos ja sen soveltaminen LTI järjestelmien analysointiin muunnoksella (eng. transform) on vastaava asema diskreettiaikaisten signaalien ja LTI järjestelmien analyysissä kuin Laplace muunnoksella jatkuvaaikaisten
Tietotyypit ja operaattorit
Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto
Väliraportti: Vesipistekohtainen veden kulutuksen seuranta, syksy Mikko Kyllönen Matti Marttinen Vili Tuomisaari
Väliraportti: Vesipistekohtainen veden kulutuksen seuranta, syksy 2015 Mikko Kyllönen Matti Marttinen Vili Tuomisaari Projektin eteneminen Projekti on edennyt syksyn aikana melko vaikeasti. Aikataulujen
Mikrokontrollerit. Mikrokontrolleri
Mikrokontrollerit S-108.2010 Elektroniset mittaukset 18.2.2008 Mikrokontrolleri integrointi säästää tilaa piirilevyllä usein ratkaisu helpompi ja nopeampi toteuttaa ohjelmallisesti prosessori 4-64 bittinen
Sisällys. 15. Lohkot. Lohkot. Lohkot
Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet
1 Vastaa seuraaviin. b) Taajuusvasteen
Vastaa seuraaviin a) Miten määritetään digitaalisen suodattimen taajuusvaste sekä amplitudi- ja vaihespektri? Tässä riittää sanallinen kuvaus. b) Miten viivästys vaikuttaa signaalin amplitudi- ja vaihespektriin?
Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.
Lämpötilahälytin Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi. Laite koostuu Arduinokortista ja koekytkentälevystä. Hälyttimen toiminnat ohjelmoidaan Arduinolle.
HARJOITUSTYÖ: LabVIEW, Kiihtyvyysanturi
Tämä käyttöohje on kirjoitettu ESR-projektissa Mikroanturitekniikan osaamisen kehittäminen Itä-Suomen lääninhallitus, 2007, 86268 HARJOITUSTYÖ: LabVIEW, Kiihtyvyysanturi Tarvittavat laitteet: PC Labview
Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3
15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet
Tapahtumapohjainen ohjelmointi. Juha Järvensivu juha.jarvensivu@tut.fi 2007
Tapahtumapohjainen ohjelmointi Juha Järvensivu juha.jarvensivu@tut.fi 2007 Sisältö Tapahtumapohjainen ohjelmointi Käyttöliittymän rakenne Pääikkuna (top-level window) Lapsi-ikkuna (child window) Dialogit
Vahvistimet. Käytetään kvantisointi alue mahdollisimman tehokkaasti Ei anneta signaalin leikkautua. Mittaustekniikka
Vahvistimet Vahvistaa pienen jännitteen tai virran suuremmaksi Vahvistusta voidaan tarvita monessa kohtaa mittausketjua (lähetys- ja vastaanottopuolella) Vahvistuksen valinta Käytetään kvantisointi alue
Värähtelymittaus Tämän harjoituksen jälkeen:
Värähtelymittaus Tämän harjoituksen jälkeen: ymmärrät mittausvahvistimen käytön ja differentiaalimittauksen periaatteen, olet kehittänyt osaamista värähtelyn mittaamisesta, siihen liittyvistä ilmiöstä
Nopeuden määrittäminen äänen perusteella
Nopeuden määrittäminen äänen perusteella Fysiikan viksututkielma 2005 Juho Roponen Valkeakosken aikuislukio/ Päivölän kansanopisto Tiivistelmä Tutkimuksen ensisijaisena tavoitteena oli kehittää passiivinen
FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL
FinFamily PostgreSQL 1 Sisällys / Contents FinFamily PostgreSQL... 1 1. Asenna PostgreSQL tietokanta / Install PostgreSQL database... 3 1.1. PostgreSQL tietokannasta / About the PostgreSQL database...