Jump to content

    

cornflyer

Свой
  • Content Count

    166
  • Joined

  • Last visited

Everything posted by cornflyer


  1. квантовые вычисление на данный момент - это просто дорогая игрушка... для взрослых ))) как работает квантовый компьютер Google или IBM (пусть у нас есть квантовый компьютер 54 Q-бита): 1. ко всем 54 кубитам применяется операция H (Hadamard Gate) таким образом каждый кубит переводится в состояние "суперпозиции"... это значит, что если провести измерение состояния каждого кубита, то результатом измерения с равной вероятностью будет '0' или '1' короче, получается хороший генератор случайных чисел (54-битный) PS все эти 54 кубита всегда "инциируются" случайным образом... нет никакой возможности "загрузить" в них реальное 54-битное число и "что-то" с ним сделать любой квантовый алгоритм начинается с операции квантового спутывания H (Hadamard Gate) потом ко всем ячейкам применяется комбинация квантовых операций (quantum gates)... если каждый раз после квантового спутывания применять одну и ту же комбинацию квантовых операций, тогда при измерении состояния всех кубитов будет получаться одно и тоже 54-битное число да, это прикольно - квантовая механика работает! но на практике эти манипуляции никак применить нельзя... теоретически, можно реализовать, например, алгоритм Гровера - быстрый поиск индекса числа в не сортированном массиве : 1. каждый новый массив значений (вектор значений) должен будет представлен соответствующей комбинацией квантовых гейтов, число которых больше размерности массива... 2. каждый новый массив индексов (вектор индексов) должен будет представлен соответствующей комбинацией квантовых гейтов, число которых больше размерности массива... 3. потом для поиска каждого конкретного числа придётся применить соответствующую этому числу комбинацию квантовых гейтов, число которых также больше размерности массива... на практике - это пока фантастика ((( может лет этак через 100 что-то измениться при условии усердного финансирования крупных корпораций )))
  2. все работает для синхронизации в итоге используется White Rabbit (SPEXI): https://ohwr.org/projects/white-rabbit/wiki http://www.incaacomputers.com/products/by-...function/spexi/
  3. я сейчас пытаюсь побороть этот чип документация - отвратительная подробных руководств по использованию нет все сделал как в мануале - меряет какую-то чушь
  4. буду пробовать различные варианты расскажу через несколько месяцев, что в итоге получится 1) C АЦП я определился - это будет AD7960 (18 bit PULSAR, 5 MSPS, LVDS) 2) Период частоты будет считать FPGA: для высокой точности будет использоваться самодельный преобразователь времени в напряжение (для измерения интервалов между фронтами)
  5. Задача умножения частоты не является абстрактной, ее решение необходимо для реализации точной цифровой задержки и цифрового фазовращателя тактового сигнала АЦП в ПЛИС с целью привязки измерений к конкретному сгустку частиц (ускоритель Нуклотрон) и настройки на максимум сигнала с пикапа (для измерения резонансной частоты пучка). На данный момент изготовлена плата (самодельный FlexRIO модуль) с двумя АЦП AD9444 и двумя ЦАП DAC904 и входом для синхронизации (детектор нуля для привязки к ВЧ). Этот модуль подключается к PXI FPGA модулю, у которого на борту Virtex-5. Реализовать задержку и фазовращатель с величиной джиттера меньше 5 нс не удалось. Вот я и подумал что часоту ВЧ можно уножить раз в 30 и подать уже на ПЛИС. Тактирование АЦП от ПЛИС - это другая задача (которая уже решена для АЦП AD9444). Предполагается, что использование модуля FPGA на основе ПЛИС Kintex-7 позволит реализовать фазовращатель с джиттером 2 нс (хотелось бы 0.5нс).
  6. да, согласен, что из 24 бит - 6-7 младших будут "шумящими" поэтому скорее всего остановлюсь на AD7960 - 18-Bit, 5 MSPS PULSAR® Differential ADC а умножение частоты придется делать внутри Kintex-7
  7. импульсы не короткие, полоса 500kHz - 1200kHz В текущей версии работает AD9444 как тактировать AD7760 - только начал разбираться MCLK от FPGA, рабочий режим - 2.4 MSPS может буду использовать ADS1675 - у него есть START
  8. Спасибо, думаю, что Вы правы - буду делать все на Kintex-7 АЦП - AD7760 24 bit, 2.5 MSPS, параллельный интерфейс тактирование кратной частотой - до 2.4MSPS, т.е. каждый 80-й такт будет использоваться для запуска АЦП 600kHz ... 6000kHz x 32 => 19.200MHz ... 192MHz / 80 => 240kHz ... 2.4MHz и будет возможность подобрать начало запуска измерений Прошу Вас поподробнее о косвенном методе
  9. у меня есть Spartan3 XC3S400 (200MHz) и точность подсчета периода +\-5 ns, а джиттер должен быть не больше 500 ps можеть есть готовый преобразователь период-код? иначе придется Kintex-7 использовать
  10. эта задача из ускорительной физики в процессе ускорения ионного пучка его оборотная частота растет ( в LHC, например, она поястоянна и равна 10kHz, однако для маленьких ускорителей это сделать сложнее) и чтобы ее вычесть из результата измерений и избежать лишних вычислений - АЦП тактируется частотой от ВЧ системы это уже работает , но возникла необходимость синхронизации измерений с нужным сгустком ионов (bunch) для этого частота уножается в 30 раз и можно двигать фазу тактирования АЦП достаточно точно вот я и спрашиваю, может кто знает как сделать лучше?
  11. От ВЧ системы поступает частота, которая со скоростью 8kHz/1ms увеличивается от 500kHz до 6MHz, фаза - гладкая функция (без скачков) 1. На входе стоит эллиптический BPF 500kHz - 6MHz (5-го порядка) 2. Далее через ВЧ трансформатор отфильтрованная частота подается на уcилитель G=+10 (AD8067 с G=+10 не искажает в полосе), 3. Далее детектор нуля (ADCMP604) На выходе компаратора - меандр, который хотелось бы умножить раз в 30 для тактирования АЦП. Я нашел CS2300-03, который умножает в 4 раза После него можно поставить CS2300-01 для умножения в 8 раз В итоге частота должна умножится в 32 раза. У меня есть вопрос к стабильности работы такого решения - будет ли работать вообще ? В идеальном случае, когда duty cycle 50% или когда на входе может быть duty cycle 30-70% (после детектора нуля) PS в мануале на CS2300-OTP сказано The following outlines which conditions cause the PLL to go unlocked: • Discontinuities on the Frequency Reference Clock, CLK_IN. • Gradual changes in CLK_IN frequency great er than ±30% from the starting frequency. • Step changes in CLK_IN frequency
  12. могу не только развести, но еще и запаять (QFN, BGA, SMD - 0603, при необходимости 0402) и запрограммировать! cornflyer@gmail.com
  13. LPC2148 UART baudrate

    /*-------------------------------------------------------------------------*/ void SerialInit(void){ unsigned int reload = (15000000/(115200*16)); //Configure UART0 Pins PINSEL0 |= 0x05;//Enable RxD0 and TxD0 U0LCR = 0x00000007;//Configure Data Bits and Parity MB_PAR_NONE U0IER = UART_RX_TX;//UART0 Interrupts*/ U0LCR |= 0x80;//Set DLAB U0DLL = reload;//Set Baud U0DLM = reload>>8;//Set Baud U0LCR &= ~0x80;//Clear DLAB U0FCR = 0x07;//Activate and clear FIFOs VICVectAddr0 = (unsigned long)sio_irq; VICVectCntl0 = 0x20|6; VICIntEnable = 1 << 6;//Enable UART0 Interrupt } /*-------------------------------------------------------------------------*/ void sio_irq(void) __irq{ switch (U0IIR&0x0E){ case 0x04://Receive Data Available ModBusBuff[ModBusBuffIndex]=U0RBR; ModBusBuffIndex++; StartTimer();//check frame by timeout break; case 0x02://char sent if(tx_i<tx_pos){ U0THR = tx_buf[tx_i++]; } break; } VICVectAddr = 0xFF;//Acknowledge Interrupt }
  14. посчитать имеет смысл если антенны расположены высоко над землей, известны диаграммы направленности излучения этих антенн. это можно сделать в программе MMANA-GAL и NEC2. NEC2 ИМХО считает лучше, однако все они дают ошибку вблизи земли (меньше 10м) для 433 МГц. при мощности 10mВт у вас получится дальность 100 метров около земли - это с платками от chipcon. если самому разводить - можно получше согласовать входной дифференциальный импеданс приемника (116 + j41) тогда чувствительность будет на парочку dB лучше. А если поднять над землей на 10-20м, будет около 1 км. В городе будет работать хуже, на отражениях от зданий. еще желательно чтобы импеданс антенны был согласован с выходным импедансом усилителя мощности CC1100. иначе у вас будет например 2 dBm на выходе вместо 10 dBm и дальность будет 10 - 20 метров. так что я присоединяюсь к народу в желании узнать: какие условия у вас для передачи? на каких высотах стоят антенны? есть прямая видимость или нет? какие антенны? какая у них диаграмма направленности? какой импеданс у ваших антенн? (это надо измерять калиброванным векторным анализатором) если вы не можете ответить на эти вопросы, тогда даже без расчетов ясно, что у вас CC1100 дальше вашей комнаты скорее всего работать не будет :) P.S. вы сказали "Известна чувствительность приемника: -110 dBm" но это не так... это зависит от скорости передачи данных -110dbm - это при 1.2kbit, -95dBm при 250kbit плюс зависит от импеданса дорожек на плате которые можно посчитать тут: http://chemandy.com/calculators/coplanar-w...-calculator.htm
  15. я к сожалению только сейчас получил возможность пощупать at91sam7 до этого момента работал c процами NXP для хранения конфигов ставил внешнюю SPI EEPROM как вариант AT24C1024BW-SH25-B - EEPROM SERIAL 2.7-5.5V Memory Configuration:128K x 8bit Interface:Serial, 2 Wire Clock Frequency:1MHz
  16. добавь в main.c #include <intrinsics.h> тогда иар ругатся не будет __enable_interrupt(); // это глобальное прерывание
  17. выкладывай код функций чтения/записи.... во время работы с флешью надо запрещать все прерывания: __disable_interrupt(); // flash read/write __enable_interrupt(); причем надо еще добавить в startup.s: irqHandler: // spurious interrupts elimination MRS r14, SPSR ; Abort if IRQ disabled ANDS r14, r14, #I_BIT ; (IRQ_BIT = 1) LDMNEFD sp!, {pc}^
  18. пропиши строчку: AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(50<<16)) | AT91C_MC_FWS_1FWS; // 1us =< 50 MCK tick где вместо 50 укажи свое значение, т.е. >=MCK[MHz] например если MCK = 48MHz, тогда округляешь до большего числа, т.е. до 50 в мануале на AT91SAM7 так написано, иначе флэш будет работать с глюками
  19. выкладываю рабочий проект - UART с прерыванием проект создан "с нуля", ничего лишнего в нем нет, никаких "библиотечек" использую только #include "at91sam7s256.h" #include <intrinsics.h> UART_AT91SAM7_echo.ZIP
  20. проверь содержимое Flash Mode Register: AT91C_BASE_MC->MC_FMR Warning: In order to guarantee valid operations on the flash memory, the field Flash Microsecond Cycle Number (FMCN) must be correctly programmed. у меня например MCK = 10MHz соответственно в LowLevelInit() у меня есть такая строчка: AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(10<<16)) | AT91C_MC_FWS_0FWS; // 1us =< 10 MCK ticks если у тебя MCK = 48 MHz тогда должно быть так: AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(50<<16)) | AT91C_MC_FWS_0FWS; // 1us =< 50 MCK tick
  21. спасибо! после установки опции опция Linker->Library->Override default program entry: resetHandler я попадаю в обработчик прерывания!!!!!!! ура! однако если использовать sram.icf ворнинги остались: Warning[Lp005]: placement includes a mix of sections with content (example "ro code section .cstartup in board_cstartup_iar.o") and sections without E:\UART_SAM7\sram.icf 35 content (example "zi section .bss in main.o") Warning[Lp006]: placement includes a mix of writable sections (example "zi section .bss in main.o") and non-writable sections (example "ro code E:\UART_SAM7\sram.icf 35 section .cstartup in board_cstartup_iar.o")
  22. 1) да, в этом проекте сейчас пытаюсь найти глюк 2) к проекту добавлен стандартный board_cstartup_iar.s 3) не нашел такой опции в iar'e вижу только Linker->Library->Automatic library selection (стоит галочка) и еще есть опция Linker->Library->Override default program entry: __iar_program_start (нет галочки) в файл main.c добавил #include "board_memories.h" и добавил в конец функции LowLevelInit() BOARD_RemapRam (); /// \internal Flash is mirrored in the remap zone. #define BOARD_FLASH 0 /// \internal RAM is mirrored in the remap zone. #define BOARD_RAM 1 //------------------------------------------------------------------------------ /// Returns the current remap, either BOARD_FLASH or BOARD_RAM. //------------------------------------------------------------------------------ static unsigned char BOARD_GetRemap( void ) { unsigned int *remap = (unsigned int *) 0; unsigned int *ram = (unsigned int *) AT91C_ISRAM; // Try to write in 0 and see if this affects the RAM unsigned int temp = *ram; *ram = temp + 1; if (*remap == *ram) { *ram = temp; return BOARD_RAM; } else { *ram = temp; return BOARD_FLASH; } } void BOARD_RemapRam( void ) { if (BOARD_GetRemap() != BOARD_RAM) { AT91C_BASE_MC->MC_RCR = AT91C_MC_RCB; } } эффект нулевой при компиляции с flash.icf выдает предупреждение: Warning[Lp012]: no sections with name FIQ_STACK included - special symbol FIQ_STACK$$Limit (referenced from cstartup.o(rt4t_al.a)) will be zero
  23. попробовал сейчас ваш код - вылетает куда-то при прерывании на прием в обработчик не попадает