Control Change MIDI Bascom Pomocy!
Control Change MIDI Bascom Pomocy!
Witam, zabawę z bascomem i midi zacząłem nie dawno. Chcę zbudować kontroler midi który miałby 16 przycisków z komunikatami kontrol change od 102 do 118. Ja nie mam pomysłów jak to wykonać bo w symulacji gdy nacisne przycisk od np. control change 102 to przez UART wysyłane jest polecenie ileś razy na sekundę. Prosiłbym o wzór programu dla jednego przycisku. Z góry dziękuję i proszę o szybką odp. bo niestety artykuł z edw mi nie pomógł.
Może napisz jaki procesor używasz. Kiedyś w Elektronice Praktycznej był taki projekt, program był na 8051 i zajmował chyba 2KB, wiec pewnie na ATTiny2313 się to da zrobić.
Co do powtarzania się wysyłania komendy po naciśnięciu przycisku, musisz zrobić to tak ze jak naciśniesz przycisk, wysyłasz 1 komendę, i musisz czekać na jego puszczenie.
Co do powtarzania się wysyłania komendy po naciśnięciu przycisku, musisz zrobić to tak ze jak naciśniesz przycisk, wysyłasz 1 komendę, i musisz czekać na jego puszczenie.
Właśnie z nieba mi spadasz
chce wykorzystać attiny2313 i dobrze określiłeś problem.
Nie mam pojęcia jak zrobić by wysłał jedną komendę i czekał na puszczenie przycisku. A dało by się zrobić coś w rodzaju polifonii? Mam zamiar zrobić klawiaturke 4x4 i właśnie z niej wysyłać komendy control change i wiem że żeby ona sama była polifoniczna wstawia się do przycisku szeregowo diodkę (tak czytałem). Jbc to polifonia opcjonalnie nie musi być ale by dobrze działało.
Nie mam pojęcia jak zrobić by wysłał jedną komendę i czekał na puszczenie przycisku. A dało by się zrobić coś w rodzaju polifonii? Mam zamiar zrobić klawiaturke 4x4 i właśnie z niej wysyłać komendy control change i wiem że żeby ona sama była polifoniczna wstawia się do przycisku szeregowo diodkę (tak czytałem). Jbc to polifonia opcjonalnie nie musi być ale by dobrze działało.
Projekt był publikowany w EP 3/96 w dziele Projekty Czytelników pod nazwą "Klawiatura muzyczna do komputerów osobistych"
W urządzeniu była 48 (4 oktawy) przyciskowa klawiatura + 2 przyciski do sterowania. Na upartego urządzenie można skopiwać na AT89C2051.
Tylko RS232 nadawał tam na 31250b/sek ? No chyba że standard MIDI takiego wymaga ?
W urządzeniu była 48 (4 oktawy) przyciskowa klawiatura + 2 przyciski do sterowania. Na upartego urządzenie można skopiwać na AT89C2051.
Tylko RS232 nadawał tam na 31250b/sek ? No chyba że standard MIDI takiego wymaga ?
1. Mi się wydaje że taki jest ten standard. Czyli z tego zo napisałeś był to kontroler 48 klawiszy z komendami: note on, note off, czyli podmieniając je na control change można by używać do (w tym przypadku) sterowania abletonem?
2. Niby artykuł ok ale ten czytelnik napisał go bodajże w asemblerze a ja bym potrzebował znać funkcje, sposoby na problem wysłania jednego komunikatu i czekania do poki nie puszcze przycisku w BASCOMIE.
2. Niby artykuł ok ale ten czytelnik napisał go bodajże w asemblerze a ja bym potrzebował znać funkcje, sposoby na problem wysłania jednego komunikatu i czekania do poki nie puszcze przycisku w BASCOMIE.
-
keruseykaryu
ramisto pisze:Nie mam pojęcia jak zrobić by wysłał jedną komendę i czekał na puszczenie przycisku.
Skanowanie klawiatury i porównywanie jej z poprzednim stanem - zapamiętanym w zmiennej, tablicy czy jak wolisz. Jak stan taki sam to mijasz polecenia wysyłania komunikatów midi.ramisto pisze:Mam zamiar zrobić klawiaturke 4x4
Polifonia? Nieznaczna modyfikacja. Przy porównaniu z poprzednim stanem, jak stan się nie zgadza to sprawdzasz co się stało z klawiszem (puścił, nacisnął) i wtedy decyzja jaki komunikat midi wysłać.
No niestety proste metody typu While pin=cośtam : Wend albo Bitwait port, który; się nie sprawdzą. Klawiatura musi być skanowana cały czas.
-
keruseykaryu
Kod: Zaznacz cały
'---------------------------------------------------------------------------
' (c) 1995-2005, MCS Electronics
' PCINT_CHANGE.BAS
' This sample shows how to use the PC interrupts
'---------------------------------------------------------------------------
$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200
Print "{027}[2J"; ' when you have a terminal emulator, this will clear the screen
Print "Test M88 ints" ' init message
'The M88 and M168 can detect a level change on all port pins.
'We will just check on portB, pins 0-3
Config Portb = Input
Portb = &HF 'activate pull up
Enable Interrupts 'enable global ints
Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
On Pcint0 Isr_pcint0 'we jump to this label when one of the pins is changed
Pcmsk0 = &B00001111 'enable pcint0-pcint3 (portb.0-portb.3)
'With pcmsk you individual select which pins must react on a logic level
'When you write a 1, the change in logic level will be detected.
Do
nop
'you can do anything here
'But we show how to use the pin level change in manual mode without interrupts
'Say we want to detect logic level change of pin 23, (PINC.0) / INT8
Config Pinc.0 = Input 'you can also detect output changes but we use input
Pcmsk1 = &B00000001 ' enable the bit of PCINT8 which is in PCMSK1
If Pcifr.pcif1 = 1 Then ' change detected
Print "pinc.0 has changed" 'in this case it must be pinc.0
Pcifr.pcif1 = 1 ' write a 1 to clear the flag so we can detect it again
End If
Loop
Isr_pcint0:
Print "Pin change " ; Bin(pcmsk0) ; Spc(3) ; Bin(pinb)
'As you see the mask does not change, so to find out which pin changed,
'you need to read the PINB register.
Return
End