www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

MIDI tipka, MIDI tester

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Zbirka projektov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Milek
Član
Član



Pridružen-a: Ned 02 Avg 2015 13:50
Prispevkov: 117
Aktiv.: 0.90
Kraj: Maribor

PrispevekObjavljeno: Tor Sep 16, 2025 6:16 pm    Naslov sporočila:  MIDI tipka, MIDI tester Odgovori s citatom

Jesenski projekt: Izdelava MIDI MISW-01 tipke/testerja.

MIDI tipka:
Včasih pri DAW-u potrebujemo tipko, ki jo bomo uporabili za določene funkcije. Ker ima večina naprav MIDI vhod/izhod je enostavna rešitev z MIDI tipko.
Sami bomo za to aplikacijo sprogramirali uC, zadošca 8 bitni atmega328 in arduino IDE. Ker bomo tipko uporabljali/vklapljali s stopalom je dobro, da je v kovinskem ohišju.
-programiramo Arduino (sam sem uporabil nano verzijo), naloženo moramo imeti MIDI.h knjižnico

in program:

Koda:

#include <MIDI.h>

// Spremenljivke gumba
int buttonVal = 0; // vrednost, prebrana iz gumba
int buttonPlay = 3; // pin D3 Predvajaj
int ledPin = 13; // ledika

// Ustvari in poveže MIDI vmesnik s privzetim serijskim vrati strojne opreme
MIDI_CREATE_DEFAULT_INSTANCE();

// spremenljivka nastavitev
int D1count = 0;

void setup()
{
MIDI.begin(MIDI_CHANNEL_OMNI); // Poslušaj vsa dohodna sporočila
// nastavitev tipke
pinMode(buttonPlay, INPUT);

digitalWrite(buttonPlay, HIGH);

// inicializiraj LED pin kot izhod:
pinMode(ledPin, OUTPUT);

}

void loop()
{
// Preberi stanje gumba
buttonVal = digitalRead(buttonPlay);

// preveri, ali je gumb pritisnjen. Če je, je buttonState na LOW:
if(buttonVal == LOW)
{
D1count++; // povečaj 'count' za 1
if(D1count > 1)
D1count = 0;
delay(200); // čakaj 200 milisekund
}

if (D1count == 0 && buttonVal == LOW) {
// prvi ukaz
play();
}
if (D1count == 1 && buttonVal == LOW){
// drugi ukaz
playdrugi();
}

// preverimo prihajajoče sporočilo
//MIDI.read();
}

void play()
{
// Pošlji CC 27 z vrednostjo 0 na kanalu 2
MIDI.sendControlChange(27, 0, 2);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(500);
//MIDI.sendControlChange(27, 0, 2);
}

void playdrugi()
{
// Pošlji CC 27 z vrednostjo 127 na kanal 2
MIDI.sendControlChange(27, 127, 2);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(500);
//MIDI.sendControlChange(27, 0, 2);
}


Sestavljanje:
-preizkusimo ga s programom MIDI-OX http://www.midiox.com/
-če vse deluje ok, sledi vgradnja v ohišje
-lahko si izdelamo tudi vezje na tiv plošcico
-uporabimo masivno tipko, zaradi robustnosti mora zdržati večje pritiske
-za tipko lahko izdelamo tudi uporo, da se ob uporabi ne zlomi
-ko smo vse sestavili, še zalijemo z vročim lepilom
-uporabimo lahko 9V/300mA adpater, ali kakšen podoben, vezje ni velik potrošnik

Sam sem uporabil komando CC27 (hex) vrednost 127 na drugem kanalu (glasnost/mute na digitalni mešalni mizi):

MIDI.sendControlChange(27, 127, 2)
MIDI.sendControlChange(27, 0, 2) mute

MIDI komando lahko spremenite glede na vaše zahteve, ena tipka ima lahko tudi dve funkciji, daljši pritisk pritisk tipke je lahko druga komanda. Sam sem uporabil samo vklop in izklop.
Vezje lahko vgradite tudi v drugo ohišje, kaj vam leži doma.


MIDI-tester:
Če bomo izdelali vezje kot MIDI tester, je lahko navadna tipka/taster brez ohišja, potrebujete samo 5V na pin 5V ali adapter, ki ga vežete na RAW pin Anano.

in program:

Koda:

#include <MIDI.h>

// Spremenljivke gumba
int buttonVal = 0; // vrednost, prebrana iz gumba
int buttonPlay = 3; // pin D3 Predvajaj
int ledPin = 13; // ledika

// Ustvari in poveže MIDI vmesnik s privzetim serijskim vrati strojne opreme
MIDI_CREATE_DEFAULT_INSTANCE();

void setup()
{
MIDI.begin(MIDI_CHANNEL_OMNI); // Poslušaj vsa dohodna sporočila
// nastavitev tipke
pinMode(buttonPlay, INPUT);

digitalWrite(buttonPlay,HIGH);

// inicializiraj LED pin kot izhod:
pinMode(ledPin, OUTPUT);

}

void loop()
{
// Preberi stanje gumba
buttonVal = digitalRead(buttonPlay);

// preveri, ali je gumb pritisnjen. Če je, je buttonState nastavljen na HIGH:
if (buttonVal == LOW) {
// predvajaj in vklopi LED:
play();
digitalWrite(ledPin, HIGH);

} else {
// izklopi LED:
digitalWrite(ledPin, LOW);

}

// Preberi dohodna sporočila
//MIDI.read();

}

void play()

{
// Pošlji 24 not z vrednostjo 127 na kanalu 1
MIDI.sendNoteOn(60, 127, 1);
MIDI.sendNoteOn(62, 127, 1);
MIDI.sendNoteOn(64, 127, 1);
MIDI.sendNoteOn(66, 127, 1);
MIDI.sendNoteOn(68, 127, 1);
MIDI.sendNoteOn(70, 127, 1);
MIDI.sendNoteOn(72, 127, 1);
MIDI.sendNoteOn(74, 127, 1);
MIDI.sendNoteOn(76, 127, 1);
MIDI.sendNoteOn(78, 127, 1);
MIDI.sendNoteOn(80, 127, 1);
MIDI.sendNoteOn(82, 127, 1);
MIDI.sendNoteOn(84, 127, 1);
MIDI.sendNoteOn(86, 127, 1);
MIDI.sendNoteOn(88, 127, 1);
MIDI.sendNoteOn(90, 127, 1);
MIDI.sendNoteOn(92, 127, 1);
MIDI.sendNoteOn(94, 127, 1);
MIDI.sendNoteOn(96, 127, 1);
MIDI.sendNoteOn(98, 127, 1);
MIDI.sendNoteOn(100, 127, 1);
MIDI.sendNoteOn(102, 127, 1);
MIDI.sendNoteOn(104, 127, 1);
MIDI.sendNoteOn(106, 127, 1);
delay (1000);
// Pošlji 24 not z vrednostjo 0/izklop na kanalu 1
MIDI.sendNoteOn(60, 0, 1);
MIDI.sendNoteOn(62, 0, 1);
MIDI.sendNoteOn(64, 0, 1);
MIDI.sendNoteOn(66, 0, 1);
MIDI.sendNoteOn(68, 0, 1);
MIDI.sendNoteOn(70, 0, 1);
MIDI.sendNoteOn(72, 0, 1);
MIDI.sendNoteOn(74, 0, 1);
MIDI.sendNoteOn(76, 0, 1);
MIDI.sendNoteOn(78, 0, 1);
MIDI.sendNoteOn(80, 0, 1);
MIDI.sendNoteOn(82, 0, 1);
MIDI.sendNoteOn(84, 0, 1);
MIDI.sendNoteOn(86, 0, 1);
MIDI.sendNoteOn(88, 0, 1);
MIDI.sendNoteOn(90, 0, 1);
MIDI.sendNoteOn(92, 0, 1);
MIDI.sendNoteOn(94, 0, 1);
MIDI.sendNoteOn(96, 0, 1);
MIDI.sendNoteOn(98, 0, 1);
MIDI.sendNoteOn(100, 0, 1);
MIDI.sendNoteOn(102, 0, 1);
MIDI.sendNoteOn(104, 0, 1);
MIDI.sendNoteOn(106, 0, 1);
}


--programiramo Arduino (sam sem uporabil nano verzijo), naloženo moramo imeti MIDI.h knjižnico
Test se začne ob pritisku tipke. Uporabljenih je 24 tonov, ki si sledijo MIDI.sendNoteOn(60, 127, 1), na prvem kanalu, tako lahko testiramo tudi polifonijo.

Sestavljanje:
-preizkusimo ga s programom MIDI-OX http://www.midiox.com/
- vezje lahko izdelamo kar na razvojni ploščici, glej fotko.


še seznam MIDI kontrolerjev:
kontrolerji



MIDI-tester.png
 Opis:
 Velikost datoteke:  16.38 KB
 Pogledana:  8 krat

MIDI-tester.png



DSC05147.JPG
 Opis:
 Velikost datoteke:  92.44 KB
 Pogledana:  1 krat

DSC05147.JPG



DSC06300.JPG
 Opis:
 Velikost datoteke:  65.39 KB
 Pogledana:  1 krat

DSC06300.JPG



DSC06285.JPG
 Opis:
 Velikost datoteke:  103.71 KB
 Pogledana:  0 krat

DSC06285.JPG



DSC06306.JPG
 Opis:
 Velikost datoteke:  101.29 KB
 Pogledana:  0 krat

DSC06306.JPG


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5625
Aktiv.: 23.44
Kraj: Domzale

PrispevekObjavljeno: Tor Sep 16, 2025 7:33 pm    Naslov sporočila:   Odgovori s citatom

MIDI bi moral po standardu biti galvansko locen (sprejemni del), tako da tam manjka optocoupler.

Je pa interesantno, da se tako star protokol se vedno uporablja! Kup vmesnikov je vmes ze nastalo in spet slo v pozabo, MIDI pa kar vztraja!

V bistvu gre za klasicni UART na malo bolj nenavadnem bps (31500, ce se prav spomnim), ki je na sprejemni strani galvansko locen z darlington optocouplerjem.

Lp, G

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Milek
Član
Član



Pridružen-a: Ned 02 Avg 2015 13:50
Prispevkov: 117
Aktiv.: 0.90
Kraj: Maribor

PrispevekObjavljeno: Sob Okt 04, 2025 1:23 pm    Naslov sporočila: icon_great  Odgovori s citatom

Hi,
ja, res je, če uporabimo vhod je ločen z optokoplerjem. Tukaj to ni potrebno, ker uporabljamo samo izhod.
MIDI baud rate je 31250 b/s, 8 bitni, še vedno se uporablja, zanimivo. Veliko debat je bilo za MIDI 2.0 sistem v preteklih letih, ampak mislim, da ni nadgrajen ampak svoj standard. Več tukaj.
Lp.
M.G.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Zbirka projektov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 232 dni


Powered by phpBB © 2001, 2005 phpBB Group