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

Confucij

Участник
  • Постов

    15
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Confucij

  • Звание
    Участник
    Участник

Посетители профиля

825 просмотров профиля
  1. Вы правильно предположили - это APCO Phase 1/ аналоговые ФМ/ЧМ и внутри здания :) Phase 2 пока к реализации не рассматривается. Чем заменить сигнал от GPS мы, кажется, разобрались. Сейчас собираем прототип, будем посмотрть, что выйдет. А можете подробнее расказать о проекте? 20ns это точность которую выдавал GPS приемник или применялись внешние схемы?
  2. Здравствуйте! Поставлили задачу - исследовать возможность замены пассивной распределенной антенны в здании - ретранслятор для портативных раций пожарников/полицейских - на активную. По мере углубления в тему дошли до вопроса взаимного влияния одного передатчика на другой в местах пересечения их зоны покрытия. Как я понимаю основных проблем будет две, и обе они связаны с синхронизацией времени/частоты на передатчиках: Синхронизация частоты и фазы генератора несущей. Если сигналы от двух передатчиков придут в противофазе в одно место в пространстве то они друг друга подавят, так ведь? Синхронизция времени отправки данных в эфир. Что бы в один и тот же момент в одно и тоже место приходил одинаковый символ. На каждый передатчик приходят импульсы с частотой 1 ГЦ - аналог 1 PPS выхода у GPS. Как я понимаю, этот импульс в купе с микросхемой подобной AD9544 могут помочь решить описаные проблемы. Подскажите пожалуйста, правильно я оцениваю проблемы, которые могут возникнуть? P.S. До недавнего времени был очень далек от темы поэтому оценивать адекватность написаного выше могу сильно.
  3. Здравствуйте! Появилась задача - склонировать LimeSDR но с немного другими параметрами. Если переделать цифровую часть и питание я понимаю как, то с радио частью - совсем все плохо. Конкретно задача - изменить диапазоны частот на которые рассчитаны входы трансивера на диапазоны 150 MHz - 174 MHz, 450 MHz - 512 MHz, 788 MHz - 798 MHz, 799 MHz - 805 MHz и 851 MHz - 869 MHz. Производитель дает S параметры для каждого из входов. А вот тут уже начинаются мои изыскания и техношаманизм. В ADS я собрал схему из оригинального LimeSDR и попробовал ее переделать под требуемые параметры. Как я понял, критерием согласованности будет параметр S11 - коэффициент отражение от входа. Но я совсем не уверен, что я собрал схему правильно и правильно ли я вообще к делу подошел. Но в итоге играясь с диаграммой Смита доигрался до таких результатов: И на этом этапе у меня возникли вопросы: Правильно ли я понял, как согласовывают антенну с входами усилителей? Особенно не понятно для меня в контексте того, что я не нашел понятного объяснение для дифференциального усилителя; Если я понял правильно, то как выполнить согласование в диапазоне 450 - 512? Для меня это выглядит сложновато - сейчас это пик на какой-то частоте и резкое повышение на других частотах, а хотелось бы, если я правильно понимаю, что бы была прямая от частоты А до частоты Б на одном уровне. Бросьте в меня, пожалуйста, какими-то книгами по этим темам для начинающих. Заранее спасибо за пояснения и ответы!
  4. Я её специально выключил-за земляным полигоном этого видно не было) И на скрин поместил, что б людей не путать, а оказалось наоборот)
  5. Добрый день! Появилась необходимость внести изменения в плату сделанную в Expedition (EE7.9.5). У нее почти все цепи питания по плате выполнены полигонами. Нужные изменения я внес, но потом заметил, что большинство этих полигонов не залиты. В свойствах полигона указанна правильная цепь(и при выделении полигона площадки внутри него подсвечиваются), но связи между компонентами показаны как не разведенные а поверх полигона распространяется глобальный полигон земли. Если создать еще полигон с такой же цепью поверх уже существующего он нормально заливается. Но перерисовывать вручную их все как-то кажется не правильным. Пример на скриншоте Впервые столкнулся с MG поэтому вообще не представляю что и как стоит делать. Буду очень благодарен за помощь.
  6. SDIO WiFi модуль

    Здравствуйте! Озадачился выбором модуля для модключения МК к WiFi. Из незанятых интерфейсов на МК остались только UART и SDIO. Поток TCP нужен ~3-5Mbps поэтому UART я как-то не рассматривал, но возможно такие существуют? С другой стороны модули с SDIO выглядят как-то "по-взрослому" - идут с драйверами для Linux/Android, а на некоторые(WF111) ничего толкового кроме драйверов я найти не смог. TCP/IP стек не обязателен - МК будет подключатся еще и к Ethernet, какой-то стек там уже будет. Пока я рассмотрел такие варианты: WF111 - вроди модуль неплохой, но я не нашел никакой вразумительной документации на него кроме драйвера под Linux. Доки для него с API вообще существуют или только колупать драйвер? RAK310 - к этому модулю меня привели поиски по китайским магазинам. Документация на китайском. WHZ5178 - на сайте производителя ссылка на документацию ведет на пустую страницу. Буду благодарен если кто-нибудь подскажет где ее найти. Судить насколько сложно будет разработать софт под подобные модули я не могу - пока не смог найти внятной доки ни на один из рассмотренных. Возможно кто-то работал с чем-то подобным и может поделится знаниями?
  7. Спасибо за помощь! Если выбор остановиться на этих модулях то обязательно свяжусь с вами.
  8. В этом апноуте описан "Burst mode" в режиме ведомого. Линия WAO, как я понял, работает как запускающая. Ее можно сделать отдельной линией на модуль, а три остальных(clk, rx, tx) - общими для всех модулей. У нас в проекте сейчас так работают техасовские кодеки(TLV320AIC1110) - по 4 на одну шину. И времянки очень похожи на описанные вэтом апноуте. Вопрос в том,может в этом модуле какие-то особенности есть, не позволяющие это сделать.
  9. Приветствую всех! Озадачился вопросом из заголовка темы. Свою создавать не стал, если вы не против спрошу сдесь. Основной задачей модема будут звонки и СМС. Отсюда основной критерий выбора - наличие цифрового аудио интерфейса. Больше никаких особых плюшек от модуля не надо. Разви только хочется поменьше размером да подешевле)) Самостоятельные поиски пока привели к нескольким вариантам: WS6318 - из плюсов то что он маленький. Цифровой звуковой интерфейс, как я понял, может работать только в режиме мастера, что меня немного не устраивает. GL865-DUAL (и некоторые другие, если верить Digital Voice Interface Application Note). Что хотелось бы уточнить по нему - его цифровой интерфейс позволит подключить несколько модулей на одну шину? Как я понял да. Буду благодарен если вы подскажете еще какие-нибудь варианты.
  10. Вот кусок из map файла +----------------------------------------------+ ; Analysis & Synthesis Resource Usage Summary ; +--------------------------------+-------------+ ; Resource ; Usage ; +--------------------------------+-------------+ ; Total logic elements ; 927 ; ; Total combinational functions ; 921 ; ; -- Total 4-input functions; 401 ; ; -- Total 3-input functions; 520 ; ; -- Total 2-input functions; 0 ; ; -- Total 1-input functions; 0 ; ; -- Total 0-input functions; 0 ; ; Total registers ; 6 ; ; I/O pins ; 24 ; ; Total memory bits ; 1536 ; ; Maximum fan-out node ; addr_reg[1]; ; Maximum fan-out ; 145 ; ; Total fan-out ; 3268 ; ; Average fan-out ; 3.39 ; +--------------------------------+-------------+ и куча подобных сообщений в нем еще: Info (10041): Inferred latch for "ram[0][0]" at RAM.vhd(50)
  11. Наверное я что-то не понимаю или не так выразился. В отчете после синтеза написано, что занято около 1.5К ячеек памяти и использовано ~900 логических ячеек. Тоесть как я понял была сгенерирована какая-то дополнительная логика для работы с памятью.
  12. Не сочтите некропостером, но стоит та же задача - разместить память в ячейках памяти не используя альтеровский модуль. Как эта проблема - решилась-то или нет? У меня такие же проблемы как у топикстартера.. Пока единственно до чего дошел это вот такой код library ieee; use ieee.std_logic_1164.all; entity RAM is generic ( DATA_WIDTH : natural := 8; ADDR_WIDTH : natural := 6 ); port ( clk : in std_logic; addr : in natural range 0 to 2**ADDR_WIDTH - 1; data : in std_logic_vector((DATA_WIDTH-1) downto 0); we : in std_logic := '1'; q : out std_logic_vector((DATA_WIDTH -1) downto 0) ); end entity; architecture rtl of RAM is -- Build a 2-D array type for the RAM subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0); type memory_t is array(2**ADDR_WIDTH-1 downto 0) of word_t; -- Declare the RAM signal. signal ram : memory_t; -- Register to hold the address signal addr_reg : natural range 0 to 2**ADDR_WIDTH-1; begin process(clk) begin if(rising_edge(clk)) then -- Register the address for reading addr_reg <= addr; end if; end process; B1:block (we = '0') is begin q <= guarded ram(addr_reg); end block B1; B2:block (we = '1') is begin ram(addr_reg) <= guarded data; end block B2; end rtl; В ячейки-то он размещает, но генерит столько защелок, что просто не влазит в кристал))
  13. Дописал при инициалиизации NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0); И прерывания починились. Странно, я думал что контроллер прерываний знает где лежит таблица прерываний, тем более что лежит она с первых адресов флеша, что вроди стандартно.
  14. Прерывания в STM32

    Разбираюсь с прерываниями в STM32 но как-то не выходит... Когда приходит прерывание(пробовал внешнее и прерывание от системного таймера) выполнение уходит непойми-куда. Program received signal SIGTRAP, Trace/breakpoint trap. 0x20000004 in ?? () (gdb) bt #0 0x20000004 in ?? () #1 <signal handler called> #2 0x08000412 in main () at src/main.c:52 (gdb) Код начальной инициализации: #include "stm32f10x.h" //TODO Почему-то не видело объявления в "stm32f10x.h" скопипастил сюда. Костыль. Поправить. Ага, поправить. Так оно тут и будет. #define RCC_CFGR_PLLSRC_HSE ((uint32_t)0x00010000) /*!< HSE clock selected as PLL entry clock source */ extern int main(void); /* provided by the linker script */ extern unsigned long _estack; extern unsigned long __text_end; extern unsigned long __data_start; extern unsigned long __data_end; extern unsigned long __bss_start; extern unsigned long __bss_end; /** * Cortex M3 core interrupt handlers * * We provide basic implementations of the core of them, but "weak" so that * simply declaring them again will count as implementing them */ void Reset_Handler(void); void NMI_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void HardFault_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void MemManage_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void BusFault_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void UsageFault_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void SVC_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void DebugMon_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void PendSV_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); void SysTick_Handler(void) __attribute__ ((weak, alias ("Dummy_Handler"))); /*Ethernet interrupt*/ extern void EXTI4_IRQHandler(); /** * The chip specific (STM32L1xx or F1, or LPC, or TI etc) vectors are in a * chip specific file. by placing them in a subsection, they can be linked in * immediately after the core cortex handler table. */ void Dummy_Handler(void) { volatile int i; while(1) { i++; } } /** * All the parts start on some sort of an internal clock. * STM32F101, 103, 105, 107 start on HSI (~8MHz) * STM32F100xx (Value Line) start on HSI (~8MHz) * STM32F2xx starts on HSI (~16MHz) * STM32F4xx starts on HSI (~16MHz) * STM32L1xx starts on MSI (~2MHz) * Additionally, the STM32L1xx starts in voltage range 2 (1.5V), and needs * to be switched to voltage range 1 before enabling its HSI (~16MHz) * * Regardless, the default startup clock is enough to run. However, you may * wish to override this function, (simply implement your own) and configure * clocks, power regulators, or any other "premain" code you wish to run. */ void SystemInit(void) __attribute__ ((weak)); void SystemInit(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* Конфигурацяи SYSCLK, HCLK, PCLK2 и PCLK1 */ /* Включаем HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Ждем пока HSE не выставит бит готовности либо не выйдет таймаут*/ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while( (HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut)); //if ( (RCC->CR & RCC_CR_HSERDY) != RESET) // { // HSEStatus = (uint32_t)0x01; // } //else // { // HSEStatus = (uint32_t)0x00; // } /* Если HSE запустился нормально */ if ( (RCC->CR & RCC_CR_HSERDY) != RESET) { /* HCLK = SYSCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; /* PCLK1 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; /* Конфигурируем множитель PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ /* При условии, что кварц на 8МГц! */ /* RCC_CFGR_PLLMULL9 - множитель на 9. Если нужна другая частота, не 72МГц */ /* то выбираем другой множитель. */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); /* Включаем PLL */ RCC->CR |= RCC_CR_PLLON; /* Ожидаем, пока PLL выставит бит готовности */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { // Ждем } /* Выбираем PLL как источник системной частоты */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; /* Ожидаем, пока PLL выберется как источник системной частоты */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) { // Ждем } } else { /* Все плохо... HSE не завелся... Чего-то с кварцем или еще что... Надо бы както обработать эту ошибку... Если мы здесь, то мы работаем от HSI! */ } } void __attribute__((noreturn, naked)) Reset_Handler() { unsigned long *src; unsigned long *dest; src = &__text_end; dest = &__data_start; if (src != dest) while(dest < &__data_end) *(dest++) = *(src++); dest = &__bss_start; while(dest < &__bss_end) *(dest++) = 0; SystemInit(); main(); } /** * This table contains the core Coretex vectors, and should be linked first. * You should link any chip specific tables after this. */ void *vector_table[] __attribute__ ((section(".vectors"))) = { &_estack, Reset_Handler, NMI_Handler, HardFault_Handler, MemManage_Handler, BusFault_Handler, UsageFault_Handler, 0, 0, 0, 0, SVC_Handler, DebugMon_Handler, 0, PendSV_Handler, SysTick_Handler, }; void *other_vector_table[] __attribute__ ((section(".vectors.other"))) = { Dummy_Handler, // Window watchdog interrupt Dummy_Handler, //PVD Dummy_Handler, //TAMPER_STAMP Dummy_Handler, //RTC_WKUP Dummy_Handler, //FLASH Dummy_Handler, //RCC Dummy_Handler, //EXTI0 Dummy_Handler, //EXTI1 Dummy_Handler, //EXTI2 Dummy_Handler, //EXTI3 EXTI4_IRQHandler, //EXTI4 Dummy_Handler, //DMA1_Channel1 Dummy_Handler, //DMA1_Channel2 Dummy_Handler, //DMA1_Channel3 Dummy_Handler, //DMA1_Channel4 Dummy_Handler, //DMA1_Channel5 Dummy_Handler, //DMA1_Channel6 Dummy_Handler, //DMA1_Channel7 Dummy_Handler, //ADC1 Dummy_Handler,// R Dummy_Handler,// E Dummy_Handler,// S Dummy_Handler,// Erved Dummy_Handler, //EXTI9_5 Dummy_Handler, //TIM1_BRK_TIM15 Dummy_Handler, //TIM1_UP_TIM16 Dummy_Handler, //TIM_TRG_COM_TIM17 Dummy_Handler, //TIM1_CC Dummy_Handler, //TIM2 Dummy_Handler, //TIM3 Dummy_Handler, //TIM4 Dummy_Handler, //I2C1_EV Dummy_Handler, //I2C1_ER Dummy_Handler, //I2C2_EV Dummy_Handler, //I2C2_ER Dummy_Handler, //SPI1 Dummy_Handler, //SPI2 Dummy_Handler, //UART1_Interupt Dummy_Handler, //USART2 Dummy_Handler, //USART3 Dummy_Handler, //EXTI15_10 Dummy_Handler, //RTC_Alarm Dummy_Handler, //CEC Dummy_Handler, //TIM12 Dummy_Handler, //TIM13 Dummy_Handler, //TIM14 Dummy_Handler, //RESERV Dummy_Handler, //RESERV Dummy_Handler, //FSMC Dummy_Handler, //RESERVED Dummy_Handler, //TIM5 Dummy_Handler, //SPI3 Dummy_Handler, //UART4 Dummy_Handler, //UART5 Dummy_Handler, //TIM6_DAC_IRQHandler, //TIM6 Dummy_Handler, //TIM7 Dummy_Handler, //DMA2_CH1 Dummy_Handler, //DMA2_CH2 Dummy_Handler, //DMA2_CH3 Dummy_Handler, //DMA2_CH4_5 Dummy_Handler //DMA2_5 }; Подскажите пожалуйста где я ошибся.
×
×
  • Создать...