Я софтово заберу за 8 тактов последовательно или за 9 с произвольным шагом всю запись за 216 мкс максимум.
кстати, ты хочешь читать 8 байт для синхронизации ?
я сейчас синхру засунул в EPM3032 - и уже на следующем такте получаю ответ по синхронизации... задержка в 1 такт, следовательно на следующем такте уже будет идти запись Виталий (аka ВитГо)
input wire clk; // тактовый сигнал проекта input wire reset; // сброс input wire [7:0] adc_in; // вход с АЦП input wire [7:0] sync_value; // значение синхронизации input wire sync_dir; // направление синхронизации output reg sync_ready; // сигнал успешности синхронизации input wire fifo_full; // сигнал о заполнении FIFO
reg stop;
initial begin sync_ready=1; stop=0; end
always @ (negedge clk) begin if (reset==0) begin sync_ready<=1; // сбросим сигнал успешности синхронизации end else begin if (stop==0) begin if (sync_dir==0) // поиск значения выше sync_value begin if (adc_in>=sync_value) sync_ready<=0; end else // поиск значения ниже sync_value if (adc_in<=sync_value) sync_ready<=0; end else sync_ready<=1; end end
// остановка захвата при заполнении памяти always @ (negedge clk) begin if (reset==0) begin stop<=0; end else if (fifo_full==1) stop<=1; end
endmodule
и схему в jpeg вложил. правда лучше поставить диптрейс, а то на jpg нельзя масштабировать
По синхронизации. Я пишу постоянно (после PRESTART) в память 15 байт и одновременно сравниваю с условием синхронизации. Как только оно наступит пишу полностью до конца. После чтения МК софтово нахожу в этих 15 байтах условие и рисую уже от него, или заранее на 2-5 байта. Так не пропустишь фронт/спад. в твоем случае отрисовывается уже после условия (как в моем маленьком) DipTrace у меня стоит. Я так понял для двух каналов нужно запаралелить выходы Q двух озу и выбирать по очереди? Генератор можно заменить на цепочку удвоителей частоты. Например на одном корпусе 74AC86 (555ЛП5) можно сделать 2 удвоителя. Максимальная частота около 130 Мгц. Взять тактовую с атмеги 16*4=56.
угу.. еще не вся. я вчера, вернее сегодня - до половины седьмого утра сидел - заставил все таки развести правда у меня появилась одна перемычка и я не понял как заставить программу сделать под нее контактные площадки
и вчера на easyelectronics опять обсуждался dcmi
я посмотрел доки на stm32f407 в 100 ногом корпусе - есть возможность захвата 12 бит (еще 2 бита в 144 ногом корпусе)
по скорости захвата - для внутренней памяти (а ее вроде как там вагон - 192 кб) - 54 msps для внешней в 2 раза медленнее
мне там обещали посмотреть исходники для работы - в принципе я сам скачал уже описание стандартной библиотеки ввода вывода - там есть примеры - но не очень понятные. и я нигде не могу найти направления сигналов в dcmi - конкретно сигнала dcmi_pixclk - это входной или выходной сигнал ?
и еще - где взять компонент stm32f407 для diptrace ? везде только f103 нахожу Виталий (аka ВитГо)
Корпуса почти совместимы (кроме 4х ног). Можно нарисовать 100ногий 103, возле нужных ног (которые меняются) поставить 0омные резисторы. Должно получиться. Совместимость смотри DS стр 16. В f4xx свободно можно 124к работать, там 3 банка 124,64,4=192 Если будет время нарисую и разведу в DipTrace захват на счетчиках - супер бюджетный вариант! Сделаю разъем 32 ноги для шины данных и управления чтоб цеплять к любой демоборде.
Сообщение отредактировал Sergi - Воскресенье, 07.10.2012, 12:29
на stm32а407 можно генерировать счетчиком сигнал на любом выводе с частотой 42 мгц (168/4) ?
чтото типа pwm быстрого там есть ?
p.s. я тут влез в DCMI
смотри что получается:
можно перевести DCMI в режим захвата jpeg при режиме захвата - 8 бит управление захватом: vsync - переход 1-0-1 - старт кадра захвата, далее, при vsinc=1: hsync - переход 1-0-1, во время активного "0" осуществляется захват данных pixclk - строб захвата (настроить на falling edge - тогда он будет корректно захватывать данные выдаваемые по rising edge АЦП)
то есть нужно генерить pixclk либо внешним генератором (например на 50 мгц) либо попробовать достать его из STM,
кажется самое простое получить его из stm - это поделить системную частоту на 4 (счетчики от какой шины тактируются?). если clk=168 мгц то /4 = 42 мгц
если это не самое простое - то на ebay я нашел генератор на 50 мгц, стоит около 6 баксов, 4 ноги - питание и выход частоты (1 вывод не подключается)
далее, нужен будет таймер который отмерит 64к захвата, отмерит как угодно: - если можем считать clk - то отсчитаем 64k *4 тактов, - если можем считать с частотой 42 мгц - то просто отсчитать 64к захватов - если внешний генератор - то наверное можно отмерить примерное время работы на частоте 168 мгц - это решение не обдумывая, наверняка есть и красивое решение
процедура захвата, hsync=>1 vsync =>делаем 1-0-1 hsync=0 (захват пошел) и стартуем таймер захвата 64к значений, после его отработки hsync=1 в памяти будет 64 кб захваченных данных
в настройки DMA я еще не смотрел
самое главное что все это реализуется на 1ом корпусе! не нужна ни внешняя память, ни плис (хотя на ней наверное можно сделать синхронизацию, на простой и паябельной epm3032 или epm3064)
частота конечно меньше чем мне хотелось бы - но для попробовать имхо достаточно, тем более ты же хотел 40 мгц
плюс несмотря на 100 ногий корпус фактически нужно будет: - 8 линий до АЦП, - 4 вывода соединить между собой (hsync и vsync генерить на других пинах и просто их подавать на нужные), - 1 вывод генератора pixclk (если от stm32 получать) - 1 вывод - вход pixclk (для такта dcmi) ----------- итого 14 выводов ! на захват и запоминание !
все остальное в нашем распоряжении - хоть на lcd, хоть на кнопки, хоть на связь !
размеры тоже можешь себе представить ! - я хотел сделать осциллограф ручку - вот он ! причем 40 msps - это гораздо больше того же dso nano !
что скажешь ? может быть наляжем вместе на эту задачку ? Виталий (аka ВитГо)
Я пока не разбирался с F4xx. Нету у меня пока . Тактирование можно сделать с ноги PA8. Это выход TIM1_CH1 (по крайней мере в 64ногом корпусе) она же выход MCO (тактовая 168 или 84 или ..., но по даташиту более 84 вроде нельзя). При высокой скорости подключаем MCO, при низких TIM1. Он же - предделитель. Режим таймера CTC. Второй таймер тактируем от первого. При переполнении (64к) выполняем прерывание и читаем что хотим. Эта картинка.
Сообщение отредактировал Sergi - Воскресенье, 07.10.2012, 14:26
а то мне наверное уже нужно начинать ставить среду какую нить.. у меня были кокос и кейл..
ты что используешь ?
p.s. чтобы в одной среде работать, а то у кокоса и кейла например не подходят исходники на 100% опять таки помоему у кейла есть ограничение в 32 кб по коду.. - а у STM32 даже с его Thumb2 все равно код пообъемнее AVR получается, поэтому 32 кб ограничения кейла могут начать быстро давить разработку
какую среду разработки бум использовать ? Виталий (аka ВитГо)