CC1101 et Arduino

Bonjour à tous !

Je suis nouveau ici, et je rencontre un problème avec mon composant cc1101 (http://haraldhenning.de/de/hardware/rf1100se-transceiver/).
Je veux utiliser ce composant pour obtenir un RSSI fiable, mais j’arrive à une erreur incompréhensible.
J’utilise la libraire Panstamps (http://www.electrodragon.com/w/File:Panstamp.zip) et je me suis inspiré du code ici (http://www.electrodragon.com/w/index.php?title=CC1101). Voici mon branchement (http://www.electrodragon.com/w/File:Cc1101_2_bb.png).

Voici mon code Emission :

#include "EEPROM.h"
#include "cc1101.h"

CC1101 cc1101;

// counter to get increment in each loop
byte counter;
byte b;
byte syncWord = 199;

void setup()
{
  Serial.begin(9600);
  Serial.println("start");

  // reset the counter
  counter=0;
  Serial.println("initializing...");
  // initialize the RF Chip
  cc1101.init();
  
  cc1101.setSyncWord(&syncWord, false);
  cc1101.setCarrierFreq(CFREQ_433);
  cc1101.disableAddressCheck();
  //cc1101.setTxPowerAmp(PA_LowPower);

  delay(1000);

  Serial.print("CC1101_PARTNUM "); //cc1101=0
  Serial.println(cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER));
  Serial.print("CC1101_VERSION "); //cc1101=4
  Serial.println(cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER));
  Serial.print("CC1101_MARCSTATE ");
  Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
  Serial.println("device initialized");
}

void send_data()
{
  CCPACKET data;
  data.length=2;
  byte blinkCount=counter++;
  data.data[0]=5;
  data.data[1]=10;
  //data.data[2]=0;
  //data.data[3]=1;
  //data.data[4]=0;
  //cc1101.flushTxFifo ();
  Serial.print("CC1101_MARCSTATE ");
  Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
  if(cc1101.sendData(data))
  {
    Serial.print("10");
    Serial.println(" sent ok :)");
  }
  else
  {
    Serial.println("sent failed :(");
  }
}

void loop()
{
 // b++;
  send_data();
  delay(1000);
}

Voici mon code Réception :

#include "EEPROM.h"
#include "cc1101.h"
// The LED is wired to the Arduino Output 4 (physical panStamp pin 19)
#define LEDOUTPUT 4

// The connection to the hardware chip CC1101 the RF Chip
CC1101 cc1101;

byte b;
byte i;
byte syncWord = 199;
long counter=0;
byte chan=0;

// a flag that a wireless packet has been received
boolean packetAvailable = false;

void blinker()
{
  digitalWrite(LEDOUTPUT, HIGH);
  delay(100);
  digitalWrite(LEDOUTPUT, LOW);
  delay(100);
}

/* Handle interrupt from CC1101 (INT0) gdo0 on pin2 */
void cc1101signalsInterrupt(void)
{
  // set the flag that a package is available
  packetAvailable = true;
}

void ReadLQI()
{
  byte lqi=0;
  byte value=0;
  lqi=(cc1101.readReg(CC1101_LQI, CC1101_STATUS_REGISTER));
  value = 0x3F - (lqi & 0x3F);
  Serial.print("CC1101_LQI ");
  Serial.println(value);
}

void ReadRSSI()
{
  byte rssi=0;
  byte value=0;
  
  rssi=(cc1101.readReg(CC1101_RSSI, CC1101_STATUS_REGISTER));
  
  if (rssi >= 128)
  {
    value = 255 - rssi;
    value /= 2;
    value += 74;
  }
  else
  {
    value = rssi/2;
    value += 74;
  }
  Serial.print("CC1101_RSSI ");
  Serial.println(value);
}

void setup()
{
  Serial.begin(9600);
  Serial.println("start");

  // setup the blinker output
  pinMode(LEDOUTPUT, OUTPUT);
  digitalWrite(LEDOUTPUT, LOW);

  // blink once to signal the setup
  blinker();
  // initialize the RF Chip
  cc1101.init();

  cc1101.setSyncWord(&syncWord, false);
  cc1101.setCarrierFreq(CFREQ_433);
  cc1101.disableAddressCheck(); //if not specified, will only display "packet received"
  //cc1101.setTxPowerAmp(PA_LowPower);
  
  Serial.print("CC1101_PARTNUM "); //cc1101=0
  Serial.println(cc1101.readReg(CC1101_PARTNUM, CC1101_STATUS_REGISTER));
  Serial.print("CC1101_VERSION "); //cc1101=4
  Serial.println(cc1101.readReg(CC1101_VERSION, CC1101_STATUS_REGISTER));
  Serial.print("CC1101_MARCSTATE ");
  Serial.println(cc1101.readReg(CC1101_MARCSTATE, CC1101_STATUS_REGISTER) & 0x1f);
  
  attachInterrupt(0, cc1101signalsInterrupt, FALLING);
  
  Serial.println("device initialized");
}

void loop()
{
  if(packetAvailable)
  {
    Serial.println("packet received");
    // Disable wireless reception interrupt
    detachInterrupt(0);
    
    ReadRSSI();
    ReadLQI();
    // clear the flag
    packetAvailable = false;
    
    CCPACKET packet;
    
    if(cc1101.receiveData(&packet) > 0)
    {
      if(!packet.crc_ok)
      {
        Serial.println("crc not ok");
      }

    if(packet.length > 0)
    {
      Serial.print("packet: len ");
      Serial.print(packet.length);
      Serial.print(" data: ");
      for(int j=0; j<packet.length; j++)
      {
        Serial.print(packet.data[j],HEX);
        Serial.print(" ");
      }
    Serial.println(".");
    }
  }
  // Enable wireless reception interrupt
  attachInterrupt(0, cc1101signalsInterrupt, FALLING);
  }
}

Lorsque je compile ce programme, le code “Emission” fonctionne, j’ai même tester avec un analyseur de spectre de fréquence si le composant envoyait bien quelque chose, et c’est le cas. Je pense donc que mon problème vient du côté récepteur. En effet, avec ce code, il fonctionne, mais dès que j’essaye de rajouter une ligne de code (peut importe la ligne, même si elle n’a rien à voir avec le code, comme rajouter un compteur) ou encore d’essayer de faire une fonction reception, il ne marche plus !! Mais le plus incompréhensible pour moi, c’est que si je rajoute une ligne de code (encore une fois, même si elle n’a rien avoir avec le code) du côté emission, et bien le côté reception ne marche plus !!! (alors que je détecte toujours quelque chose du côté de mon analyseur de spectre de fréquence…)

Voila, après des heures de réflexion, je pense que c’est peut-être le compilateur arduino qui pose problème, mais je ne connais rien aux compilateurs ainsi que leur fonctionnement :confused:

Si vous pouviez m’aider ou me donner des pistes, ce serait super !

Bonne journée !