Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Калибровка CC1100
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
Ofer
Добрый день smile Может кто сталкивался с такой проблемой? Отправляю в TX-буфер данные. Процедура функция отправки:

Код
void CC1100_sendpacket(unsigned char *packet, unsigned char size)
{
unsigned char i;
CC1100_writestrobe(CC1100_SFTX);
for(i=0;i<size;i++)
{
   CC1100_burstwrite(CC1100_TXFIFO, packet[i]);
}
CC1100_writestrobe(CC1100_STX);
while (!CC1100_GDO0());
while (CC1100_GDO0());
}



И программа зависает на
Код
while (!CC1100_GDO0());
while (CC1100_GDO0());


Значит, не приходит синхрослово. Я так понимаю - это проблема с калибровкой трансивера. Как его проверить и правильно откалибровать?
rx3apf
Цитата(Ofer @ Aug 13 2008, 12:41) *
Добрый день smile Может кто сталкивался с такой проблемой? Отправляю в TX-буфер данные. Процедура функция отправки:

Значит, не приходит синхрослово. Я так понимаю - это проблема с калибровкой трансивера. Как его проверить и правильно откалибровать?

1). Как запрограммировано поведение GDO0 ?
2). При чем тут "не приходит синхрослово", если речь идет о передаче пакета ?
Ofer
Цитата(rx3apf @ Aug 13 2008, 11:50) *
1). Как запрограммировано поведение GDO0 ?


Вывод GDO0 микрокконтроллера инициализирован как вход.

Цитата(rx3apf @ Aug 13 2008, 11:50) *
2). При чем тут "не приходит синхрослово", если речь идет о передаче пакета ?


Ну, я не знаю. Вроде как сигнал на GDO0 подаеться для синхронизации?

И вот что еще заметил. Если предварительно считать с регистра по адресу 0x31 (VERSION), то функция передачи выполняться. По крайней мере не зависает программа.
bloodden
Цитата(Ofer @ Aug 14 2008, 09:08) *
Вывод GDO0 микрокконтроллера инициализирован как вход.
Ну, я не знаю. Вроде как сигнал на GDO0 подаеться для синхронизации?

Интересует как сконфигурирован он в модеме!

Цитата
И вот что еще заметил. Если предварительно считать с регистра по адресу 0x31 (VERSION), то функция передачи выполняться. По крайней мере не зависает программа.

У Вас с инициализацией ног МК глюки наверное.
Ofer
Цитата(bloodden @ Aug 14 2008, 10:16) *
Интересует как сконфигурирован он в модеме!


Прошу прощения, я еще не достаточно хорошо разобрался с модемом. GDO0 сконфигурирован на 0x06. Это ведь нужная конфигурация?
rx3apf
Цитата(Ofer @ Aug 14 2008, 10:08) *
Вывод GDO0 микрокконтроллера инициализирован как вход.

А у CC1100 ? А, вижу, 06.

Цитата
Ну, я не знаю. Вроде как сигнал на GDO0 подаеться для синхронизации?

Для, при соответствующей настройке. В данном случае - правильно. Хотя, если размер пакета больше FIFO, будут проблемы - сколько передается ?
Ofer
Цитата(rx3apf @ Aug 14 2008, 10:26) *
А у CC1100 ?


0x06

А на счет глюков на ногах микроконтроллера, то я сомневаюсь. Ведь после чтения других регистров результата нет.

И еще небольшая поправка. Не с регистра 0x31, а с регистра 0x30 ))
rx3apf
Цитата(Ofer @ Aug 14 2008, 10:08) *
И вот что еще заметил. Если предварительно считать с регистра по адресу 0x31 (VERSION), то функция передачи выполняться. По крайней мере не зависает программа.

Прочитайте даташит внимательно - 0x31 это вовсе не чтение, а тот же самый строб SFSTXON (если только это не бурстовое чтение). А с 0x30 - так это вообще строб SRES...
bloodden
Цитата(Ofer @ Aug 14 2008, 10:29) *

Я перед передачей очищаю txfifo. Всяких приколов поубавилось. Попробуйте.
rx3apf
Цитата(bloodden @ Aug 14 2008, 11:52) *
Я перед передачей очищаю txfifo. Всяких приколов поубавилось. Попробуйте.

Он это делает. А вот правильно ли реализована бурстовая запись в FIFO - вопрос...
bloodden
halSpiStrobe(CCxxx0_SIDLE);
halSpiStrobe(CCxxx0_SFTX);
halSpiWriteBurstReg(CCxxx0_TXFIFO, tx_buff, 8);
halSpiStrobe(CCxxx0_STX);
while((P2IN&BIT7) == 0);
while((P2IN&BIT7) != 0);

Процедуры с тишных исходников. У меня так работает отлично. Если не будет работать - инициализация кривая. Если надо, могу свою кинуть.
Ofer
Я такую инициализацию. Все правильно делаю?
И такой вопрос возник. После того, как в буфер TX записалось слово, на вывод GDO0 выдается 1, потом 0. А дальше? Потом продолжается меандр на этой ноге?
bloodden
Цитата(Ofer @ Aug 14 2008, 16:29) *
Я такую инициализацию. Все правильно делаю?
И такой вопрос возник. После того, как в буфер TX записалось слово, на вывод GDO0 выдается 1, потом 0. А дальше? Потом продолжается меандр на этой ноге?

Как только Вы записываете в буфер передатчика у вас ЖДО0 0-1-0 прыгает? Тогда у Вас постоянно включен передатчик. Тут народ говорил что коряво в этом режиме пашет он.

PS: Посмотрел Ваш конфиг MCSM1 правильно всё. Он должен переходить в айдл. У Вас кварц на сколько? Могу скинуть свой конфиг на 26,000 кварц и 433,92 38400бпс
rx3apf
Цитата(Ofer @ Aug 14 2008, 17:29) *
Я такую инициализацию. Все правильно делаю?
И такой вопрос возник. После того, как в буфер TX записалось слово, на вывод GDO0 выдается 1, потом 0. А дальше? Потом продолжается меандр на этой ноге?

Откуда же меандр возьмется ? Сигнал должен стать активным, когда началась передача синхрослова и деактивироваться после окончания передачи пакета. Все ж черным по белому написано в даташите... Да, так сколько же байтов передается ?
Ofer
Цитата(bloodden @ Aug 14 2008, 16:34) *
У Вас кварц на сколько?


На 26

Цитата(bloodden @ Aug 14 2008, 16:34) *
Могу скинуть свой конфиг на 26,000 кварц и 433,92 38400бпс


Скиньте
Цитата(rx3apf @ Aug 14 2008, 16:35) *
Да, так сколько же байтов передается ?


20 байтов
bloodden
Цитата(Ofer @ Aug 15 2008, 09:31) *

Кидаю свой конфиг:
Код
//38.4kbps nastroyki dlya  26.000 433,92
    halSpiWriteReg(CCxxx0_FSCTRL1,  0x06);
    halSpiWriteReg(CCxxx0_FSCTRL0,  0x00);
    halSpiWriteReg(CCxxx0_FREQ2,    0x10);
    halSpiWriteReg(CCxxx0_FREQ1,    0xB0);  
    halSpiWriteReg(CCxxx0_FREQ0,    0x71);  
   halSpiWriteReg(CCxxx0_MDMCFG4,  0xCA);
   halSpiWriteReg(CCxxx0_MDMCFG3,  0x83);
   halSpiWriteReg(CCxxx0_MDMCFG2,  0x13);//GFSK
    halSpiWriteReg(CCxxx0_MDMCFG1,  0xA2);  //A2-with FEC
   halSpiWriteReg(CCxxx0_MDMCFG0,  0xF0);
    halSpiWriteReg(CCxxx0_CHANNR,   0x00);
    halSpiWriteReg(CCxxx0_DEVIATN,  0x34);
    halSpiWriteReg(CCxxx0_FREND1,   0x56);
    halSpiWriteReg(CCxxx0_FREND0,   0x10);
    halSpiWriteReg(CCxxx0_MCSM0 ,   0x18 );
   halSpiWriteReg(CCxxx0_FOCCFG,   0x16);
    halSpiWriteReg(CCxxx0_BSCFG,    0x6C);
    halSpiWriteReg(CCxxx0_AGCCTRL2, 0x43);
    halSpiWriteReg(CCxxx0_AGCCTRL1, 0x40);
    halSpiWriteReg(CCxxx0_AGCCTRL0, 0x91);  
    halSpiWriteReg(CCxxx0_FSCAL3,   0xE9);
    halSpiWriteReg(CCxxx0_FSCAL2,   0x2A);
    halSpiWriteReg(CCxxx0_FSCAL1,   0x00);
    halSpiWriteReg(CCxxx0_FSCAL0,   0x1F);
    halSpiWriteReg(CCxxx0_FSTEST,   0x59);
    halSpiWriteReg(CCxxx0_TEST2,    0x81);
    halSpiWriteReg(CCxxx0_TEST1,    0x35);
    halSpiWriteReg(CCxxx0_TEST0,    0x09);
    halSpiWriteReg(CCxxx0_IOCFG2,   0x40);
    halSpiWriteReg(CCxxx0_IOCFG0,   0x06);  
    halSpiWriteReg(CCxxx0_PKTCTRL1, 0x0C);
    halSpiWriteReg(CCxxx0_PKTCTRL0, 0x04);
    halSpiWriteReg(CCxxx0_ADDR,     addr);
    halSpiWriteReg(CCxxx0_PKTLEN,   0x08);

100% рабочий.

И ещё: стартовая инициализация у меня такая:
Код
POWER_UP_RESET_CCxxx0();
  halRfWriteRfSettings();
  halSpiWriteReg(CCxxx0_FIFOTHR, 0x07);
  halSpiWriteReg(CCxxx0_PATABLE, paTable);
  halSpiWriteReg(CCxxx0_SYNC1, 0x9B);
  halSpiWriteReg(CCxxx0_SYNC0, 0xAD);
  halSpiStrobe(CCxxx0_SIDLE);  
  halSpiStrobe(CCxxx0_SFRX);
  halSpiStrobe(CCxxx0_SFTX);
Ofer
Почему у меня после включения секунд через 20 на GDO0 появляется менандр?

rx3apf даташит на английском. Это составляет основную проблему smile.gif Скажите хоть какие страницы или на какие разделы обратить внимание.
rx3apf
Цитата(Ofer @ Aug 15 2008, 11:22) *
Почему у меня после включения секунд через 20 на GDO0 появляется менандр?

Так откуда же я знаю ? Может быть, вообще неправильно загружается конфигурация и режимы...

Цитата
rx3apf даташит на английском. Это составляет основную проблему smile.gif Скажите хоть какие страницы или на какие разделы обратить внимание.

Разумеется, на разделы, относящиеся к интересующим составляющим поведения кристалла. Если речь о работе GDOx - то читать о режимах работы этих ног. Уж ничего такого сложного там нет...

Цитата(bloodden @ Aug 14 2008, 17:34) *
Как только Вы записываете в буфер передатчика у вас ЖДО0 0-1-0 прыгает? Тогда у Вас постоянно включен передатчик. Тут народ говорил что коряво в этом режиме пашет он.

Кто и когда такое говорил ? Режим непрерывной передачи - прекрасно работает, это проверено.
Ofer
Нашел я причину своих бед. У меня были таки действия по инициализации СС1100:

Код
CC1100_writestrobe(CC1100_SRES);
CC1100_burstwrite(0x00, CC1100_configuration, 47);
CC1100_burstwrite(CC1100_PATABLE, paTable, 1);


Как выяснилось, значения регистров после этого становились по умолчанию. А по умолчанию GDO0 настроен как 63 (0x3F) - CLK_XOSC/192. Это и объясняет появление на ноге нечто отдаленно похожее на меандр.
Таким образом, дополнительная инициализация регистров, так же как и перестановка 2 и 3 строки дали положительный результат.
Пока что дополнительных сюрпризов в программной части не замечено smile.gif
bloodden
У Вас явно с барстом проблемы.
И тут на форуме где-то кто-то писал, что все регистры при начальной инициализации в барст-режиме писать нельзя.
Ofer
Цитата(bloodden @ Aug 18 2008, 14:14) *
У Вас явно с барстом проблемы.


Возможно, но я проверил значения регистров(правда тоже барстом smile.gif) и они имели необходимые настройки.
Alex B._
Цитата(bloodden @ Aug 18 2008, 15:14) *
И тут на форуме где-то кто-то писал, что все регистры при начальной инициализации в барст-режиме писать нельзя.

тем не менее, все работает и на CC1100 и на CC2500
bloodden
Цитата(Alex B._ @ Aug 18 2008, 23:12) *
тем не менее, все работает и на CC1100 и на CC2500

laughing.gif
Я придерживаюсь такого правила: стараться не наступать хотя бы на чужие грабли. smile.gif
И так от своих вся башня в шишках smile.gif
Alex B._
Цитата(bloodden @ Aug 19 2008, 01:35) *
laughing.gif
Я придерживаюсь такого правила: стараться не наступать хотя бы на чужие грабли. smile.gif
И так от своих вся башня в шишках smile.gif

Да какие грабли, вы о чем?? все работает:
Код
static const U08 rf_config_tbl[] =
{
    /* IOCFG2   */  IO_INV_DIS                 |    /* G2 invert disable */
                    IO_FUNC_RX_FIFO_1,              /* G2 mode - FIFO    */

    /* IOCFG1   */  IOCFG1_DRIVE_STRENGTH_LOW  |    /* GPIO output strength low */
                    IO_INV_DIS                 |    /* G1 invert disable        */
                    IO_FUNC_Z_STATE,                /* G1 mode - SDO            */

    /* IOCFG0   */  IOCFG0_TEMP_SENS_DIS       |    /* Temp sensor disable  */
                    IO_INV_DIS                 |    /* G0 invert disable    */
                    IO_FUNC_SYNC,                   /* G0 mode - SYNC       */

    /* FIFOTHR  */  FIFOTHR_TX_33_RX_32,

    /* SYNC1    */  SYNK1_DEFAULT,                  /* Synk chunk = 0xD391  */
    /* SYNC0    */  SYNK0_DEFAULT,

    /* PKTLEN   */  1,                              /* Startup packet length */

    /* PKTCTRL1 */  PKTCTRL1_PQT_1             |
                    PKTCTRL1_CRC_AUTOFLUSH_EN  |    /* Autoflush fault packet    */
                    PKTCTRL1_APPEND_STATUS_DIS |    /* Status bytes not appended */
                    PKTCTRL1_ADR_CHK_EN_BK_0_255,   /* Enable address checking   */

    /* PKTCTRL0 */  PKTCTRL0_WHITE_DATA_EN     |
                    PKTCTRL0_PKT_FORMAT_NORM   |
                    PKTCTRL0_CC2400_DIS        |
                    PKTCTRL0_CRC_EN            |
                    PKTCTRL0_LENGTH_CONFIG_FIX,

    /* ADDR     */  0x55,

    /* CHANNR   */  RF_CHANNEL_DEF,

    /* FSCTRL1  */  12,                             /* FIF = 304.62 kHz (from SRFS) */

    /* FSCTRL0  */  0,                              /* Freq offset = 0 */

    /* FREQ2    */  0x5C,                           /* 0 channel freq = 2400.499908 */
    /* FREQ1    */  0x53,
    /* FREQ0    */  0xB1,

    /* MDMGFG4  */  MDMCFG4_CHANBW_E_0         |    /* RX channel bandwidth = 812.5 kHz */
                    MDMCFG4_CHANBW_M_0         |
                    MDMCFG4_DRATE_E_14,             /* Data Rate = 499.877930 kbit */

    /* MDMGFG3  */  59,

    /* MDMGFG2  */  MDMCFG2_DEM_DCFILT_EN      |
                    MDMCFG2_MOD_FORMAT_MSK     |
                    MDMCFG2_MANCHESTER_DIS     |
                    MDMCFG2_SYNC_MODE_30_32,

    /* MDMGFG1  */  MDMCFG1_FEC_DIS            |
                    MDMCFG1_NUM_PREAMBLE_8     |
                    MDMCFG1_CHANSPC_E_3,            /* Channel space = 249.938 kHz */

    /* MDMGFG0  */  59,

    /* DEVIATN  */  DEVIATN_DEVIATION_E_0      |    /* Don't use deviations with MSK */
                    DEVIATN_DEVIATION_M_0,

    /* MCSM2    */  MCSM2_RX_TIME_RSSI_DIS     |
                    MCSM2_RX_TIME_QUAL_DIS     |
                    MCSM2_RX_TIME_2,

    /* MCSM1    */  MCSM1_CCA_MODE_RSSI        |
                    MCSM1_RXOFF_MODE_IDLE      |
                    MCSM1_TXOFF_MODE_RX,

    /* MCSM0    */  MCSM0_FS_AUTOCAL_FROM_IDLE |
                    MCSM0_PO_TIMEOUT_16        |
                    MCSM0_PIN_CTRL_DIS         |
                    MCSM0_XOSC_FORCE_ON_DIS,

    /* FOCCFG   */  0x1D,
    /* BSCFG    */  0x1C,

    /* AGCCTRL2 */  0xC7,
    /* AGCCTRL1 */  0x40,
    /* AGCCTRL0 */  0xB2,

    /* WOREVT1  */  0x87,
    /* WOREVT0  */  0x6B,
    /* WORCTRL  */  0xFC,

    /* FREND1   */  0x56,
    /* FREND0   */  0x10,

    /* FSCAL3   */  0xEA,
    /* FSCAL2   */  0x0A,
    /* FSCAL1   */  0x00,
    /* FSCAL0   */  0x19,

    /* RCCTRL1  */  0x41,
    /* RCCTRL0  */  0x00,

    /* FSTEST   */  0x59,
    /* PTEST    */  0x7F,
    /* AGCTEST  */  0x3F,
    /* TEST2    */  0x88,
    /* TEST1    */  0x31,
    /* TEST0    */  0x0B
};

/* ****** */

    RF_SEL();

    SSP_TX(0 | WRITE | BURST); csp_ssp_get();

    for (to = 0; to < sizeof(rf_config_tbl); to++)
    {
        SSP_TX(rf_config_tbl[to]);
        SSP_RX();
    }
    RF_DESEL();

/* ****** */
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.