Ukazka jak udelat z obycejneho (trznicoveho) pianka MIDI klavesy pro pocitac. MIDI komunickace je mozna pouze smerem z klaves do pocitace, nikoliv obracene. Zarizeni lze tedy pouzit jako klavesnici pro ovladani MIDI programu a editoru, coz je urcite pohodlnejsi, nez tukani tonu z klavesnice. Funkce piana zustava zachovana. Zapojeni a komentovany zdrojovy kod pro PIC je take mozne pouzit jako predlohu pro dalsi programovani s vyuzitim MIDI apod. Zarizeni bylo stavene pro konkretni druh pianka CASIO SA-20, pro jine typy vyzaduje nutnost zmerit osciloskopem nebo log. analyzatorem chovani cipu piana a upravu zdrojoveho kodu pro PIC. Pro nektere typy piana nebude mozne zapojeni vubec pouzit.
Kdyz jsem do sveho pocitace konecne pred casem nainstaloval "lepsi" zvukovou kartu, vyvstal prede mnou problem MIDI klaves. Nabidka v obchode me tehdy zrovna nepotesila a tak, protoze nejsem profesionalni hudebnik a nepotrebuji "dynamiku uhozu" ani poradne velike klavesy (vlastne mi slo jen o to, moci si obcas zahrat a v pocitaci to pak pripadne dopilovat), me napadla myslenka predelat me existujici minipianko CASIO SA-20 na MIDI klavesnici.
Jak jsem zjistil, pianko melo vevnitr klavesnicovou matici 6x8 (vlastne 7x8 ale v sedmem radku bylo jen jedno tlacitko) s diodou v serii u kazdeho spinace (aby se dal vyhodnotit stav kazdeho tlacitka zvlast). Dlouho jsem vahal, jak to upravit, abych pokud mozno zachoval i drivejsi funkci pianka. Take me trosku trapil nedostatek I/O pinu na PIC16C84, ktery jsem tam chtel pouzit (pouze 12 IO pinu, jeden nutny na vystup MIDI).
Nakonec jsem prisel na jedno velice efektni
zapojeni. Zamyslel jsem se, zdali vubec potrebuji odpojit stavajici procesor a jestli by nebylo lepsi ho tam nechat
a pouze sledovat jeho cyklus cteni. Cela idea vychazela z toho, ze cip pianka bude natolik pomaly pri cteni stavu
sbernice, abych jej stihl nasledovat. S osciloskopem jsem se vydal jeho chovani probadat a stesti mi pralo. Podle
vsech predpokladu cip periodicky nastavoval vsech 7 budicu radku postupne do urovne "H" a pri tom vzdy
cetl stav 8 sloupcu matice. Nastaveni jednoho radkoveho budice vzdy trvalo alespon 70usec, takze casu na paralelni
precteni stavu sloupcu v zavislosti na budicich radku bylo spousta. Puvodni myslenka, ze budu jednim vstupem
testovat stav budice prvniho radku a az se nastavi do "H" , budu v definovanych intervalech snimat stavy
vsech dalsich radku, se ukazala jako nemozna, protoze doba "scanovani" nebyla presne definovana, ale
kolisala podle stavu piana. Samozrejme dalsi moznosti by bylo snimani vsech radkovych budicu, ale tam byl opet
problem s volnym poctem vstupu do PIC. Nakonec me napadlo, ze pouziji jeden vstup (z prvniho
budice radku) jako definici zacatku cyklu a druhy vstup, na ktery budou pres diody svedene vsechny dalsi
liche radky (logicka suma). Vychazel jsem z toho, ze cip piana okamzite po shozeni
jednoho radku do "L" nastavoval dalsi do "H", takze jsem mohl posleze definovat tento protokol
snimani:
- Cekej az bude In1 v "H"
- Bezpecnostni pauza (par usec)
- Sejmi na brane RB(0 az 7) stav radku 1
- Cekej az bude In1 v "L" - predpokladam, ze po konci radku 1 prichazi radek 2
- Bezpecnostni pauza (par usec)
- Sejmi na brane RB(0 az 7) stav radku 2
- Cekej az bude In2 v "H" - In 2 kopiruje stav budice radku 3
- Bezpecnostni pauza (par usec)
- Sejmi na brane RB(0 az 7) stav radku 3
- Cekej az bude In2 v "L"
- Bezpecnostni pauza (par usec)
- Sejmi na brane RB(0 az 7) stav radku 4
- Cekej az bude In2 v "H"
- Bezpecnostni pauza (par usec)
- Sejmi na brane RB(0 az 7) stav radku 5
atd.....
Zbytek zapojeni uz pak byl jednoduchy. Vsechny vstupy z cipu do PIC jsou osetreny odpory (cip ma napajeci napeti 6V), vystup z PIC na MIDI jde primo na konektor zvukove karty (bez optickeho oddeleni, cili je negovany - pokud by se pouzil MIDI kabel, je nutne na MIDI+ pripojit +5V -pres odpor 220ohm, MIDI- vystup IO - pres odpor 220ohm), PIC je napajen (5V) take odtamtud (konektor DB15 na karte). Schema zapojeni je pak na obrázku. Ve schematu jsou sloupce vykreslene jako radky a radky jako sloupce.
Program pro PIC je trosku slozitejsi. Z duvodu poctu nutnych RAM registru se program uz nevejde do PIC16C54 a potrebuje tedy nejaky procesor s vetsi pameti RAM, trebas PIC16C84 apod. Tento program neslouzi ani jako navod ke stavbe zarizeni, spise jako ukazka programovani MIDI na PIC. Pokud by si nekdo chtel upravovat jine podobne klavesy, mel by vedet jaka je u nich matice, jaka polarita na budicich, jak vypada snimaci cyklus, kolikrat za sec. se snima apod. a podle toho upravit program, jinak to patrne nebude chodit.
Take jsem si v programu vyhral s par "extra" MIDI funkcemi, jako trebas uprava sily uhozu, PITCH apod., coz nyni ovladam ze sekce specialnich klaves piana. Uvedene funkce mohou byt zcela vynechane, nebo treba upravene opet podle konkretnich klaves.
Zakladem programu je cekaci smycka na stav klaves. Pokud se 4x po sobe sejme stejny stav, je to hodnoceno jako O.K. (osetreni zakmitu) a program pokracuje dale. Nejprve se vyhodnoti s predchozim "O.K." stavem, zdali nedoslo ke zmene stavu nektere klavesy (stlacena, nebo pustena). Pokud ano odesle se MIDI povel "NOTE ON/OFF". Pokud bylo zmen vice, poslou se povely pro vsechny zmeny.
Pote nasleduje sekce specialnich klaves. Uvedu jen jejich funkci, reseni se da vycist z programu.
- PITCH: 10 klaves je urceno na ovladani PITCH, neboli jemne vysky tonu. Prvni 4 funguji tak, ze pri stisku snizi/zvysi vysku tonu o ton/pulton. Pri pusteni pak resetuji PITCH do stredni (normalni) hodnoty. Zbylych 6 klaves ruznou rychlosti pri stisknuti snizuje nebo zvysuje PITCH (dokud jsou stisknute). Tim lze docilit trebas efektu klesajiciho zvuku apod. Po jejich pouziti je obvykle nutne stisknout nektere z predchozich tlacitek, aby se po jeho uvolneni PITCH vyresetoval do stredni polohy.
- VELOCITY: Dve klavesy, po stisknuti pridaji a nebo uberou na sile uhozu vsech dalsich not. Obvykle funguji a lze je pouzit jako VOLUME
- FIRSTNOTE: Dve klavesy, po stisknuti posunou o oktavu niz a nebo vys. Tak zle i s malymi klavesami obsahnout celou stupnici. Pokud v dobe stisku klavesy byla stisknuta i nejaka nota, zustane hrat i nadale.
- Maly RESET: vrati pocatecni nastaveni oktavy a hlasitosti
- Velky RESET: Pomoc z nouze - vrati vsechny parametry zpet a umlci vsechny klavesy