Página 1 de 1

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

MensagemEnviado: 13 Abr 2010 12:55
por Silvio51
Alguem ja cnsegui botar esses camaradas pra funcionar ?

MensagemEnviado: 13 Abr 2010 14:12
por B-EAGLE
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

MensagemEnviado: 13 Abr 2010 15:22
por barboza
Estou usando CC2431 no meu mestrado.

MensagemEnviado: 13 Abr 2010 16:31
por Francesco
Realmente o CC2430 e CC2431 fazem "quase tudo" o que prometem. Mas funcionam, comunicam e tudo mais.

O que acontece com o seu?

MensagemEnviado: 13 Abr 2010 16:35
por Silvio51
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....

MensagemEnviado: 13 Abr 2010 16:40
por Francesco
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.

MensagemEnviado: 13 Abr 2010 17:04
por B-EAGLE
é 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;
}







MensagemEnviado: 13 Abr 2010 18:28
por Silvio51
Obrigado B-eagle.... vou testar... ja ë um norte... pra quem tava cego...

Qual aplica;äo vocë fez ?

MensagemEnviado: 13 Abr 2010 19:06
por xultz
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).

MensagemEnviado: 13 Abr 2010 20:19
por Silvio51
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 ?

MensagemEnviado: 14 Abr 2010 04:00
por albertorcneto
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.