Jump to content
    

vutang

Участник
  • Posts

    42
  • Joined

  • Last visited

Reputation

0 Обычный

About vutang

  • Rank
    Участник
    Участник
  • Birthday 05/02/1989

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Кварц проверил, выдает 32.00025 МГц. Синусоида на уровне примерно 1,5 В с размахом примерно +/- 0.8 В.
  2. Добрался я до интернета) Потратив еще несколько дней и получив доступ к спектроанализатору, выяснили что отсутствует несущая. Делали следующие шаги:1) конфигурировали регистры (записывали те, что предлагает SmartRF); 2) запускали manualCalibration, как в ерарте; 3) переходили в состояние IDLE; 4) очищали буфер RX и TX; 5)запускали калибровку SCAL; 6) И в конце просто отправляли строб на передачу STX (в этом случае на сколько я понял чип непрерывно шлет преамбулу). Как оказалось, несущая не совсем отсутствовала...она была смещена на почти 100 МГц. Решили заменить микросхему на всякий случай. Хорошо, что завалялась одна, которую мы запаяли и... несущая появилась почти на той частоте на которой нам нужно, т.е. регистрами задаем 434 МГц, а в реале 440 МГц. Пробовали увеличить частоту на 10 МГц, увеличилась на 10 МГц, но смещение осталось. Уровень несущей меняется нормально,т.е. какой задаем, такой и видим ну минус потери в кабеле). Передачу и прием буду пробовать сегодня вечером поднимать. Но откуда берется это смещение, мне не совсем понятно, может партия бракованная, а может я чего-то не учел и надо проводить дополнительные калибровки? Может ли выйти из строя микросхема, если ее включать без нагрузки (без антенны)? Схема собрана строго в соответствии с рефернс дизайн для этого диапазона.
  3. Всем доброго дня. Проблема возникла с использованием трансивера CC1120. Вобщем собрал плату согласно схеме приведенной в даташите. Подключил к ее по SPI к контроллеру stm32f100 (отладочная плата discovery). Скачал программу SmartRF и примеры под MSP (easy_link вроде называются), которые на сайте TI лежат. Написал функции для работы с регистрами, калибровки, вобщем все как в примере. В SmartRF выбрал диапазон 433 МГц, а в нем пробовал выбирать разные пункты, затем выбрал режим Packet_TX и экспортировал регистры. Сначала инициализирую модуль,т.е. посылаю строб reset (не помню как точно пишется), записываю регистры, потом провожу калибровку. Регистры пишутся и читаются нормально. Для запуска передачи сначала формирую пакет со случайными данными как в примере, потом посылаю последовательно стробы SIDLE и SFTX, потом записываю пакет в FIFO, проверяю что FIFO заполнен и отправляю строб STX. После этого жду прерывания о окончании передачи с GPIO модуля, читаю статус регистр, получаю значение TX_END и повторяю процедуру. В это же время на другом SPI висит второй модуль и он включен на прием, т.е. сразу после калибровки посылаю последовательно стробы SIDLE и SRX и жду прерывания по приему. Регистры конфигурируются одинаково на обоих модулях. Но вот незадача...ничего не принимается (прерывание по приему не происходит)... Анализатора спектра нет, на осциллографе вижу (подключаю на выход антенны), что пакеты идут. Так вот...Может кто работал с этими трансиверами, расскажите в какой последовательности и что нужно отправлять, чтобы передать и принять пакет. Уже неделю убил на эту микросхему, сил нет.
  4. Всем доброго дня. Проблема возникла с использованием трансивера CC1120. Вобщем собрал плату согласно схеме приведенной в даташите. Подключил к ее по SPI к контроллеру stm32f100 (отладочная плата discovery). Скачал программу SmartRF и примеры под MSP (easy_link вроде называются), которые на сайте TI лежат. Написал функции для работы с регистрами, калибровки, вобщем все как в примере. В SmartRF выбрал диапазон 433 МГц, а в нем пробовал выбирать разные пункты, затем выбрал режим Packet_TX и экспортировал регистры. Сначала инициализирую модуль,т.е. посылаю строб reset (не помню как точно пишется), записываю регистры, потом провожу калибровку. Регистры пишутся и читаются нормально. Для запуска передачи сначала формирую пакет со случайными данными как в примере, потом посылаю последовательно стробы SIDLE и SFTX, потом записываю пакет в FIFO, проверяю что FIFO заполнен и иотправляю строб STX. После этого жду прерывания о окончании передачи с GPIO модуля, читаю статус регистр, получаю значение TX_END и повторяю процедуру. В это же время на другом SPI висит второй модуль и он включен на прием, т.е. сразу после калибровки посылаю последовательно стробы SIDLE и SRX и жду прерывания по приему. Регистры конфигурируются одинаково на обоих модулях. Но вот незадача...ничего не принимается (прерывание по приему не происходит)... Анализатора спектра нет, на осциллографе вижу (подключаю на выход антенны), что пакеты идут. Так вот...Может кто работал с этими трансиверами, расскажите в какой последовательности и что нужно отправлять, чтобы передать и принять пакет. Уже неделю убил на эту микросхему, сил нет.
  5. Короче все заработало. Наверное проблема была в том, что PORTA находился в таком состоянии, что прерывание вызывалось постоянно. Решил проблему добавив в обработчик проверку конкретного бита этого порта. Инициализация для одной кнопки: // Initialize interrupts portA->PIO_IFER = SW1; pAic->AIC_IDCR = (1<<AT91C_ID_PIOA); pAic->AIC_SMR[AT91C_ID_PIOA] =(AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE|AT91C_AIC_PRIOR_HIGHEST); pAic->AIC_SVR[AT91C_ID_PIOA] = (unsigned int) int_sw; portA->PIO_IER = SW1; pAic->AIC_IECR = (1<<AT91C_ID_PIOA); Обработчик: void int_sw(void){ if(!((portA->PIO_PDSR) & SW1)) { Delay(5,'m'); portA->PIO_SODR |= LED1; }else if(((portA->PIO_PDSR) & SW1)) { Delay(5,'m'); portA->PIO_CODR |= LED1; } } где #define SW1 BIT29 #define LED1 BIT7
  6. Эффекта нет. Пошагово просмотрел как выполняется программа, сразу после строки "BX r0" в файле board_cstartup_iar.s входит в прерывание. Смотрел примеры на сайте производителя, так там просто в цикле опрашивается состояние пинов. Хочется на прерываниях сделать, не думал, что вылезут такие косяки. Подумываю уже таймер задействовать...
  7. Часть кода из файла board_cstartup_iar.s. На сколько я понимаю тут на ассемблере написано, а я в нем не силен. /* Handles incoming interrupt requests by branching to the corresponding handler, as defined in the AIC. Supports interrupt nesting. */ irqHandler: /* Save interrupt context on the stack to allow nesting */ SUB lr, lr, #4 STMFD sp!, {lr} MRS lr, SPSR STMFD sp!, {r0, lr} /* Write in the IVR to support Protect Mode */ LDR lr, =AT91C_BASE_AIC LDR r0, [r14, #AIC_IVR] STR lr, [r14, #AIC_IVR] /* Branch to interrupt handler in Supervisor mode */ MSR CPSR_c, #ARM_MODE_SYS STMFD sp!, {r1-r3, r4, r12, lr} MOV lr, pc BX r0 LDMIA sp!, {r1-r3, r4, r12, lr} MSR CPSR_c, #ARM_MODE_IRQ | I_BIT /* Acknowledge interrupt */ LDR lr, =AT91C_BASE_AIC STR lr, [r14, #AIC_EOICR] /* Restore interrupt context and branch back to calling code */ LDMIA sp!, {r0, lr} MSR SPSR_cxsf, lr LDMIA sp!, {pc}^ /* After a reset, execution starts here, the mode is ARM, supervisor with interrupts disabled. Initializes the chip and branches to the main() function. */ SECTION .cstartup:CODE:NOROOT(2) PUBLIC resetHandler EXTERN LowLevelInit EXTERN ?main REQUIRE resetVector ARM resetHandler: /* Set pc to actual code location (i.e. not in remap zone) */ LDR pc, =label /* Perform low-level initialization of the chip using LowLevelInit() */ label: LDR r0, =LowLevelInit LDR r4, =SFE(CSTACK) MOV sp, r4 MOV lr, pc BX r0 /* Set up the interrupt stack pointer. */ MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode LDR sp, =SFE(IRQ_STACK) /* Set up the SYS stack pointer. */ MSR cpsr_c, #ARM_MODE_SYS | F_BIT ; Change the mode LDR sp, =SFE(CSTACK) /* Branch to main() */ LDR r0, =?main MOV lr, pc BX r0 /* Loop indefinitely when program is finished */ loop4: B loop4 END
  8. Извините не совсем понял про код вектора прерывания, где его посмотреть можно?
  9. Исправил код следующим образом: portA->PIO_IFER = SW1; pAic->AIC_IDCR = (1<<AT91C_ID_PIOA); pAic->AIC_SMR[AT91C_ID_PIOA] =(AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE|AT91C_AIC_PRIOR_HIGHEST); pAic->AIC_SVR[AT91C_ID_PIOA] = (unsigned int) int_sw; pAic->AIC_ICCR = (1<<AT91C_ID_PIOA); portA->PIO_IER = SW1; pAic->AIC_IECR = (1 << AT91C_ID_PIOA); Теперь программа сразу уходит в обработчик прерывания и висит в нем. Такое ощущение, что условия срабатывания по фронту не работают...
  10. Добрый день всем! Имеется отладочная плата sam7-mt256 фирмы olimex. На плате имеется джойстик, состоящий из 5 кнопок. Хочу сделать прерывание по нажатию на одну из этих кнопок, но как-то не выходит. Т.е. по нажатию на кнопку программа уходит в прерывание и крутится в нем, пока не перезагрузишь контроллер. На сколько я понял, за окончание прерывания отвечает запись любого значения в регистр AIC_EOICR, но это тоже не помогает. Может кто делал что-нибудь подобное, подскажите куда копать? Ниже приведена часть кода, в котором производится настройка и описание прерывания. Используемая среда разработки IAR 5.4. #define SW2 BIT27 #define LED1 BIT7 int a = 0; __irq void int_sw(void){ for(int i=0;i<10000;i++) {} a=~a; if(a!=0) { *AT91C_PIOA_CODR |= LED1; } else { *AT91C_PIOA_SODR |= LED1; } AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_PIOA->PIO_ISR; } int main(void) { InitPeriphery(); InitFrec(); // Initialize interrupts *AT91C_PIOA_ASR = (1<<SW2); *AT91C_PIOA_IER = SW2; *AT91C_PIOA_IMR = SW2; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ1] = 0x00; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ1] = (unsigned int) int_sw; AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_IRQ1); while (1) { } }
  11. Добрый день. Дело вобщем в следующем, имеется у меня кит STM32VLDISCOVERY, линейка STM32F100. Недавно решил попробовать программировать этот контроллер из под линукса и столкнулся с проблемой с чего начать. Google как говориться в помощь. Выбрал путь Eclipse + stlink + что-то там еще, но увы ничего не вышло, то проект не компилиться, то st-util не работает, то руки кривят. Просьба следующая к тем кто программирует этот контроллер, напишите кто с чего начинал, что читал, что устанавливал.
  12. Допустим следующую ситуацию. На приемной стороне мы ожидаем 2 OFDM сигнала (с одинаковыми CDMA кодами) длительностью Тс каждый (передаются последовательно друг за другом без временных интервалов между ними). Частота гетеродина в передатчике изменилась на некоторую величину. При изменении частоты несущей (уменьшении/увеличении), по идее должна изменяться (увеличиваться/уменьшаться) длительность передаваемого сигнала (Тс+/-Тсм). Приемник постоянно производит расчет корреляционной фун-ции опорного сигнала с принятым. Допустим сигнал обнаружен по пику корреляционной ф-ции, после этого мы формируем выборку длительностью 2*Тс, а на самом деле пара сигналов будет длительностью 2*Тс+/-2*Тсм. Если бы длительность не изменялась, а менялась только фаза, за счет смещения частоты, то после формирования выборки можно произвести расчет взаимной корреляционной ф-ции между опорным и первым принятым или между двумя принятыми сигналами, в пике которой мы смотрим соотношение мнимой и действительной части и затем можем вычислить смещение по частоте, как f=atan(Im/Re)/2*pi*Tс. Но, что произойдет если длительность сигнала изменится на случайную величину...как это может повлиять на оценку частоты и на вид корреляционной функции...непонятно. Может я ошибаюсь и все будет совершенно не так. Поделитесь знаниями, кто может.
  13. Добрый день. Вопрос следующий: передаваемый сигнал (допустим S(n)) проходит через многолучевой канал РРВ, имеющий распределение релея. Каждый луч в канале вносит свой доплеровский сдвиг из-за различной угловой скорости излучателя относительно отражателей. Интересует разброс значений доплеровских частот в этих лучах. Допустим если в прямом луче Доплер равен 200 Гц, на сколько будет отклоняться значение частоты в остальных лучах, интересует закон распределения. Если кто занимался данным направлением помогите.
  14. Не понятно что это вообще такое, Legacy Turbo Rate. Вроде тип помехоустойчивого кодирования. но как работает не знаю дажегде прочитать! Плиз Хелп!
  15. Где взять какую-либо литературу по данной теме, google doesn't know. Если кто знает откликнитесь!
×
×
  • Create New...