CC2500 & CC1100... Chöro e ranger de dentes...

Telecom em geral

Moderadores: andre_luis, 51

CC2500 & CC1100... Chöro e ranger de dentes...

Mensagempor Silvio51 » 13 Abr 2010 12:55

Alguem ja cnsegui botar esses camaradas pra funcionar ?
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

Mensagempor B-EAGLE » 13 Abr 2010 14:12

tá tendo problema exatamente onde?

dá uma olhada nos firmwares exemplos que tem no site da texas... são bons e funfam certinho:

http://www.ti.com/litv/zip/swrc021f
B-EAGLE
Word
 
Mensagens: 847
Registrado em: 19 Out 2006 14:12
Localização: Campo Grande - MS

Mensagempor barboza » 13 Abr 2010 15:22

Estou usando CC2431 no meu mestrado.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Francesco » 13 Abr 2010 16:31

Realmente o CC2430 e CC2431 fazem "quase tudo" o que prometem. Mas funcionam, comunicam e tudo mais.

O que acontece com o seu?
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP

Mensagempor Silvio51 » 13 Abr 2010 16:35

B-EAGLE escreveu:tá tendo problema exatamente onde?

dá uma olhada nos firmwares exemplos que tem no site da texas... são bons e funfam certinho:

http://www.ti.com/litv/zip/swrc021f


Minhas dificuldades säo :

1 - Configura;äo pela SPI... näo estou conseguindo configurar o dispositivo.... säo muitos dados de configuraäo.

2 - Componentes preif[ericos... capacitores e indutores SMD... onde encontrar ?


Vocë tem algum projeto que funcione pra eu me basear ? Tipo um link de dados de baixa velocidade....
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

Mensagempor Francesco » 13 Abr 2010 16:40

A própria biblioteca do zigbee da texas já vem com esses exemplos e indicações, dê uma olhada lá: http://focus.ti.com/docs/prod/folders/print/cc2500.html Veja em "Tools and Softwares".

Quanto aos componentes, não tem outra maneira. Tivemos quem comprar na Digikey.
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP

Mensagempor B-EAGLE » 13 Abr 2010 17:04

é isso aí, nos proprios exemplos da texas tem tudo lá.... mas se for ainda dificultoso, ha uns 3 anos atras fiz um firmwarezinho pro AT89S8252, não cheguei a terminar o firmware, mas as funções de envio e recebimento de dados estão feitas:

Código: Selecionar todos
void envia_byte(unsigned char);
void configura_CC1100();
void CC1100_reset();
void transmite_pacote(unsigned char*,unsigned short);
char recebe_pacote(unsigned char*,unsigned char*);
char le_status_reg_CC1100(unsigned char);
char le_reg_CC1100(unsigned char);
void le_burst_reg_CC1100(unsigned char, unsigned char*, unsigned char);

void transmite_pacote(unsigned char *txBuf, unsigned short sz){
   unsigned short i;
   ok = 1;
   CSn = 0;
   while(SO);
   SPDR = 0x3F | 0x40;      //0x3F > endereço do FIFO TX; 0x40 > bit para acesso por BURST
   while (ok);
   for (i = 0; i < sz; i++){
      ok = 1;
      SPDR = txBuf[i];      
      while(ok);      
   }
   CSn = 1;
   delay(2);            
   envia_byte(0x35);       //STROBE para entrar no modo TX
   while(!GDO0);         //espera GDO0 ir para 1
   while(GDO0);         //espera GDO0 ir para 0
   return;
}

void CC1100_reset(){   //CC1100 datasheet pg.42
   SCLK = 1;   //put SLCK in 1 and SI in 0 to avoid potential problems with pin control mode   
   CSn = 0;
    _nop_();
   _nop_();
   _nop_();
   _nop_();
   CSn = 1;
   delay(1);
   CSn = 0;
   while(SO);   
   envia_byte(0x30);   
   delay(10);
   CSn = 1;   
   return;
}   
void envia_byte(unsigned char bt){
   ok = 1;
   CSn = 0;
   SPDR = bt;   
   while(ok);   //o bit de interrupção SPIF_ é colocado em 0 novamente quando o valor de SPDR é lido/escrito;   
   CSn = 1;      
   return;
}

void envia_reg(unsigned char addr, unsigned char value){
   ok = 1;
    CSn = 0;
    while(SO);   
   SPDR = addr;
   while(ok);
   ok = 1;
   SPDR = value;
   while(ok);
    CSn = 1;
   return;   
}

void configura_CC1100(){   
   envia_reg(0x0B,0x0A);            //FSCTRL1
   envia_reg(0x0C,0x00);            //FSCTRL0
   envia_reg(0x0D,0x10);            //FREQ2
   envia_reg(0x0E,0xA7);            //FREQ1
   envia_reg(0x0F,0x62);            //FREQ0
   envia_reg(0x10,0x2D);            //MDMCFG4
   envia_reg(0x11,0x3B);            //MDMCFG3
   envia_reg(0x12,0x73);            //MDMCFG2
   envia_reg(0x13,0x22);            //MDMCFG1
   envia_reg(0x14,0xF8);            //MDMCFG0
   envia_reg(0x0A,0x00);            //CHNNR (channel number)
   envia_reg(0x15,0x00);            //DEVIATN   
    envia_reg(0x21,0xB6);            //FREND1
   envia_reg(0x22,0x10);            //FREND0
   envia_reg(0x18,0x18);            //MCSM0
   envia_reg(0x19,0x1D);            //FOCCFG
    envia_reg(0x1A,0x1C);            //BSCFG
   envia_reg(0x1B,0xC7);            //AGCCTRL2            
   envia_reg(0x1C,0x00);            //AGCCTRL1
   envia_reg(0x1D,0xB2);            //AGCCTRL0
    envia_reg(0x23,0xEA);            //FSCAL3
   envia_reg(0x24,0x2A);            //FSCAL2
   envia_reg(0x25,0x00);            //FSCAL1
   envia_reg(0x26,0x1F);            //FSCAL0
   envia_reg(0x29,0x59);            //FSTEST
    envia_reg(0x2C,0x88);            //TEST2
   envia_reg(0x2D,0x31);            //TEST1
   envia_reg(0x2E,0x09);            //TEST0
   envia_reg(0x00,0x0B);            //IOCFG2
   envia_reg(0x02,0x06);            //IOCFG0
    envia_reg(0x07,0x04);            //PKTCTRL1
   envia_reg(0x08,0x05);            //PKTCTRL0
   envia_reg(0x09,0x00);            //ADDR
   envia_reg(0x06,0xFF);            //PKTLEN   
   //envia_reg(0x01,0x0B);             //IOCFG1
   envia_reg(0x3E,0x60);            //paTable   (output power signal)   (0xC0 = 10dBm; 0x60 = 0dBm)
   return;
}

char recebe_pacote(unsigned char *rxBuf, unsigned char *tamanho){
   unsigned char pktLength;
   unsigned char sts[2];
   envia_byte(0x34);    //strobe para entrar no modo RX
   while(!GDO0);      //espera GDO0 pulsar em nivel baixo
   while(GDO0);   
   if ((le_status_reg_CC1100(0x3B) & 0x7F)){   //0x3B = RXBYTES -- os sete bits menos significativos são a quantidade de bytes no fifo
      pktLength = le_reg_CC1100(0x3F);    //0x3F = endereço do RXFIFO
      if (pktLength <= *tamanho){         
         le_burst_reg_CC1100(0x3F,rxBuf,pktLength);
         *tamanho = pktLength;
         le_burst_reg_CC1100(0x3F,sts,2);
         return (sts[1] & 0x80);         //bit mais significativo do byte é o indicador de CRC OK
      }

      else{
         *tamanho = pktLength;
         envia_byte(0x36);         //strobe para entrar no modo IDLE
         envia_byte(0x3A);         //strobe de flush RX FIFO
         return 0;      
      }            
   }
   else return 0;
}

void le_burst_reg_CC1100(unsigned char addr, unsigned char *rxBuf, unsigned char count){
   unsigned short i;
   ok = 1;
   CSn = 0;
   while(SO);
   SPDR = (addr | 0xC0);    //0xC0 = bit para leitura em burst
   while(ok);
   for(i = 0; i < count; i++){
      ok = 1;
      SPDR = 0;
      while(ok);
      rxBuf[i] = dr;
   }
   CSn = 1;
   return;
}

char le_reg_CC1100(unsigned char addr){
   char res;
   ok = 1;
   CSn = 0;
   while(SO);
   SPDR = (addr | 0x80);   //0x80 = bit para leitura de um byte somente
   while(ok);
   ok = 1;
   SPDR = 0;
   while(ok);
   res = dr;
   CSn = 1;
   return res;
}

char le_status_reg_CC1100(unsigned char addr){
   char res;   
   ok = 1;
   CSn = 0;
   while(SO);
   SPDR = (addr | 0xC0);   //0xC0 = bit para leitura em burst
   while(ok);
   ok = 1;
   SPDR = 0;            //valor qualquer para obter o byte de retorno do chip
   while(ok);
   res = dr;
   CSn = 0;
   return res;
}






B-EAGLE
Word
 
Mensagens: 847
Registrado em: 19 Out 2006 14:12
Localização: Campo Grande - MS

Mensagempor Silvio51 » 13 Abr 2010 18:28

Obrigado B-eagle.... vou testar... ja ë um norte... pra quem tava cego...

Qual aplica;äo vocë fez ?
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

Mensagempor xultz » 13 Abr 2010 19:06

A respeito dos componentes discretos do balun, eu recomendo pegar a app note e comprar exatamente os mesmos (usando o part number da Murata), eu uma vez troquei um único indutor por um genérico e o alcance foi pro saco. Hoje eu compro da Digikey e usando o mesmo part number (dependendo do meu estado de humor, eu compro o equivalente em 0603, sneão compro 0402 mesmo igual do documento).
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor Silvio51 » 13 Abr 2010 20:19

xultz escreveu:A respeito dos componentes discretos do balun, eu recomendo pegar a app note e comprar exatamente os mesmos (usando o part number da Murata), eu uma vez troquei um único indutor por um genérico e o alcance foi pro saco. Hoje eu compro da Digikey e usando o mesmo part number (dependendo do meu estado de humor, eu compro o equivalente em 0603, sneão compro 0402 mesmo igual do documento).


Realmente pelo que vi, estes componentes säo `preocupantes`.... porëm nunca comprei na Digikei... eles vendem direto pro Brasil com cartäo de crëdito internacional ?
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

Mensagempor albertorcneto » 14 Abr 2010 04:00

Bom, pra ajudar um pouco mais, fiz essa tabela a um tempo atras.

http://rapidshare.com/files/375670579/R ... n.xls.html

Ela calcula quais os registradores tem que ser mudados e para qual valor de acordo com as configuracoes desejadas. Foi usado para um projeto com CC1100.
"Nothing travels faster than the speed of light, with the possible exception of bad news, which obeys its own set of laws" ~ Douglas Adams
albertorcneto
Byte
 
Mensagens: 269
Registrado em: 28 Mar 2007 14:08


Voltar para Telecomunicações

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x