Эффекты на мк...
#61
Отправлено 02 октября 2010 - 17:34
#62
Отправлено 13 октября 2010 - 19:46
http://elm-chan.org/.../img/rwtest.png
Мне же всего 32кбс нужно, и пишу я по 512б за раз.
По скромным подсчетам ммцшки 256мб, если равномерно(как я собираюсь) писать на нее хватит на 6,5 лет О_О.
Так народ, стоит или нет добавлять переключаемые куски примочек? Тоесть аналоговый перегруз?
#63
Отправлено 28 ноября 2010 - 14:19
В свете есть иное диво - FRAM называется.
http://www.ramtron.com/products/nonvolatil...ory/serial.aspx
SPI 40МГц
Циклов перезаписи в районе 10E14.
Выношу на суд общественности
JTAG 20pin (такой дешевле в нашем сельпо)
Номиналы обвязки не расставил. Пока это не важно.
Кодек мастер на I2S.
Управление кодеком по SPI.
FRAM тоже на SPI - хранить настройки. А может и не только настройки...
Куча кнопок на INT0 прерывании, хотя, наверное, можно и просто опрашивать.
МК тактируется 12МГц от CLKOUT кодека. (Для юсб пригодится).
Может RTCLK и не будет.
На счет буфера перед кодеком не стал заморачиваться - всё-равно гитару без драйва не гоняю.
В спринте получилась двусторонняя плата 180х110мм.
Вот думаю теперь травить - не травить...
#64
Отправлено 28 ноября 2010 - 22:37
Цитата
Разделить домены цифрового и аналогового питания. Не просто земли разделить, а сделать разные стабилизаторы +3.3В. Плюс добавить бусин ферритовых. Иначе будет вонь.
#65
Отправлено 28 ноября 2010 - 23:27
А куда бусин и каких? (и что это, вообще, такое?
В доке-то про ноги питания написано что-то типа "should be isolated".
Я подумал про несколько регуляторов питания, но почему-то решил, что жирно будет
Ок. Добавлю.
На плате-то я еще землю аналоговую отдельно развёл (но она всё-равно с цифровой землёй стыкуется
Плата планируется типа тестовой, с возможностью дальнейшего расширения (у всех ног мк есть площадка).
А аналоговые части мк и кодека можно будет от одного стабилизатора питать или лучше вообще отдельные стабилизаторы?
Еще у меня CLKOUT 12MHz от кодека к мк чуть ли не самая длинная дорожка получилась ;(
Может добавить кварц к мк.
В общем, первый проект на мк
#66
Отправлено 28 ноября 2010 - 23:58
Цитата
Вот такие, в питание, точнее, в разрывы, как сделано, например, тут - смотреть, как L1..L6 включены.
Цитата
Может добавить кварц к мк.
Не надо, я думаю все будет ок.
#67
Отправлено 09 января 2011 - 18:18
Есть 2 выхода.
1) Написать Деду Морозу длинное жалестное письмо.
2) Сделать самому.
Так же, если вы не знаете что подарить близким, то тестовая плата с практически топовым LPC1768 (100МГц, 64кБ RAM), да еще сделанная своими руками, - лучший подарок на НГ.
Лейка исправлена, а то сам я сделал чуть более раннюю версию, которая отличалась отсутствием официального места под кнопки и немного перепутанной полюсовкой аналогового питания
LPC1768tb.lay (130,14К)
Количество загрузок:356
Подразумевается система "Йожег 1.1" - все ноги выведены на двухрядные штыри с шагом 2,54мм.
Основная идея - любой дополнительный девайс будет подцепляться шлейфом.
Если сто ног с шагом 0,5мм не пугает, то по пунктам.:
1. ЧТО ПРОШИТЬ
МК LPC1768 1 шт. http://www.megachip....item_id=1254003
Кварц 12МГц http://www.megachip....item_id=1050326
Конденсаторы керамические 0.30p/50V 0805 парочка http://www.megachip....item_id=1217702
Кнопица 6х6мм смд парочка http://www.megachip....?item_id=131542
Стабилизаторы 2 шт. LD1117S33TR http://www.megachip....?item_id=626273
Конденсаторы керамические 0.1/50V 0805 ~10 шт. http://www.megachip....?item_id=771076
Конденсаторы электролитические танталовые 10/10V "A" ~10 шт. http://www.megachip....?item_id=753120
Гнездо USB B 1 шт. ( +1 для FT232) http://www.megachip....?item_id=135150
Резисторы 0805 для JTAG 10-12к
Разъемы отламываем от этого http://www.megachip....?item_id=134140
Для наглядности 2 светодиода 0805 (цвет по вкусу
- 14я нога - RESET OUT - светится, если девайс работает, гаснет на время ресета (у меня пока без резистора).
- 50я нога - светодиод на пине P2.13 для срочных тестов
Текстолит 75х75мм. Односторонний.
Бусинок не нашел ;(
!!Шаг 0,5мм!!
Сделал на бумаге ломонд. Подправил тонким маркером. Где замазал поцарапал толстой иглой от шприца.
Тоненько залудил.
Залил ЛТИ-120, приложил, прижал, припаял 1 ногу, потом 1 напротив, прошелся сухим паяльником по ногам - пшшшш! И готово.
ВАЖНО! Нога номер 1 около круглой метки!!! Надпись LPC1768 будет повёрнута на 90о.
2. ЧЕРЕЗ ЧТО ПРОШИТЬ (Программатор клепать не надо)
Для прошивки нужно будет собрать такую штуку:
http://easyelectronics.ru/preobrazovatel-u...di-ft232rl.html
(Проверяем зеркальность - сериальные выход и вход д.б. на ногах 1 и 5. см. даташит.
Точнее, с этого девайса надо начать. Шаг 0,65мм хорош для начала.
FT232RL http://www.megachip....?item_id=575701
2 смд кондёра 100n 1206
(светодиоды и резисторы не очень-то нужны, но если паять, то сначала их, а то потом не подлезть будет)
Цепляется на 3 контакта мк - 98,99 и землю.
Как-то так:
3. ЧЕМ ПРОШИТЬ
http://www.flashmagictool.com/
4. EXAMPLE
Фотки и прошиву залью чуть позже.
Цепляем к FT232, держмим кнопку INT0 (53я нога), жмём ресет (не на компе, конечно
В это время прошиваем. Потом ресетим еще раз без INT0 или запускаем из прошивалки - код стартует.
Под линуксом компилятор собрался за полчаса с --target=arm-eabi по этой доке http://and-blog.live....com/11548.html.
Взял GCC4.5.1
FT232RL определяется слёту как /dev/ttyUSB0.
ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1 и FlashMagic прерасно работает на 19200 под wine.
Подвендой скачал драйвер с http://www.ftdichip.com/FTDrivers.htm
Компилер и тулзы http://www.yagarto.de/
JTAGA пока нет, да, по идее, можно отлаживать, просто выводя инфу по ком-порту.
А можно и спаять
Ну и самое ценное - теперь можно собрать ёлочную гирлянду, работающую на частоте 100МГц!
------------------------------------------------------------------------------------------- -----------------------------------
В общем, если кому интересно, вот сделаная на коленке цифровая задержка встроенными силами того самого LPC1768.
ADC(10bit)/DAC(12bit) на частоте 36кгц.
delay_lpc1768.mp3 (1,75МБ)
Количество загрузок:468
Не считая мудрёной инициализации, сам дилей это 6 строчек кода.
Сначала и в конце записи лёгкий рум, вроде бы, 25мс.
Максимально получилось в районе 400мс. Переключается пока кнопкой в одну сторону.
Используется программный буффер в 15000 семплов.
Задержанный сигнал смешивается с входящим и пишется в буффер по кругу.
Коэффициент затухания пока стабильный 1/3. Его тоже надо переключать.
Примочь - guvnor. писалось в линию. Из обработок только спикерсим V30.
Буффера на ОУ что-то кривоватые вышли. Но в некоторых положениях некоторых ручек всё работает
Шумит немного - можно сказать, что получилась симуляция плёночного
В следующей серии будет то же, но с цивильным кодеком
Сообщение отредактировал Kurtz: 22 декабря 2010 - 09:37
#68
Отправлено 10 января 2011 - 02:11
#69
Отправлено 03 апреля 2012 - 09:54
Но зашол сюда за советом - дело вобщем такое, с МК и логикой высокой степени интеграции я не имею какого либо опыта работы, по этому всеже двинулся в сторону старой доброй дельтамодуляции+какаято память. Так вот какбы ЦАП (что главное) и АЦП я запустил и получилось даже не так ужасно как я предполагал. Но вот теперь возникла необходимость прикрутить ту самую какуето память. В совковых проектак от куда я и дернул ЦАП в качестве памяти использовали микры типа 565руХХ, их конечно можно на барахле добыть... но наличие 3х!! напряжений питания и какоето предчувствие, что в пристуре истерики они полетят в форточку как-то толкает поискать более практичный вариант. Ну и тут как бы вопрос - господа, друзья посоветуйте память под это дело! кто чем сможет.... ато вчера вечер просидел за этим делом в нете - бошка пухнет а инфы нихера толко не нашел, чтоб все точки на и розкидать.
Вобщем если кокретно:
1. Чтоже всетаки брать SRAM или DRAM??
2. Если есть ответ на первый вопрост, то где ее можна достать или откуда выдернуть??
3. Как лучше (проще, эргономичней) организовать адресацию, она то простая - на вход биты залетают и тупо змейкой на выход лезут..
4. Ооооочень желательно необходимость лиш одного напряжения питания...
Буду ОООЧЕНЬ благодарен за любые ответы!!
#70
Отправлено 06 апреля 2012 - 07:52
paranoya (03 апреля 2012 - 09:54) писал:
Но зашол сюда за советом - дело вобщем такое, с МК и логикой высокой степени интеграции я не имею какого либо опыта работы, по этому всеже двинулся в сторону старой доброй дельтамодуляции+какаято память. Так вот какбы ЦАП (что главное) и АЦП я запустил и получилось даже не так ужасно как я предполагал. Но вот теперь возникла необходимость прикрутить ту самую какуето память. В совковых проектак от куда я и дернул ЦАП в качестве памяти использовали микры типа 565руХХ, их конечно можно на барахле добыть... но наличие 3х!! напряжений питания и какоето предчувствие, что в пристуре истерики они полетят в форточку как-то толкает поискать более практичный вариант. Ну и тут как бы вопрос - господа, друзья посоветуйте память под это дело! кто чем сможет.... ато вчера вечер просидел за этим делом в нете - бошка пухнет а инфы нихера толко не нашел, чтоб все точки на и розкидать.
Вобщем если кокретно:
1. Чтоже всетаки брать SRAM или DRAM??
2. Если есть ответ на первый вопрост, то где ее можна достать или откуда выдернуть??
3. Как лучше (проще, эргономичней) организовать адресацию, она то простая - на вход биты залетают и тупо змейкой на выход лезут..
4. Ооооочень желательно необходимость лиш одного напряжения питания...
Буду ОООЧЕНЬ благодарен за любые ответы!!
1. Бери Dram (больший объём памяти за меньшие деньги+ легче ими управлять) у них единственный минус- нужно обновлять память каждые 4-6мс.
2. http://promelspb.ru/....html#datatable там разные есть по объёму
3. почитай внимательно на страничке Chana, там кажется в таблице таймингов принцип адресации предельно ясен
4. ониж все от 5 вольт работают
а вообще память с ацп цапом и логикой это прям Дилэй/хорус от Лель, сам ковырялся в такой... легче на мк всёж управление сделать и возможностей больше
#71
Отправлено 06 апреля 2012 - 14:50
вотетож и напрягает, что драм надо обновлять постоянно... хотя с другой стороны в чем сложность управления срам ?
знаю, что на МК 100% будет легче и гибче.. но я в програмировании МК полный НОЛЬ
Целесообразность этого всего конечно, тоже под вопросом, но я этим занимаюсь больше из субьективных побуждений, по этому как бы никого и не агитирую))
#72
Отправлено 06 апреля 2012 - 21:28
Что то мне подсказывает , что это возможно. Если скажем затухание сделать 1/1 и при этом сигнал есче и хорусом звучал( от этого же МК)типа синтезаторного сопровождения. А чтобы была непрерывность ноты (гаммы)и не задействовать много памяти , надо фрагмент запоминать короткий. Да и звучать будет ровней.
Офф: А то Денис(Графф) купил себе, млин абасцаться от зависти. "Я Вань такую жа хачуууу!!!"
Сообщение отредактировал Батя: 06 апреля 2012 - 21:29
#73
Отправлено 06 апреля 2012 - 22:12
Потроха
Даташиты
DSP
http://www.freescale...p?code=DSP56374
http://www.freescale...et/DSP56374.pdf
Кодек
http://www.ti.com/li...nk/pcm3052a.pdf
#74
Отправлено 06 апреля 2012 - 22:59
#75
Отправлено 06 апреля 2012 - 23:10
Сам на этом нажегся, когда игрался с цифровым питч шифтом.
Даже просто склейка по переходу через 0 в ту же сторону может менять спектр в зависимости от кратности длины склейки периодам составляющих спектра исходного сигнала.
#76
Отправлено 07 апреля 2012 - 19:11
В момент нажатия на кнопку , в проц записывается нота(гамма)она будет эталонным сэмплом. Не важно какой длины (предположим 200 мс) Внутренним тактом(постоянно , не зависимо есть в памяти сэмпл или нет) , с периодичностью каждые 20 мс подаются команды "считывать" из памяти эталонный сэмпл . Но считывание назначить в 30 мс, после чего считывание каждой команды прекращается. Таким образом получится многократное воспроизведение коротких, в 30 мс, фрагментов, с периодичностью в 20 мс. Как бы эти отрезки накладываются по очереди на хвосты предыдущих отрезков. И так до того момента , пока не нажмешь опять на кнопку. Сбрасывается прежний эталон из памяти, и записывается новый. Двойное нажатие вообще все стирает из памяти. Короткие фрагменты будут точнее передавать ноту, а наложенные др на др исключать прерывание ,как в дилее, и сливаться в один бесконечный звук ноты. Как то так. Поправь если заблуждаюсь.
Кстати,На видеоролике видно, что на кнопку чел нажимает только после звукоизвлечения, когда зазвучит вся гамма аккорда.Для того , чтобы точнее записать ноту.Он даже извлекает аккорд более аккуратно.
Сообщение отредактировал Батя: 07 апреля 2012 - 20:26
#77
Отправлено 08 апреля 2012 - 12:16
Запись происходит постоянно, как в дилее.
В момент нажатия кнопки фиксируется конец и вычисляется в обратную сторону длина отрезка, обеспечивающего минимальные искажения.
В твоем, Батя, варианте получим сигнал с модуляцией 50Гц, еще хуже чем просто склеивание с фиксированной длиной.
Я думаю, они с помощью ДСП высчитывают длину отрезка, обеспечивающего минимальные искажения.
Простейший вариант, который могу предожить - во время записи фиксировать точки перехода через 0 с одинаковым наклоном (производной).
В момент нажатия фиксируется максимально близкая к "концу" и максимально далекая от нее.
Это даст возможность избавиться от щелчков с частотой повтора отрезка.
#78
Отправлено 08 апреля 2012 - 17:38
Ты уж не серчай, я делетант в этом. Но мне жутко интересно.
Сообщение отредактировал Батя: 08 апреля 2012 - 17:40
#79
Отправлено 08 апреля 2012 - 18:28
Цитата
Модуляция возникнет за счет наложения 30/20 мС.
AAA
__BBB
____CCC
______DDD
Средние 10мС из каждых 30мС ни с чем ни суммируются, провал амплитуды, и модуляция с периодом повтора.
Цитата
Теперь смотрим на картинку, начало и конец кольца могут попадать на совершенно разные фазы (значения амплитуды), получается щелчек.
Если чуть "укоротить" сэмпл то щелчек пропадет, проще всего это как раз делать (математически) в точках перехода через 0 еще и потому что они есть в сигнале любой амплитуды.
Цитата
Под этим я имел ввиду, что мы ищем максимальный кусок из выбранного буфера 20мС (или другого), удовлетворяющий "склеиванию концов ленты"
Сообщение отредактировал KMG: 08 апреля 2012 - 19:14
#80
Отправлено 08 апреля 2012 - 21:52
#81
Отправлено 08 апреля 2012 - 22:05
#83
Отправлено 29 мая 2013 - 17:50
12 - хуже, но еще терпимо
8 -- уже плохо, разве что с достаточным ослаблением и фильтрацией, чтобы сигнал маскировался основным.
#85
Отправлено 29 мая 2013 - 21:34
#86
Отправлено 07 июня 2014 - 18:05
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
void delay(void)
{
volatile uint32_t i;
for(i=1; i != 0xF000; i++);
}
int main(void) {
//GPIO_InitTypeDef PORT;
//Включаем порты А и С
RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA) , ENABLE);
//Порт A настраивать смысла нет, все его ноги по умолчанию входы что нам и нужно
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE); //Включаем тактирование АЦП
/* Включаем порт А */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Включаем ЦАП */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
/* Настраиваем ногу ЦАПа */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC1->CR2 |= ADC_CR2_CAL; //Запуск калибровки АЦП
while (!(ADC1->CR2 & ADC_CR2_CAL)) ; //Ожидаем окончания калибровки
ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP1_0); //Задаем
ADC1->CR2 |= ADC_CR2_JEXTSEL; //Преобразование инжектированной группы
ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск инжектированной группы
ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно за другим
ADC1->CR1 |= ADC_CR1_JAUTO; //Разрешить преобразование инжектированной группы
//после регулярной. Не понятно зачем, но без этого не работает
ADC1->JSQR |= (1<<15); //Задаем номер канала (выбран ADC1)
ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП
ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований
/* Включить DAC1 */
DAC->CR |= DAC_CR_EN1;
while (!(ADC1->SR & ADC_SR_JEOC)); //ждем пока первое преобразование завершится
//Теперь можно читать результат из JDR1
//uint32_t adc_res; //Использовал переменную для отладки. Можно и без неё
while(1)
{
DAC->DHR12R1=ADC1->JDR1*4; //умножаем или делим на цифру для усиления или ослабления громкости
}
}
Собственно весь смысл программы в цикле while - из ацп прямиком в цап, умноженное на 4 для усиления сигнала. Понятно, что для тремоло эффекта нужно изменять число-множитель в последней строчке. Но как сделать так, чтоб оно менялось с небольшой частотой?
если в этот цикл вставить delay(30); - то звук будет похож на тот, что в приставках денди/сега
Сообщение отредактировал deluxe87: 07 июня 2014 - 18:01
#87
Отправлено 10 июня 2014 - 20:55
Заводим переменную, которая называется аккумулятор фазы, например, uint16_t phac (phase accumulator). Каждую, например, миллисекунду, прибавляем к phac другую переменную — uint16_t speed. От её значения зависит скорость роста аккумулятора фазы, что видно по названию. Реально в ней будут использоваться бит 10-11, не больше. При достижении максимального значения phac обнулится, как механический счётчик в старом магнитофоне.
Затем берём старшие 8 байт от phac. Загоняем в переменную uint8_t addr.
А дальше берёшь значение (на которое надо умножить/поделить аудиосигнал) из массива размером 8bit?256 по адресу, лежащем в переменной addr. То есть в этом массиве записана форма огибающей. Либо вставляешь addr в какую-нибудь формулу. Сам по себе график изменения addr представляет собой пилу.
А прикол метода в том, что значение переменной speed может быть настолько маленьким, что addr будет возрастать на 1 раз в несколько (десятков, сотен) миллисекунд, а может быть настолько большим, что за одну миллисекунду addr будет возрастать на несколько единиц. И частота может настраиваться очень точно, вплоть до долей герца на всём диапазоне частот.
Получается, что нужно настроить один таймер так, чтобы он вызывал прерывания каждую миллисекунду, например, и в обработчик прерывания засунуть этот алгоритм.
#88
Отправлено 13 июня 2014 - 19:38
while(1)
{
static uint32_t Dacc = 0;
static uint32_t Dout = 0;
uint32_t Din = ADC1->JDR1;
Dacc = Dacc + Din - Dout;
Dout = Dacc/128; //значение делителя задает частоту среза, желательно ставить кратно 2
DAC->DHR12R1=Dout;
}
взято отсюда http://chipenable.ru...ovoy-filtr.html
Сообщение отредактировал deluxe87: 13 июня 2014 - 19:38
#89
Отправлено 11 ноября 2014 - 19:36
просто большинство распространенных PIC уже имеют на борту ADC 10-12 бит, оперативу больше 512 байт и кучу расширений. этого достаточно для реализации одного, двух эффектов на одной МК? например банального дилея 20мс-2с? по моему всяко лучше PTхи?
PIC16F628A.pdf (1,38МБ)
Количество загрузок:657 http://ww1.microchip...eDoc/30289b.pdf
и вообще у кого-нибудь кроме Kurtz'а что-то вышло?

Помощь


















