Можете дать ссылку об этом? Нужна ли доработка моего "красного шелда", где НЕТ МИДИ входа? Или это как раз и решает проблему чисто софтово?
Ссылку наверняка можно получить по запросу типа "Arduino vs1053b realtime midi".
Мне даже кажется, что коды плагина приведены и в какой-то документации от производителя vs1053, но наверняка можно найти и среди любительских проектов.
Лично я пользуюсь этим фрагментом:
//Write to VS10xx register
//SCI: Data transfers are always 16bit. When a new SCI operation comes in DREQ goes low. We then have to wait for DREQ to go high again.
//XCS should be low for the full duration of operation.
void VSWriteRegister(unsigned char addressbyte, unsigned char highbyte, unsigned char lowbyte){
while(!pinRead(VS_DREQ)) ; //Wait for DREQ to go high indicating IC is available
SPI.beginTransaction (VS1053B_START);
pinOutLow(VS_XCS); //Select control
//SCI consists of instruction byte, address byte, and 16-bit data word.
SPI.transfer(0x02); //Write instruction
SPI.transfer(addressbyte);
SPI.transfer(highbyte);
SPI.transfer(lowbyte);
while(!pinRead(VS_DREQ)) ; //Wait for DREQ to go high indicating command is complete
pinOutHigh(VS_XCS); //Deselect Control
SPI.endTransaction ();
}
// Plugin to put VS10XX into realtime MIDI mode
// Originally from http://www.vlsi.fi/fileadmin/software/VS10XX/vs1053b-rtmidistart.zip
// Permission to reproduce here granted by VLSI solution.
const PROGMEM unsigned short sVS1053b_Realtime_MIDI_Plugin[] = { /* [28] Compressed plugin */
0x0007, 0x0001, 0x8050, 0x0006, 0x0014, 0x0030, 0x0715, 0xb080, /* 0 */
0x3400, 0x0007, 0x9255, 0x3d00, 0x0024, 0x0030, 0x0295, 0x6890, /* 8 */
0x3400, 0x0030, 0x0495, 0x3d00, 0x0024, 0x2908, 0x4d40, 0x0030, /* 10 */
0x0200, 0x000a, 0x0001, 0x0050, 0x0003, 0x0001, 0xd800 // добавлена команда увел.частоты: d800->r3 (x4.5+1.5)
}; // 0x9800: x3.5+1.5, 0xa00: x4.0+0.0, 0xb800: x4.0+1.5, 0xc00: x4.5+0.0, 0xe00: x5.0+0.0
void VSLoadUserCode(void) {
int i = 0;
while (i<sizeof(sVS1053b_Realtime_MIDI_Plugin)/sizeof(sVS1053b_Realtime_MIDI_Plugin[0])) {
unsigned short addr, n, val; // pgm_read_word_near(&glideStepArray[glide])
addr = pgm_read_word_near(&sVS1053b_Realtime_MIDI_Plugin[i++]);
n = pgm_read_word_near(&sVS1053b_Realtime_MIDI_Plugin[i++]);
while (n--) {
val = pgm_read_word_near(&sVS1053b_Realtime_MIDI_Plugin[i++]);
VSWriteRegister(addr, val >> 8, val & 0xFF);
}
}
}
Кстати, в исходнике приведена и ссылка на то, что я брал за основу.
Я, правда, чуть дополнил плагин - увеличил тактовую частоту процессора, т.к. он, вообще-то, в основном предназначался для MP3 и подобного. А СТЕРЕО - это, грубо говоря, полифония в 2 голоса. А когда нужно обеспечить, скажем, 64 голоса, то производительности при обычных 12 МГц уже явно не хватает. Пропускает ноты. Поэтому пришлось в несколько раз приподнять частоту.
Да, MIDI-вход на шилд не выведен. Если бы был выведен, то, насколько я понял документацию, можно было бы обойтись без плагина. А так - только через SPI. Но, отчасти, это и лучше - скорость SPI существенно выше. Вот только вместо одного байта всегда нужно передавать два (DSP 16-разрядный и что такое один байт он просто не знает).
Собственно, сама команда посылается так:
//Sends a MIDI command/data. Doesn't check to see that cmd is greater than 127, or that data values are less than 127
void talkMIDI(byte cmd, byte data1, byte data2) {
while (!pinRead(VS_DREQ)); // Wait for chip to be ready (Unlikely to be an issue with real time MIDI)
SPI.beginTransaction (VS1053B_HiFreq);
pinOutLow(VS_XDCS);
SPI.transfer(0);
SPI.transfer(cmd);
// sendMIDI(cmd);
//Some commands only have one data byte. All cmds less than 0xBn have 2 data bytes
//(sort of: http://253.ccarh.org/handout/midiprotocol/)
if( (cmd & 0xF0) <= 0xB0 || (cmd & 0xF0) >= 0xE0) {
SPI.transfer(0);
SPI.transfer(data1);
SPI.transfer(0);
SPI.transfer(data2);
} else {
SPI.transfer(0);
SPI.transfer(data1);
}
pinOutHigh(VS_XDCS);
SPI.endTransaction ();
}
Я понял. Перечитал вчера и весь пост... Вы смотрите вперед более чем я.... Ок. МИДИ ведь вы же запустили от клавы? Гугл выдает ссылки на realTime MIDI путем софта, но везде требуется GPIO. У Вас точно была такая же плата как у меня? GPIO портов нет и МИДИ входа нет? Если другая, - я не стану даже "копать" вопрос, просто куплю на ЕБЕЕ другую. Но ...
К сожалению во всех трех местах, где я заказывал, товар уже закончился, поэтому точных ссылок на продавца дать не могу. Но выглядит так:
Я Вам очень признателен:)) . Меня смутило отсутствие GPIO в красной плате, а в синей он вроде есть. Разберусь))) У меня успехи, не сглазить бы... 2 шелда + 2 ардуино. На обоих СД по одному MP3, аудио и клик, записанным синхронно. И также синхронно все играет! Задержка не потребовалась (пока)... Файлы меняю, пишу новые - задержка одна и та же. Буду пробовать на разных СД, и разное количество файлов.... посмотрим время на чтение/поиск секторов... А с МИДИ - проблемы.... Шелд воспроизводит МИДИ совершенно с иным темпом, относительно исходного.
А с МИДИ - проблемы.... Шелд воспроизводит МИДИ совершенно с иным темпом, относительно исходного.
Ту я подсказать не могу - даже не пытался проигрывать MIDI-файлы при помощи шилда. Только MP3 файлы - для проверки, а в остальных случаях - исключительно realtime MIDI. То есть даже если мне нужно было проиграть что-то записанное, за темпом следила Ардуина, а не шилд.
Пытаюсь подключить VS1053 Shield к такому дифусилителю. Входы "в воздухе" отлично усиливаются, т.е. тракты работают. Земля и питания LM358, Арудиино и Шелда общие. (Про петли и помехи не говорим). На гнезде шелда при прослушивании на наушник 30 ом тоже все нормально. Теперь каждый выход гнезда 3,5 мм подсоединяю к соответ. входам ... к 10 коМ где. Общий провод гнезда НЕ трогаю. Никакого звука через LM не наблюдаю((((
М.б. я схему зря "урезал" при сборке? Ссылку потерял((( И там наверху что-то важное было? Стабил справа вверху явно не обязателен. Искусственных земель нет.
А так проект (1 стадия) почти закончена. LСD индикатор, энкодер, выбор трека по префиксу, синхронизация 2-х шелдов... все отлично!
Я бы неинвертирующие входы посадил на общий vs1053 (тот, что нельзя соединять с землей).
Тем более, что делитель пополам напряжения питания для 358 - не оптимальный вариант: это специфический несимметричный усилитель, у которого допустимые напряжения входа и выхода с одной стороны почти вплотную подходят к минусу питания (в пределах десятков мВ), а с другой - на 1.5 В отстоят от плюса питания. Так что там оптимально устанавливать не 2.5, а где-то 1.7-1.8 В.
Ну а вообще - надо смотреть осциллографом, что происходит на входе и на выходе.
И разделительный конденсатор в 100 нФ для такой схемы маловато, нужно - на порядок больше.
Единственная замеченная неприятность, что сигнал нельзя снимать между звуковыми выходами и землей. Вместо земли допустимо использовать исключительно специальный общий контакт, который и выведен на гнездо. Соединять этот контакт общий с землей недопустимо.
Схему полную нашел. Конечно - она не панацея... Боюсь, что кучу времени уйдет на запуск еще и унч... И ничего не понял про 1,7...2,5 в(((
Итак, задача "подключить балансный выход к небалансному входу". Это так гуглить? Или это некое "мостовое включение"? Осциллографом смотрю сигнал на выходе шелда: и относительно "третьей точки" гнезда и относительно общего (земли) шелда - сигнал присутствует (шум пока не важен). Вывод: "Можно просто брать сигнал как обычно". Но - не работает.. Далее: вход "в воздухе" прослушивается вроде как 50 гц, но если второй рукой взять общий LM358 сигнал пропадет... через 2 сек. Т.е. якобы это самовозбуждение, а не наводка, и уповать что схема "усиливает" не стоит. Что еще предпринять?
Через 5 часов... Пробовал и с отдельным питанием и разные включения и земли ... В итоге: Вы уверены, что стерео аудио выход надо обязательно брать с 3,5 гнезда, где есть "третья точка"?
У меня тот же звук, если беру относительно общего самомо шелда. Что, видимо, и хотел сказать автор той схемы. Если Вы, andriano, понимаете, ( я не очень), то мб. вообще не нужен никакой доп.каскад, а просто вывести новый джек на корпус, но землю взять общую? (Вопрос отсутствия буфера для длинного провода, кз, наводок и прочего пока не рассматриваем).
Видимо, я плохо объясняю. Почитайте дэйташит на LM358. Надеюсь, там написано вразумительнее.
Цитата:
Осциллографом смотрю сигнал на выходе шелда: и относительно "третьей точки" гнезда и относительно общего (земли) шелда - сигнал присутствует (шум пока не важен). Вывод: "Можно просто брать сигнал как обычно". Но - не работает..
Странно это.
Мне всегда казалось, что при наличии осциллографа всегдла можно найти проблему: вот здесь сигнал еще есть, а здесь - его уже нет. Значит, проблема между этими двумя точками.
Цитата:
Через 5 часов... Пробовал и с отдельным питанием и разные включения и земли ... В итоге: Вы уверены, что стерео аудио выход надо обязательно брать с 3,5 гнезда, где есть "третья точка"?
Я уверен, что так работает. А также уверен в том, что потенциалы земли и общего контакта выхода отличаются. Но, вполне вероятно, что можно снимать сигнал и относительно земли, если использовать разделительные конденсаторы.
Цитата:
мб. вообще не нужен никакой доп.каскад, а просто вывести новый джек на корпус, но землю взять общую?
Попробуйте, но не забудьте про разделительные конденсаторы.
Без Вашей помощи я бы его не сделал, или делал еще дольше)))) МИДИ часть будет в виде пикового детектора, обработке аудио кликов по прерыванию (потянет ли проц? Там непростые алгоритмы, скажем измерения периода по эталонному таймеру. А процу еще и аудио выводить:((,) вывода МИДИ ссобщений на разъем DIN5. Он так же может работать как вход для задач синтезатора (перспектива).
Можете дать ссылку об этом? Нужна ли доработка моего "красного шелда", где НЕТ МИДИ входа? Или это как раз и решает проблему чисто софтово?
Ссылку наверняка можно получить по запросу типа "Arduino vs1053b realtime midi".
Мне даже кажется, что коды плагина приведены и в какой-то документации от производителя vs1053, но наверняка можно найти и среди любительских проектов.
Лично я пользуюсь этим фрагментом:
Кстати, в исходнике приведена и ссылка на то, что я брал за основу.
Я, правда, чуть дополнил плагин - увеличил тактовую частоту процессора, т.к. он, вообще-то, в основном предназначался для MP3 и подобного. А СТЕРЕО - это, грубо говоря, полифония в 2 голоса. А когда нужно обеспечить, скажем, 64 голоса, то производительности при обычных 12 МГц уже явно не хватает. Пропускает ноты. Поэтому пришлось в несколько раз приподнять частоту.
Да, MIDI-вход на шилд не выведен. Если бы был выведен, то, насколько я понял документацию, можно было бы обойтись без плагина. А так - только через SPI. Но, отчасти, это и лучше - скорость SPI существенно выше. Вот только вместо одного байта всегда нужно передавать два (DSP 16-разрядный и что такое один байт он просто не знает).
Собственно, сама команда посылается так:
Я понял. Перечитал вчера и весь пост... Вы смотрите вперед более чем я.... Ок. МИДИ ведь вы же запустили от клавы? Гугл выдает ссылки на realTime MIDI путем софта, но везде требуется GPIO. У Вас точно была такая же плата как у меня? GPIO портов нет и МИДИ входа нет? Если другая, - я не стану даже "копать" вопрос, просто куплю на ЕБЕЕ другую. Но ...
К сожалению во всех трех местах, где я заказывал, товар уже закончился, поэтому точных ссылок на продавца дать не могу. Но выглядит так:
и так:
MIDI порта нет, передавал через SPI.
Я Вам очень признателен:)) . Меня смутило отсутствие GPIO в красной плате, а в синей он вроде есть. Разберусь))) У меня успехи, не сглазить бы... 2 шелда + 2 ардуино. На обоих СД по одному MP3, аудио и клик, записанным синхронно. И также синхронно все играет! Задержка не потребовалась (пока)... Файлы меняю, пишу новые - задержка одна и та же. Буду пробовать на разных СД, и разное количество файлов.... посмотрим время на чтение/поиск секторов... А с МИДИ - проблемы.... Шелд воспроизводит МИДИ совершенно с иным темпом, относительно исходного.
А с МИДИ - проблемы.... Шелд воспроизводит МИДИ совершенно с иным темпом, относительно исходного.
Ту я подсказать не могу - даже не пытался проигрывать MIDI-файлы при помощи шилда. Только MP3 файлы - для проверки, а в остальных случаях - исключительно realtime MIDI. То есть даже если мне нужно было проиграть что-то записанное, за темпом следила Ардуина, а не шилд.
Пытаюсь подключить VS1053 Shield к такому дифусилителю. Входы "в воздухе" отлично усиливаются, т.е. тракты работают. Земля и питания LM358, Арудиино и Шелда общие. (Про петли и помехи не говорим). На гнезде шелда при прослушивании на наушник 30 ом тоже все нормально. Теперь каждый выход гнезда 3,5 мм подсоединяю к соответ. входам ... к 10 коМ где. Общий провод гнезда НЕ трогаю. Никакого звука через LM не наблюдаю((((
М.б. я схему зря "урезал" при сборке? Ссылку потерял((( И там наверху что-то важное было? Стабил справа вверху явно не обязателен. Искусственных земель нет.
А так проект (1 стадия) почти закончена. LСD индикатор, энкодер, выбор трека по префиксу, синхронизация 2-х шелдов... все отлично!
А почему Вы решили, что это дифусилитель?
Я бы неинвертирующие входы посадил на общий vs1053 (тот, что нельзя соединять с землей).
Тем более, что делитель пополам напряжения питания для 358 - не оптимальный вариант: это специфический несимметричный усилитель, у которого допустимые напряжения входа и выхода с одной стороны почти вплотную подходят к минусу питания (в пределах десятков мВ), а с другой - на 1.5 В отстоят от плюса питания. Так что там оптимально устанавливать не 2.5, а где-то 1.7-1.8 В.
Ну а вообще - надо смотреть осциллографом, что происходит на входе и на выходе.
И разделительный конденсатор в 100 нФ для такой схемы маловато, нужно - на порядок больше.
Единственная замеченная неприятность, что сигнал нельзя снимать между звуковыми выходами и землей. Вместо земли допустимо использовать исключительно специальный общий контакт, который и выведен на гнездо. Соединять этот контакт общий с землей недопустимо.
Схему полную нашел. Конечно - она не панацея... Боюсь, что кучу времени уйдет на запуск еще и унч... И ничего не понял про 1,7...2,5 в(((
Итак, задача "подключить балансный выход к небалансному входу". Это так гуглить? Или это некое "мостовое включение"? Осциллографом смотрю сигнал на выходе шелда: и относительно "третьей точки" гнезда и относительно общего (земли) шелда - сигнал присутствует (шум пока не важен). Вывод: "Можно просто брать сигнал как обычно". Но - не работает.. Далее: вход "в воздухе" прослушивается вроде как 50 гц, но если второй рукой взять общий LM358 сигнал пропадет... через 2 сек. Т.е. якобы это самовозбуждение, а не наводка, и уповать что схема "усиливает" не стоит. Что еще предпринять?
Через 5 часов... Пробовал и с отдельным питанием и разные включения и земли ... В итоге: Вы уверены, что стерео аудио выход надо обязательно брать с 3,5 гнезда, где есть "третья точка"?
У меня тот же звук, если беру относительно общего самомо шелда. Что, видимо, и хотел сказать автор той схемы. Если Вы, andriano, понимаете, ( я не очень), то мб. вообще не нужен никакой доп.каскад, а просто вывести новый джек на корпус, но землю взять общую? (Вопрос отсутствия буфера для длинного провода, кз, наводок и прочего пока не рассматриваем).
И ничего не понял про 1,7...2,5 в(((
Видимо, я плохо объясняю. Почитайте дэйташит на LM358. Надеюсь, там написано вразумительнее.
Осциллографом смотрю сигнал на выходе шелда: и относительно "третьей точки" гнезда и относительно общего (земли) шелда - сигнал присутствует (шум пока не важен). Вывод: "Можно просто брать сигнал как обычно". Но - не работает..
Странно это.
Мне всегда казалось, что при наличии осциллографа всегдла можно найти проблему: вот здесь сигнал еще есть, а здесь - его уже нет. Значит, проблема между этими двумя точками.
Через 5 часов... Пробовал и с отдельным питанием и разные включения и земли ... В итоге: Вы уверены, что стерео аудио выход надо обязательно брать с 3,5 гнезда, где есть "третья точка"?
Я уверен, что так работает. А также уверен в том, что потенциалы земли и общего контакта выхода отличаются. Но, вполне вероятно, что можно снимать сигнал и относительно земли, если использовать разделительные конденсаторы.
мб. вообще не нужен никакой доп.каскад, а просто вывести новый джек на корпус, но землю взять общую?
Без Вашей помощи я бы его не сделал, или делал еще дольше)))) МИДИ часть будет в виде пикового детектора, обработке аудио кликов по прерыванию (потянет ли проц? Там непростые алгоритмы, скажем измерения периода по эталонному таймеру. А процу еще и аудио выводить:((,) вывода МИДИ ссобщений на разъем DIN5. Он так же может работать как вход для задач синтезатора (перспектива).