Перейти к содержанию

Самодельная Midi-клавиатура


Рекомендуемые сообщения

Господа. Очень нужна помощь. Хочу сделать собственную миди-клаву. Советов по поводу изобретения велосипеда не требуется, т.к. собрал уже одну на PIC16F84. Теперь хочу свою собственную на атмеге. Уже написал обработчик клавиш, и процедуру отправки байта по МИДИ-протоколу. Но вот беда - комп не понимает никаких сигналов от МК (для проверки отправляется последовательность: 0b10010000, 120, 120 (NoteOn c каналом 1, номер ноты 120, динамика 120). Комп просто молчит (никакие миди-мониторы не помогают. Пробовал также Cubase). Прикладываю схему (на всякий случай):

qp5VoPdWpD.png

Также график выходного сигнала (из Протеуса) (для наглядности показана отправка байта 0b10101010:

1dOVMKqiHS.png

Вроде все "времена" соблюдены, все "биты" по 31-32 мкс. Всего одна посылка занимает 310 мкс (видно на графике). Что не так?

Может быть дело в подключении сего девайса к миди-ин пину компьютера? Почитал про всяческие переходники, опто-развязки итд... Но ведь схема на ПИКе и аналогичные цепляются напрямую! Дело вот в чем. При подключении моей атмеги к +-5 В игрового порта, напряжение сильно падает, примерно до 2 В. Поэтому для питания ее использую автономный БП. Изучив это:

0bQ9Rfpx7B.gif

подумал, что комп понимает под "токовой посылкой" (логич 0 в МИДИ-интерфейсе) замыкание 15-го вывода на землю. Поэтому соединил 15 вывод порта компа через резистор с моим выводом МК. Массу компа (4,5 выводы) с массой МК. Может в этом дело? Помогите, пож-та!

Изменено пользователем C-r-o-w
Ссылка на комментарий
Поделиться на другие сайты

Если я не ошибаюсь, то ты посылаешь данные по каналу 0. Я тоже как то давно делал собственную миди клавиатуру. Там передается 90+номер канала (для первого канала будет 91), потом номер ноты, потом скорость нажатия (отпускания). Я тоже подключал без опторазвязки, нормально работает.

Купи два беляша и собери из них кошку

Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)

Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).

Ссылка на комментарий
Поделиться на другие сайты

Дык нулевого канала нету. 0000 (младшая тетрада байта NoteOn) соотв-ет 1-му каналу. 1111 - 16-му. Да и это неважно. Я же монитором смотрел (midimon), он все каналы мониторит, все сообщения из порта миди... Глухо...

А Вы на чем писали? Всмысле какой МК? Можете прислать мне? В протеусе не моделировали (мне для сравнения диаграмм)?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если у вас гасит мега на 2 вольта - то у вас чтото не в порядке с схемой... На миди порте идёт 5 вольт напрямую с материнки... Я один раз замкнул... Искры, комп погас... Но ничего страшного не случилось..

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Странно... Схема вроде в поряде... Правда я тестирую прошивку на моей плате от часов, там транзисторы, еще всякая всячина, микросхемы другие, может они садят питание... С компом ничего не происходит во время этого просаживания... Просто думаю схема слишком много хочет по току... Да и импульсы выдает (для проверки пробовал выдавать меандр глубиной 1 сек, чтобы мультиметр успел засечь. Все работает... Может кусок проги выложить? В нем че-нить не то?

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я писал для контроллера 89с51 среда Keil uVision.

Прикрепить не удалось, так напишу.

//******************************************************//
//		MIDI Controller			         	                         //
//   		     Panda				                                         //
//		mart 2006 year				                                 //
//******************************************************//
#include <REGx51.H>

#define on 1
#define off 0

//P0.0 - P0.3 Octave
//P0.4 - P0.7 Tone 
//P2.0 - P2.7 Tone
//TxD  - MIDI out
//Speed 31250, 1 start bit, 1 stop bit, 8 data bit
unsigned char ch;
unsigned char vpress_rel;
unsigned char offset;

void send(unsigned char i, unsigned char s)
{
unsigned char tmp;
P1_1 = 0; //led on for first chanel
tmp = 9 - s;
tmp = tmp << 4;
tmp = tmp + ch;
SBUF = tmp;
while (!TI);
TI = 0;			//first byte channel 80 or 90 + chanal number

SBUF = i;
while (!TI);
TI = 0;			//second byte note number

SBUF = vpress_rel;
while (!TI);
TI = 0;			//third byte press or release speed
P1_1 = 1;
}


void main(void)
{
unsigned char key[48];
unsigned char i,j;
int mask;
//Set baude rate 31250
TMOD = 0x22;
TH1 = 0xFF;
TL1 = 0xFF;

SCON = 0x42;
TCON = 0x20;
TR1 = 1;

P0 = 0xF0;
P2 = 0xFF;

ch = 1;
vpress_rel = 0x63;
offset = 41;
P3_3 = 0;
for (i=0; i<48; i++)
key[i] = 1;
//Keyboard scan
while (1)
{
for (j=0; j<4; j++)
{
P0 = ~(0x01 << j);
P2 = 0xFF;
mask = P0 & 0xF0;
mask = mask << 4;
mask = mask + P2;
//P0 = 0xF0;
for (i=0; i<12; i++)
{
if (((mask >> i) & 0x01) != key[j*12+i])
{ key[j*12+i] = (mask >> i) & 0x01;
 send(j*12+i+offset, key[j*12+i]);
 }
	};
}; //for

};//while
}//main

Купи два беляша и собери из них кошку

Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)

Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).

Ссылка на комментарий
Поделиться на другие сайты

Вот, что я понял из Вашей программы:

key[] - матрица 0 и 1 - состояния клавиш. В цикле идете и смотрите состояние каждой клавиши. Если оно изменилось, то запускается процедура Send с параметрами: номер клавиши tmp и состояние (нажата\отжата) s. В процедуре формируется байт на отправку tmp. И загоняется он в... Видимо в этом контроллере встроена функция отправки байтов TXD по схожему протоколу? Потому что дальше этот байт загоняется в какой-то буфер, и далее отправка идет уже на физическом уровня, насколько я понял...

Может в Атмега8 тоже есть похожая функция?

Вот мой текст программы. Очень схож с Вашим, мыслим одинаково. ))

/*****************************************************
Project : Atmega8 based MIDI-keyboard
Version : 15.09.08
Date    : 03.06.2008
Author  : Vladimir Podgoretsky
Company : OmSU
Comments: E-mail: r-a-v-e-n<dog>bk.ru, ICQ: 401118477
Chip type           : ATmega8
Clock frequency     : 8,000000 MHz
//*****************************************************/
//*****************************************************/

#include <mega8.h>
#include <delay.h>

char  i, j;
unsigned char temp1, temp2,ROWS[8];
unsigned char MATRIX[8][8];
unsigned char MatOLD[8][8];
unsigned char NoteNum;
//int eeprom *ptr_to_eeprom;

[b]SendByte(char bit7)
{
unsigned char tmp = 0b10000000; // MASK
 char k; // Counter
 PORTC.0 = 0;  // START
 delay_us(29); // START

 for (k=0; k<=7; k++)
   {
     if (bit7 & tmp)   // If sending bit is 1:
       PORTC.0 = 0; // If sending bit is 1:
     else                   // If sending bit is 0:
       PORTC.0 = 1; // If sending bit is 0:
     delay_us(29);
     tmp = tmp / 2; // Moving of the Mask to right >>
   }

 PORTC.0 = 1;  // STOP
 delay_us(29);  // STOP

}

NoteOn(char i, char j)
{
 NoteNum = i*8 + j + 1;   // Calculating of Code of Note
 SendByte(0b10010000); // Send Note-On Command with 1-st channel
 SendByte(NoteNum); // Send Data-Byte with number of Note
 SendByte(120);  // Send Press-Dynamics
}

NoteOff(char i, char j)
{
 NoteNum = i*8 + j + 1;
 SendByte(0b10000000);
 SendByte(NoteNum);
 SendByte(120);
}[/b]

//================================INTERRUPT HANDLER==================================//
//===================================================================================//
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// ~~~~~~~~~~~~~~~~~~~~~~~~~BUTTONS HANDLER~~~~~~~~~~~~~~~~~~~~~~~~~~ //
DDRD = 0x00;
PORTD = 0xFF;
DDRB = 0xFF;
PORTB = 0xFF;

temp1 = 1;
for (j=0; j<=7; j++)
 {
   PORTB = ~temp1;
   ROWS[j] = ~PIND;
   temp2 = 1;
   for (i=0; i<=7; i++)
     {
       MATRIX[i][j] = (0xFF) && (ROWS[j] & temp2);
       if (MATRIX[i][j] != MatOLD[i][j])
         {
           if (MATRIX[i][j]==1)
             NoteOn(i,j);
           if (MATRIX[i][j]==0)
             NoteOff(i,j);
         }

       MatOLD[i][j] = MATRIX[i][j];
       temp2 = temp2 * 2;
     }
   temp1 = temp1 * 2;
 }

//      MATRIX :    i - number of string
//                  j - number of column
// ~~~~~~~~~~~~~~~~~~~~~ END OF BUTTONS HANDLER ~~~~~~~~~~~~~~~~~~~~~ //
}
//===================================================================================//
//===================================================================================//

void main(void)
{
PORTB=0x00;
DDRB=0x00;
PORTC=0b00000001;
DDRC=0b00000001;
PORTD=0x00;
DDRD=0x00;

TCCR0=0x03;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x01;
ACSR=0x80;
SFIOR=0x00;
for (i=0; i<=7; i++)
 for (j=0; j<=7; j++) 
   {
     MATRIX[i][j] = 0;
     MatOLD[i][j] = MATRIX[i][j];
   }
#asm("cli");
[b]
while (1)
 {
 NoteOn(5,5);
 delay_ms(500);
 NoteOff(5,5);
 delay_ms(500);

 }[/b]
}

Ссылка на комментарий
Поделиться на другие сайты

Почитал даташит на мегу8... Есть в ней UART... Даже USART. но миди - это асинхронный протокол... поэтому надо юзать УАРТ. Правда этот вывод висит на порте Д, на котором кнопки висят, ну да ладно, или мультиплексор поставлю, чтобы линии освободить, или другой вывод задействую... например из порта Ц. Хотя лучше мультиплексор. Ладно, завтра буду разбираться с этим УАРТом. А по поводу подключения схемы к игровому порту - всё нормально? так и должно быть? (если питание автономное, то используются только земля (4 или 5) и 15 выводы порта? +5 вольт не нужно для подключения?

Ссылка на комментарий
Поделиться на другие сайты

все верно SBUF это буффер передатчика UART, все передается по уарту, пакеты одинаковые, разница только в том что выбирается фиксированная определенная скорость 31250, 1стартовый бит, 1 стоповый и в физическом интерфейсе, все. :)

Изменено пользователем Panda_y2k

Купи два беляша и собери из них кошку

Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)

Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).

Ссылка на комментарий
Поделиться на другие сайты

Сконфигурил я УАРТ на меге... В протеусе также все ОК, идут импульсы, все норм. А комп не хочет их принимать... Выхода наверно 2: либо игровой порт спалил, пока экспериментировал, либо что-то с автономным питанием. Сейчас попробую снять мегу с платы часов и просто запаяться на нее, питание, и выход УАРТа. Кварцевание внутреннее... Эх, надеюсь, заработает...

Ссылка на комментарий
Поделиться на другие сайты

Питание к стати я тоже брал с миди порта, так что отдельного блока питания у меня нет. Распиновку не помню, но могу раскрутить разъем и посмотреть если надо. Питания потребляет очень мало, ни чего не просаживается.

Купи два беляша и собери из них кошку

Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)

Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).

Ссылка на комментарий
Поделиться на другие сайты

Всем большое спасибо за внимание. Проблему решил. На материнке игровой порт не выведен в виде разъема наружу. Подключался я к нему на саму материнку. Там контакты пронумерованы... Сверху ряд - четные, снизу - нечетные (1,3..15). Оказалось, эта нумерация НЕВЕРНА!!! :angry: :angry: :angry: Нумерация идет так (слева направо): нижний ряд: 1,2,3..8, верхний: 9,10..15. Такие пироги. Так что, владельцы материнских плат Grantsdale-6A79DBKBC-00 (скопировал из какой-то утилиты), вообще на ней написано Albatron, БУДЬТЕ ОСТОРОЖНЫ! Нумерация выводов игрового порта не соответсвтует действительности!!!

Всем еще раз спасибо за внимание.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Господа, это опять я... Доделал МИДИ-клавиатуру... Но вот беда... Она ТО РАБОТАЕТ, ТО НЕ РАБОТАЕТ... В том смысле, что комп иногда понимает миди-команды, а иногда нет... В чем баг, отловить не могу. Перезагрузка компа не помогает. Только вчера вечером наблюдал в МИДИ-мониторе Note On'ы и Note Off'ы... А сейчас пусто... Есть какие-нибудь идеи? Может дрова?

P.S. В протеусе все эмулится, Virtual Terminal распознает все команды с УАРТА.

Кстати, кому интересно, могу выложить схему и исходники с прошивкой. В клаве реализована поддержка Pitch-Bend (с использованием АЦП, правда, к сожалению испытать не успел, опять черная полоса - комп опять не видит клавы), LCD-дислей, 64 нотных клавиши, 16 управляющих... Пока идет тестирование сего девайса.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...
Кстати, кому интересно, могу выложить схему и исходники с прошивкой. В клаве реализована поддержка Pitch-Bend (с использованием АЦП, правда, к сожалению испытать не успел, опять черная полоса - комп опять не видит клавы), LCD-дислей, 64 нотных клавиши, 16 управляющих... Пока идет тестирование сего девайса.

Уважаемый конечно выкладывайте! можете в ЛС что бы тему нне засорять. вашей работой очень заинтересован.

russian3ob3.png
Ссылка на комментарий
Поделиться на другие сайты

Уважаемый конечно выкладывайте! можете в ЛС что бы тему нне засорять. вашей работой очень заинтересован.

Ок, если хоть у кого-то появился интерес... Выкладываю. Думаю, можно и сюда, да простят меня модеры... )

Если будут вопросы, пишите: ася, мыло, эта тема, в конце концов.

Проблемы с "общением" платы с компьютером вроде решил - не было задержек между отправкой байтов... Добавил. Но появились другие проблемы... В-общем, пишите, обсудим!

MIDI_KEYBOARD_ATMEGA8.rar

Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...

Очень заинтересовала статья. Насколько я понял в файле прошивки записаны готовые MIDI мелодии? Выложите пожалуйста схему принципиальную получше разобраться. Какие фьюзы надо ставить при прошивке меги. Заранее благодарю. :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

К сожалению, мое упущение, что схему не вложил в файл в графическом формате типа .jpg или .png. Если Вас не затруднит, поставьте Proteus (например, версии 7). Там в архиве есть файл проекта (если не ошибаюсь, расширение .dsn). После отркытия можно будет увидеть как саму схему, так и просимулировать ее, т.е. посмотреть работоспособность.

Все-таки, настоятельно рекомендую Вам это сделать, т.к. проект не доведен до логического завершения, его надо допиливать напильником.

Готовых МИДИ-мелодий там нет. В-общем, ставьте, проверяйте. А там уже будем разбираться с фьюзами, если интерес не пропадет.

Ссылка на комментарий
Поделиться на другие сайты

Уже больше 2-х лет прошло! У меня так где то и валяется незаконченная платка. Всё таки было бы круто завершить проект, так как в инете не много таких проектов, а на момент создания этой темы вообще небыло.

russian3ob3.png
Ссылка на комментарий
Поделиться на другие сайты

Согласен, инфы тогда было реально мало, особенно с исходниками и под нормальные МК... Но сейчас совсем нет времени все вспоминать, и доводить до конца. Поэтому, чем смог, поделился. А там уж сами допиливайте, азы из исходников можно понять. )

Ссылка на комментарий
Поделиться на другие сайты

  • 7 лет спустя...
Цитата

...Теперь хочу свою собственную на атмеге...

добрый день

C-r-o-w, 

схемой не поделитесь? 

- проект более не развивается?

спасибо

 

Ссылка на комментарий
Поделиться на другие сайты

спасибо, краб, огромное! от вас меньшего и не ожиЖдал!!! прям вот так вот с сылками, примерами, своими пояснениями, что лучше, вот тут вот, так-то, вот тут такая-то фенечка, вот эту вот я только вчера настраивал а... вот эту тЁще установил в туалет, пусть помнит зятька...!!!

p.s. если не сложно, аргументируйте, я обязательно прочитаю, ознакомлюсь и приму к сведения! :thank_you2:

 

Изменено пользователем sunjob
!!!
Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, sunjob сказал:

если не сложно, аргументируйте, я обязательно прочитаю, ознакомлюсь и приму к сведения!

да элементарно - взял себе и сыну в довесок к нескольким синтезаторам пару миди-клав на Аукционах - CME U-KEY за 35 у.е. и CME Mkey за 25 у.е. И они разные постоянно появляются в продаже в нете на торговых площадках ...

Какой смысл что-то делать самому при такой цене ?

 

 

12345.jpg

123456.jpg

На днях, перебирая хлам, нашел платку от АОН, на которой я начинал делать миди-клаву лет 15-20 назад .... посмеялся над потраченным временем и под нож ее ...

Нужны еще аргументы?

Изменено пользователем KRAB
Ссылка на комментарий
Поделиться на другие сайты

Цитата

Нужны еще аргументы?

конечно нужны, че-бы мы тут делали без них?! :o)

сейчас "изучаю тему", как отпишусь, с вопросами, мымслями, приглашаю к беседе (стукну в личку)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...