|
|
  |
CC2500 Приемопередатчик, Кто-то реально делал? |
|
|
|
Mar 4 2009, 18:10
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
может кто-то подскажет - есть ли в СС2500 ограничительные диоды на входах, в даташите не нашел. если есть, то на какой ток расчитаны? хочу подключить через токоограничительные резисторы к 5-ти вольтовому контроллеру. пожалуйста - не посылайте на левелшифтеры...
|
|
|
|
|
Mar 4 2009, 23:43
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
Цитата(rx3apf @ Mar 4 2009, 21:53)  Есть почти наверняка (можно прозвонить и выяснить точно), но, поскольку вопрос токоограничения в даташите деликатно обойден вниманием - лучше так не делать, а если уж так не хочется ставить преобразователи - то поставить диоды самому. Причем не на "+" питания трансивера, а чуток ниже, чтобы соблюсти требование из даташита - "Vdd+0.3", и не превышать. А лучше бы все ж поставить преобразователь... спасибо за ответ, диоды ставить не хочу, т.к. нужно как минимум три шотки(на вход) три резистора на выход + 3 диода на кламп(ограничение) в таком случае проще какой-то НТС поставить. хотел три токоогранечительных на CS, MOSI, SCK и через шоттки с MISO, GDO0, GDO2 и подпереть пуллапами на атмеге.
|
|
|
|
|
Mar 5 2009, 08:33
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(andrikk @ Mar 5 2009, 01:43)  спасибо за ответ, диоды ставить не хочу, т.к. нужно как минимум три шотки(на вход) три резистора на выход + 3 диода на кламп(ограничение) в таком случае проще какой-то НТС поставить.
хотел три токоогранечительных на CS, MOSI, SCK и через шоттки с MISO, GDO0, GDO2 и подпереть пуллапами на атмеге. Мне почему-то кажется, что диодов, там не может не быть. Главное чтобы оно от 5в входа не запиталось.
|
|
|
|
|
Mar 5 2009, 16:21
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
Цитата(Зверюга @ Mar 5 2009, 17:14)  ладно, если я возьму кварц на 30ppm точности и 30 ppm стабильности - работать будет? В чем по сравнению с 10 ppm я проиграю? Если будет шире полоса, то буду ловить помехи с сосединих каналов? собирали на обычных HC49-SMD кварцах, 26MHz, работает вроде нормально на 250 kbps с включенным FEC, пробивает через две Ж/Б стены, уровень -80dBm.
|
|
|
|
|
Mar 5 2009, 16:59
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Что-то я торможу. инициализировали как в инструкции итд. Код cc2500WriteReg(CCxxx0_MCSM1, (0x03<<4) | (0x03<<2) | (0x03<<0));// Сказал переключаться в RX всегда после приема или после передачи.
while(1) {
status = cc2500TxStatus();
switch (status & CC2500_STATE_BM) { case CC2500_STATE_TX_UNDERFLOW_BM: cc2500Strobe(CCxxx0_SFTX); LED_On(1<<2); break;
case CC2500_STATE_RX_OVERFLOW_BM: cc2500Strobe(CCxxx0_SFRX); LED_On(1<<3); break; } // Сказал чтобы в случае чего, флушило очереди.
cc2500WriteBurstReg(CCxxx0_TXFIFO, strTX, sizeof(strTX)); // записал данные в фифо (30 байт где-то) cc2500Strobe(CCxxx0_STX); // запустил передатчик. if ( xSemaphoreTake( xSemaphore, 1000 ) == pdTRUE) // ждем спада GDO0 там прерывание итд. { LED_On(LED_TX); if ( xSemaphoreTake( xSemaphore, 1000 ) == pdTRUE) // автоматически перешли в прием, получаем данные. { LED_On(LED_RX); packetLength = cc2500ReadReg(CCxxx0_RXFIFO); cc2500ReadBurstReg(CCxxx0_RXFIFO, strRX, packetLength); cc2500ReadBurstReg(CCxxx0_RXFIFO, statRX, 2); } else { LED_Off(LED_RX); } } else { LED_Off(LED_TX); } } Вот такая система. Запускается. И даже работает некоторое время (сильно не устойчиво). Но через некоторое время впадает в какой-то ступор, на GDO0 никакой реакции, хоть в SPI оно пытается послать. CCxxx0_STX итд. Как можно узнать в какой ступор оно впало, и как его из этого ступора извлечь?
Сообщение отредактировал Methane - Mar 5 2009, 17:14
|
|
|
|
|
Mar 5 2009, 18:05
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
Цитата(Зверюга @ Mar 5 2009, 18:36)  А параметры у этих кварцев какие были? 30 ppm вроде как. разброс в несущих есть, я частоты програмно калибрую.
|
|
|
|
|
Mar 5 2009, 18:55
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 23-07-08
Пользователь №: 39 167

|
Цитата(Methane @ Mar 5 2009, 20:09)  Контролируя частотомером выход GDO0? нет, GDO0 настроен как -Asserts when RX FIFO is filled at or above the RX FIFO threshold or the end of packet is reached. De-asserts when the RX FIFO is empty. GDO2 - low when receive is active трансивер всегда находится в режиме приема, для передачи используется CCA. настроил так, что бы лишний раз не дергать статус по SPI, так как в этом случае падает чувствительность приемника. калибрую - мастер в непрерывной передаче пакета, а клиент пытается принять пакеты и перестраивает синтезатор на дельту, нахожу Fmin и Fmax, при которых пакеты нормально принимаются. результат Fcal = (Fmin + Fmax) /2 Цитата(Methane @ Mar 5 2009, 18:59)  Что-то я торможу. инициализировали как в инструкции итд. Код cc2500WriteReg(CCxxx0_MCSM1, (0x03<<4) | (0x03<<2) | (0x03<<0));// Сказал переключаться в RX всегда после приема или после передачи.
while(1) {
status = cc2500TxStatus();
switch (status & CC2500_STATE_BM) { case CC2500_STATE_TX_UNDERFLOW_BM: cc2500Strobe(CCxxx0_SFTX); LED_On(1<<2); break;
case CC2500_STATE_RX_OVERFLOW_BM: cc2500Strobe(CCxxx0_SFRX); LED_On(1<<3); break; } // Сказал чтобы в случае чего, флушило очереди.
cc2500WriteBurstReg(CCxxx0_TXFIFO, strTX, sizeof(strTX)); // записал данные в фифо (30 байт где-то) cc2500Strobe(CCxxx0_STX); // запустил передатчик. if ( xSemaphoreTake( xSemaphore, 1000 ) == pdTRUE) // ждем спада GDO0 там прерывание итд. { LED_On(LED_TX); if ( xSemaphoreTake( xSemaphore, 1000 ) == pdTRUE) // автоматически перешли в прием, получаем данные. { LED_On(LED_RX); packetLength = cc2500ReadReg(CCxxx0_RXFIFO); cc2500ReadBurstReg(CCxxx0_RXFIFO, strRX, packetLength); cc2500ReadBurstReg(CCxxx0_RXFIFO, statRX, 2); } else { LED_Off(LED_RX); } } else { LED_Off(LED_TX); } } Вот такая система. Запускается. И даже работает некоторое время (сильно не устойчиво). Но через некоторое время впадает в какой-то ступор, на GDO0 никакой реакции, хоть в SPI оно пытается послать. CCxxx0_STX итд. Как можно узнать в какой ступор оно впало, и как его из этого ступора извлечь? мои насторойки модема 0x16, 0x07, //[MCSM2] 0x17, 0x3F, //[MCSM1] TX on CCA; Stay in Rx after Rx and Tx 0x18, 0x18, //[MCSM0] automaticaly calibrate when going from idle to rx/tx и все работает. как Вы статус вычитываете? нужно так: Код ret = cc_strobe(CC2500_SNOP); while((chk = cc_strobe(CC2500_SNOP)) != ret) //wait untilwe read the same value twice - cxx00 bug { ret = chk; } строб STX в режиме CCA начинает передачу только, если канал чист иначе трансивер остается в режиме приема.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|