реклама на сайте
подробности

 
 
> cc1101 - переключение из режима передачи в режим приема и наоборот.
zheka
сообщение Aug 6 2013, 16:15
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, как правильно переключаться из одного режима в другой?
Вроде бы в даташите есть цифры, означающие время переключения RX->TX и TX->RX, то есть напрямую.
У меня же, если не переводить чип в режим IDLE перед каждым переключением, большие сложности со связью.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Aug 10 2013, 09:01
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Продолжаю биться.
С переходом в RX после TX все получается. - А вот наоборот - нет.
Прежде чем приводить код, опишу алгоритм на пальцах.

Ведущий: отправляет посылку в 2 байта (пинг), немедленно переходит в прием. Получая ответ на пинг функция Ping_RF() завершается. Далее следует принудительная пауза в 10 мс и далее по кругу. ТАймаут на ожидание ответа - 100 мсек.

Ведомый: в цикле ловит спад на GDO0, после чего переписывает пришедший пакет из FIFO в буфер контроллера. Если пинг корректен (2 байта), то пикает динамиком ( beep() ) отправляет ответ ( Ping_RF_Answer() ).

Если все хорошо, то ведомый постоянно трещит динамиком - близко к сотне посылок в секунду, как раз соответствует паузе в цикле в 10 мсек, что говорит о том, что пропусков пакетов нет.


Далее есть 3 строки
Код
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
          TI_CC_SPIStrobe(TI_CCxxx0_SFRX);
          TI_CC_SPIStrobe(TI_CCxxx0_SRX);


после переписывания данных из FIFO.

Стоит закомментировать перевод в IDLE - начинает пикать около 10 раз в секунду, светодиод, который должен загораться по таймауту, начинает моргать.
Но и динамик довольно часто пикает - то есть пакеты довольно часто и причем равномерно проходят.
Что самое интересное - строб SRX можно убрать, переводится автоматом, но почему-то хочет чтобы после обработки буфера был переовд в IDLE.

Вот код ведущего
Код
    
unsigned char Ping_RF()
{
     RF_TX_Buffer[0]=2;
         RF_TX_Buffer[1]= 0xAA;
       RF_TX_Buffer[2]= RF_RX_Buffer[0];
     TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, RF_TX_Buffer, 3);

  // TX_ON;        
       TI_CC_SPIStrobe(TI_CCxxx0_STX);        
          
        rf_ping_timeout_tick=RF_PING_TIMEOUT;
      
        while(rf_ping_timeout_tick>0)
       {
        if (GDO0_flag==1)
         {
                    TX_OFF;  
                    rf_ping_timeout_tick=0;
                  GDO0_flag=0;
          TI_CC_SPIStrobe(TI_CCxxx0_SFTX);                     
                 }
             }
            
       // RX_ON;

             rf_ping_timeout_tick=RF_PING_TIMEOUT;
    
             while(rf_ping_timeout_tick>0)
       {
        if (GDO0_flag==1)
         {
          
                     rf_ping_timeout_tick=0;
                  GDO0_flag=0;
                    st=RFReceivePacket(RF_RX_Buffer,&leng);
                  TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
                    TI_CC_SPIStrobe(TI_CCxxx0_SFRX);
                    TI_CC_SPIStrobe(TI_CCxxx0_SRX);    
                    
          return 1;
         }  
       }
       RX_OFF;
             LED2_ON;
             delay_ms(10);
             LED2_OFF;
             return 0;

}

............................



while(1)
{
Ping_RF();
delay_ms(10);    
}



Вот код ведомого:
Код
void Ping_RF_Answer(unsigned char code)
        {
            RX_OFF;
          RF_TX_Buffer[0]=2;
           for (i=1;i<=2;i++) RF_TX_Buffer[i]= code;
        TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, RF_TX_Buffer, 3);
                //TX_ON;        
                 TI_CC_SPIStrobe(TI_CCxxx0_STX);        
                
                rf_ping_timeout_tick=RF_PING_TIMEOUT;
      
        while(rf_ping_timeout_tick>0)
       {
        if (GDO0_flag==1)
         {
                    TX_OFF;  
                    rf_ping_timeout_tick=0;
                  GDO0_flag=0;
          TI_CC_SPIStrobe(TI_CCxxx0_SFTX);                     
                 }
             }
            
             // RX_ON;  
    }    

........................

while(1)
{
      
             
     rf_ping_timeout_tick=RF_PING_TIMEOUT;
     GDO0_flag=0;

     while(rf_ping_timeout_tick>0)
   {
                    
         if (GDO0_flag==1)
      {
            
            GDO0_flag=0;
            LINK_PRESENT_flag=1;
            rf_ping_timeout_tick=RF_PING_TIMEOUT;    
         ping_error_count=0;
            
            st=RFReceivePacket(RF_RX_Buffer,&leng);
           
            
            TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
          TI_CC_SPIStrobe(TI_CCxxx0_SFRX);
          TI_CC_SPIStrobe(TI_CCxxx0_SRX);    
      
            if (leng==2)
            {
                    beep();
                    delay_ms(10);
                 Ping_RF_Answer(0x44);
            }            
        }
    }
}



Где я что делаю не так?

Сообщение отредактировал zheka - Aug 10 2013, 09:05
Go to the top of the page
 
+Quote Post
Pasha_a13
сообщение Aug 11 2013, 16:04
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 166
Регистрация: 8-09-09
Из: Украина
Пользователь №: 52 244



Цитата(zheka @ Aug 10 2013, 12:01) *
Далее есть 3 строки
Код
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
          TI_CC_SPIStrobe(TI_CCxxx0_SFRX);
          TI_CC_SPIStrobe(TI_CCxxx0_SRX);

после переписывания данных из FIFO.

Стоит закомментировать перевод в IDLE - начинает пикать около 10 раз в секунду, светодиод, который должен загораться по таймауту, начинает моргать.
Но и динамик довольно часто пикает - то есть пакеты довольно часто и причем равномерно проходят.
Что самое интересное - строб SRX можно убрать, переводится автоматом, но почему-то хочет чтобы после обработки буфера был переовд в IDLE.

Так Вы комментируете только переход в IDLE?
Просто тут же есть еще такие нюансы, типа как очищать буфер (SFRX-SFTX) можно только когда устройство либо в IDLE либо в режиме переполнения буфера.
А по логике настройки как у Вас настроены переходы после RX и после TX? В IDLE или в RX?
Дело в том что когда Вы переходите в IDLE вручную, то Вы после этого принудительно очищаете приемный буфет после чтения из него.
Не может ли получатся что где-то не до конца что-то вычитывается из буфера?

Сообщение отредактировал Pasha_a13 - Aug 11 2013, 16:11
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zheka   cc1101 - переключение из режима передачи в режим приема и наоборот.   Aug 6 2013, 16:15
- - Pasha_a13   Вы можете, в зависимости от нужного режима работы,...   Aug 7 2013, 16:38
- - zheka   У меня одно устройство ведущее, другое ведомое. Ве...   Aug 8 2013, 15:44
|- - Pasha_a13   Цитата(zheka @ Aug 8 2013, 18:44) У меня ...   Aug 8 2013, 18:45
- - zheka   пока что я не пользовался автоопустошением, но пла...   Aug 8 2013, 18:47
|- - Pasha_a13   Цитата(zheka @ Aug 8 2013, 21:45) пока чт...   Aug 8 2013, 18:47
- - zheka   Настроил автоматические переходы. Убрал принудител...   Aug 9 2013, 03:34
|- - Pasha_a13   Цитата(zheka @ Aug 9 2013, 06:34) Настрои...   Aug 9 2013, 08:32
- - zheka   Вот код Ping_RF - на ведущем. Ping_RF_Answer() - н...   Aug 9 2013, 13:14
- - Pasha_a13   я всегда использовал постоянную длину пакета, пото...   Aug 9 2013, 13:25
- - zheka   А у меня острая необходимость в переменной длине. ...   Aug 9 2013, 13:30
- - Pasha_a13   а зачем после строба передачи у Вас отслеживается ...   Aug 9 2013, 13:36
- - zheka   Я вас обманул - у меня CRC_AUTOFLUSH включен. Цит...   Aug 9 2013, 13:42
|- - Pasha_a13   уже понял. Я просто не использовал этой функции(оп...   Aug 9 2013, 14:10
- - zheka   Простите, а калибровку нужно делать периодически? ...   Aug 9 2013, 16:36
- - Pasha_a13   да, калибровать нужно периодически. Я не скажу нас...   Aug 9 2013, 16:40
- - zheka   Цитатасли пакет не пришел или побился(преамбула не...   Aug 9 2013, 16:43
- - Pasha_a13   может попробуйте увеличить хотя бы до 2-3мс и посм...   Aug 9 2013, 16:44
- - zheka   Чип что, от переключений так частоту уводит сильно...   Aug 9 2013, 16:46
|- - Pasha_a13   Цитата(zheka @ Aug 9 2013, 19:46) Чип что...   Aug 9 2013, 16:55
- - Boriska   У меня возник очередной затык на пути освоения СС1...   Sep 19 2013, 05:44
|- - Pasha_a13   Цитата(Boriska @ Sep 19 2013, 08:44) CC11...   Sep 19 2013, 08:35
|- - Boriska   Цитата(Pasha_a13 @ Sep 19 2013, 12:35) у ...   Sep 19 2013, 11:01
|- - Pasha_a13   Цитата(Boriska @ Sep 19 2013, 14:01) Длин...   Sep 19 2013, 11:18
|- - Boriska   Цитата(Pasha_a13 @ Sep 19 2013, 15:18) Во...   Sep 19 2013, 17:41
- - DASM   Калибровка нужна только при включении или сильной ...   Sep 19 2013, 10:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 15:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016