MSP430 programozás Energia környezetben. Nem élhetek muzsikaszó nélkül

Hasonló dokumentumok
MSP430 programozás Energia környezetben. Analóg jelek mérése

MSP430 programozás Energia környezetben. Szervó motorok vezérlése

MSP430 programozás Energia környezetben. LED kijelzok második rész

MSP430 programozás Energia környezetben. LED kijelzok második rész

MSP430 programozás Energia környezetben. Hétszegmenses LED kijelzok

Megszólal a Kütyü. Arduino bevezető hangszóró vezérlése 1 / 5 oldal

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

UH-zongora - zenélés mikrokontrollerrel

Bevezetés az elektronikába

MSP430 programozás Energia környezetben

Bevezetés a mikrovezérlők programozásába: Ismerkedés az Arduino fejlesztői környezettel

MSP430 programozás Energia környezetben. LED mátrix vezérlése MAX7219 IC-vel

MSP430 programozás Energia környezetben. Az I/O portok kezelése

Programozás és Digitális technika I. Pógár István eng.unideb.hu/pogari

MSP430 programozás Energia környezetben. Az első lépések

Mintavételes szabályozás mikrovezérlő segítségével

Bevezetés a mikrovezérlők programozásába: DC motorok vezérlése

Bevezetés a mikrovezérlők programozásába: I/O portok kezelése, számrendszerek, bitműveletek

Hobbi Elektronika. 1. Témakörök, célkitűzés, hozzávalók

Az MSP430 mikrovezérlők digitális I/O programozása

Bevezetés a mikrovezérlők programozásába: Programciklusok szervezése, analóg I/O

Mérési útmutató. A/D konverteres mérés. // Első lépésként tanulmányozzuk a digitális jelfeldolgozás előnyeit és határait.

Ismerkedés az MSP430 mikrovezérlőkkel

Megjegyzés: A leírás abszolút kezdők számára készült elnézést azoktól, akik ezen a szinten már túlvannak!

Bevezetés a mikrovezérlők programozásába: LCD kijelzők

Bevezetés a mikrovezérlők programozásába: Az Arduino, mint logikai analizátor

MSP430 programozás Energia környezetben. Digitális szenzorok

Bevezetés az elektronikába

BASH script programozás II. Vezérlési szerkezetek

MSP430 programozás Energia környezetben. Alfanumerikus LCD kijelzok

Bevezetés a mikrovezérlők programozásába: Léptetőmotorok vezérlése

MSP430 programozás Energia környezetben. Nokia 5110 grafikus kijelzo vezérlése

Készítette: Ruzsinszki Gábor webmaster442

Bevezetés a mikrovezérlők programozásába: MAX6958: Hétszegmenses LED kijelző vezérlő

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

MSP430 programozás Energia környezetben. Digitális szenzorok I2C kommunikációval

Algoritmus fogalma. Mi az algoritmus? HF: Al Khwarizmi. Egy adott probléma megoldásának leírása elemi lépések sorozatával

A ChipScope logikai analizátor

Léptetőmotorok. Előnyök: Hátrányok:

T Bird 2. AVR fejlesztőpanel. Használati utasítás. Gyártja: BioDigit Kft. Forgalmazza: HEStore.hu webáruház. BioDigit Kft, Minden jog fenntartva

Labor 2 Mikrovezérlők

RC tag mérési jegyz könyv

Vegyes témakörök. A KAT120B kijelző vezérlése Arduinoval

Bevezetés a mikrovezérlők programozásába: WS2812 RGB LED-ek vezérlése

A MINI SZATELLITTŐL A SUMO-ROBOTIG

Bevezetés az elektronikába

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Occam 1. Készítette: Szabó Éva

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Dr. Schuster György október 14.

Vegyes témakörök. 5. Gagyiszkóp házilag hangfrekvenciás jelek vizsgálata. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

Vegyes témakörök. ARDUINO a kispénzű amatőrök PLC-je. Hobbielektronika csoport 2017/2018. Debreceni Megtestesülés Plébánia

Labor gyakorlat Mikrovezérlők

Bevezetés a mikrovezérlők programozásába: Vezérlési szerkezetek, relációs operátorok

Programozás I gyakorlat

Arduino bevezető Szenzorhálózatok és alkalmazásaik

Programozás I. gyakorlat

Bevezetés az elektronikába

Rekurzió. Dr. Iványi Péter

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

1. Témakörök, célkitűzés, hozzávalók. Hobbielektronika csoport 2015/2016

Labor gyakorlat Mikrovezérlők

1. Alapok. Programozás II

USB I/O kártya. 12 relés kimeneti csatornával, 8 digitális bemenettel (TTL) és 8 választható bemenettel, mely analóg illetve TTL módban használható.

Programozási Nyelvek: C++

DropsA VIP-5 Külső vezérlőegység Telepített és mobil alkalmazásokhoz. Kezelési és karbantartási utasítás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Bevezetés a mikrovezérlők programozásába: Fényérzékelés, fénymérés





























Analóg elektronika - laboratóriumi gyakorlatok

Átírás:

MSP430 programozás Energia környezetben Nem élhetek muzsikaszó nélkül 1

Hogyan zenélhetünk a mikrovezérlő segítségével? Egyszerű hangkeltési módszer: Négyszöghullámokat keltünk valamelyik kimeneten A kimenetre hangszórót vagy piezo hangjelzőt kötünk (a felvett teljesítmény illesztésére ügyelve!) Hátrányok: Gyenge hangminőség A négyszögjel zavaró felharmonikusokat tartalmaz A jel korlátozott információtartalmú Előnyök: Egyszerűség, kis erőforrás-igény Olcsó 2

A piezo hangkeltő bemutatása Működési elv Felépítés Linkek: http://www.buzzer-speaker.com/manufacturer/introduction%20of%20piezo%20buzzer.htm http://www.engineersgarage.com/insight/how-piezo-buzzer-works 3

Hozzávalók 1 db passzív piezo buzzer 1 db 100 Ω-os ellenállás 2 db átkötő vezeték (F + M) 1 db dugaszolós próbapanel 1 db Launchpad kártya 4

Emlékeztető: I/O térkép 5

Huzalozási vázlat A piezo buzzer-t egy 100 Ω-os soros ellenálláson keresztül, vagy közvetlenül kössük be! A piezo buzzer polarizált, a pozitív jelzésű kivezetést a P2_6 lábra (XIN), a másik lábat pedig földre kötjük. Vásárlásnál arra ügyeljünk, hogy a piezo hangkeltő ne tartalmazzon oszcillátort, mert akkor csak egy frekvencián szól tisztán! 6

Hangkeltéssel kapcsolatos függvények tone() Négyszögjelet kelt a megadott kimeneten a megadott frekvenciával (és 50 %- os kitöltéssel). Opcionálisan megadható egy időtartam, különben a hang addig szól, amíg egy notone() függvényhívás le nem állítja a hangot. A hangkeltésre használt kivezetéshez hangszóró vagy piezo buzzer köthető. Szintaxis: notone() tone(kivezetés, frekvencia) tone(kivezetés, frekvencia, időtartam) Leállítja a hangkeltést a megadott kivezetésen. Szintaxis: notone(kivezetés) 7

Csapjunk zajt! const int buzzerpin = 19; void setup() { Lab06/MakeNoise.ino void loop() { tone(buzzerpin, 698, 500); // 698Hz = Note F5. Hold note for 500ms delay(500); // delay between tones (Adrian Fernandez, Dung Dang: Getting Started with the MSP430 Launchpad) Megjegyzések: Az 500 ms-os időtartam nem jelenti azt, hogy a program végrehajtása leállna a hangkeltés időtartamára! Ezért minden tone() hívás után kell egy várakozás. A tone() hívásban szereplő időtartam csupán azt jelenti, hogy annyi idő múltán leáll a hangkeltés. Tapasztalatok szerint az Energiában a megadott időtartamnak csupán kb. a feléig szól a hang (staccato?). Legato hangkeltéshez duplázni kell a tone()- nak átadott időtartamokat! Megoldás: a Tone.cpp forráskódjának javítása. 8

Tone.cpp javítása Az energia-01010e0010/hardware/msp430/cores/msp430 mappában nyissuk meg a Tone.cpp állományt! Keressük meg az alábbi sort: tone_periods[n] = (duration * (F_TIMER/2)) / (1000L * tone_interval[n]); Vegyük ki belőle a fölösleges kettővel történő osztást! tone_periods[n] = (duration * F_TIMER) / (1000L * tone_interval[n]); Mentsük el a kijavított forráskódot! 9

Skálázzunk! const int buzzerpin = 19; int numtones = 10; Lab06/PlayingScale.ino int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440 ; // mid C C# D D# E F F# G G# A void setup() { for (int i = 0; i < numtones; i++) { tone(buzzerpin, tones[i]); delay(500); notone(buzzerpin); void loop() { // Nothing to do here. Press RESET to play again! Link: http://learn.adafruit.com/adafruit-arduino-lesson-10-making-sounds/playing-a-scale A tones[] tömb változó bevezetése a 10 db szám összefogott kezelését teszi lehetővé. Enélkül nem tudnánk for ciklusba szervezni a hangok lejátszását, mindet ki kellene írni. 10

Dallam megadás ABC-s hangokkal #include "pitches.h int buzzerpin = 19; // notes in the melody: int melody[] = { NOTE_C4,NOTE_C4,NOTE_D4,NOTE_C4,NOTE_F4,NOTE_E4, NOTE_C4,NOTE_C4,NOTE_D4,NOTE_C4,NOTE_G4,NOTE_F4, NOTE_C4,NOTE_C4,NOTE_C5,NOTE_A4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_D4, NOTE_AS4,NOTE_AS4,NOTE_A4,NOTE_F4,NOTE_G4,NOTE_F4; // note durations: 4 = quarter note, 8 = eighth note, etc.: int notedurations[] = {4,4,2,2,2,1,4,4,2,2,2,1,4,4,2,2,4,4,2,1,4,4,2,2,2,1; void setup() { pinmode(buzzerpin,output); void loop() { for (int thisnote = 0; thisnote < 26; thisnote++) { int noteduration = 1000/noteDurations[thisNote]; tone(buzzerpin, melody[thisnote],noteduration); int pausebetweennotes = noteduration + 50; delay(pausebetweennotes); notone(buzzerpin); Lab06/BirthdayTune.ino //noteduration = időtartam // stop the tone playing (Adrian Fernandez, Dung Dang: Getting Started with the MSP430 Launchpad) 11

Dallam megadás ABC-s Név frekvencia (Hz) hangokkal #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880... C C# D D# E F 1 oktáv pitches.h A lejátszandó dallam hangjainak magasságát az előre definiált konstansokkal is megadhatjuk. A program elején ehhez be kell csatolni a pitches.h állományt. 12

Hogyan lesz a kottából zene? 13

Hogyan lesz a kottából zene? 14

Betlehem városba #include "pitches.h #define NOTE_P 0 //Pause as zero frequency const int buzzerpin = 19; // notes in the melody: const int melody[] = { NOTE_F4,NOTE_F4, NOTE_F4, NOTE_C5,NOTE_D5,NOTE_C5, NOTE_AS4,NOTE_AS4,NOTE_AS4,NOTE_AS4,NOTE_C5,NOTE_AS4, NOTE_A4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_P, NOTE_F4,NOTE_F4, NOTE_F4, NOTE_C5,NOTE_D5,NOTE_C5, NOTE_AS4,NOTE_AS4,NOTE_AS4,NOTE_AS4,NOTE_C5,NOTE_AS4, NOTE_A4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_P, NOTE_A4,NOTE_G4,NOTE_C5, NOTE_AS4,NOTE_A4,NOTE_G4, NOTE_P, NOTE_A4,NOTE_G4,NOTE_C5, NOTE_AS4,NOTE_A4,NOTE_G4, NOTE_P, NOTE_F4,NOTE_F4, NOTE_F4, NOTE_C5,NOTE_D5,NOTE_C5, NOTE_AS4,NOTE_AS4,NOTE_AS4,NOTE_AS4,NOTE_C5,NOTE_AS4, NOTE_A4, NOTE_G4,NOTE_G4,NOTE_F4,NOTE_P ; int num = 64; // total number of notes and spaces // note durations: 4 = quarter note, 8 = eighth note, etc.: const int notedurations[] = { 8,8,8,4,8,8,8,8,8,4,8,8,8,8,8,4,4, 8,8,8,4,8,8,8,8,8,4,8,8,8,8,8,4,4, 4,8,8,8,8,8,4,4,8,8,8,8,8,4, 8,8,8,4,8,8,8,8,8,4,8,8,4,8,8,3 ; Lab06/Betlehem_varosba.ino const = az adat a flash memóriában tárolódik (legalábbis remélem) 15

Betlehem városba A program további része nagyjából megegyezik a korábbiakkal (lásd: BirthdayTune.ino) Az eltérések: Hosszabb a dallam (most 64 hang/szünet van) Lassab tempót kell használni (1000/noteDuration helyett 1500/noteDuration kell) void setup() { pinmode(buzzerpin,output); Lab06/Betlehem_varosba.ino void loop() { for (int thisnote = 0; thisnote < num; thisnote++) { int noteduration = 1500/noteDurations[thisNote]; tone(buzzerpin, melody[thisnote],noteduration); int pausebetweennotes = noteduration + 50; delay(pausebetweennotes); notone(buzzerpin); //noteduration = időtartam // stop the tone playing 16

Polifónia lehetséges-e? Az MSP430G2553 mikrovezérlő a tone() függvénnyel legfeljebb 3 hang egyidejű megszólaltatására képes Módszer: A Timer0 időzítő mindhárom Capture/Compare csatornáját megszakítás keltésére használja a tone() függvény, s a megszakításokban történik a kimenetek állapotának átbillentése és az időtartam ellenőrzése. #include "pitches.h" const int buzzerpin1 = 8; const int buzzerpin2 = 9; const int buzzerpin3 = 10; void setup() { Lab06/Polyphony.ino void loop() { tone(buzzerpin1, NOTE_C4, 1500); delay(500); tone(buzzerpin2, NOTE_E4, 1500); delay(500); tone(buzzerpin3, NOTE_G4, 1000); delay(500); tone(buzzerpin1, NOTE_C5, 500); delay(1000); 17