Zum Test der Funkübertragung  zwischen zwei CC1101-Modulen im 868 MHz-Bereich war ich fast am Verzweifeln angelangt.

Ich hatte 3 verschiedene Module erstanden:

1. 433 MHz-Typ mit 2*5p Stiftleiste.

2. 868 MHz Modul von Pollin

3. 868 MHz Modul von AliExpress 

Wie bei so vielen Forumsbeiträgen hatte ich folgendes Phänomen (Nano,328):

Die einfachen Beispiele der PanStamp-Library sind einfach nicht  zum Laufen zu bringen…

Grund:

Wenn man davon ausgeht, dass die Module mit gleichem Chip (TI CC1101) und gleicher 868 MHz Ausrichtung,

bei gleicher Register-Einstellung für Sender und Receiver  funktionieren sollten, hat man sich getäuscht!

Mit Hilfe von SDRSharp, dem SmartRFStudio und Vergleich von allen Modulen als SENDER (!)  war in SDRSharp eindeutig zu erkennen,

dass die verschiedenen Module auf unterschiedlicher Frequenz sendeten, also deutlich außerhalb der Erkennungs-Bandbreite.

Wohlgemerkt, bei gleicher Standard-Register-Parametern!

Abhilfe:

ein Modul mit passender Frequenz belassen, das andere Modul mit Hilfe der SmartRF-Studio-Einstellungen die Trägerfrequenz zu der des ersten Moduls verschieben.

Das lässt sich in SDRSharp (HowTo) nachvollziehen, ohne keine Chance die Ursache zu entdecken.

Und pronto: Die Ausgabe im Arduino-Serial-Monitor mit angepassten Frequenz-Parametern erfolgte im Receiver-Modus prompt:

 

 image

Diese Werte in CC1101.h sind anzupassen, hier als Beispiel meine Werte:

//--- Carrier frequency = 868 MHz
#define CC1101_DEFVAL_FREQ2_868  0x21        // org. 21 Frequency Control Word, High Byte
#define CC1101_DEFVAL_FREQ1_868  0x64        // org. 62 Frequency Control Word, Middle Byte
#define CC1101_DEFVAL_FREQ0_868  0x62        // org. 76 Frequency Control Word, Low Byte

Man legt sich also 2 verschiedene Versionen davon an. Eine für den Sender, die andere für den Receiver. Winking smile

Was ich noch nicht sagen kann, ob die Frequenz bei zwei identischen Modulen gleich ist ?


Panstamp-Sender-Code:

/* ======================================================
    Antenna lengths:
   
    If you decide to use your panStamps with a wire stub as an antenna,
   
you will have to use one of the following lengths, depending on your carrier frequency: 
   
Frequency = 868 MHz:
   
      Quarter Wavelength: 82.2 mm = 3.235 inch
      Half Wavelength:   164.3 mm = 6.470 inch
   
    Frequency = 915 MHz:
   
      Quarter Wavelength: 77.9 mm = 3.069 inch
      Half Wavelength:   155.9 mm = 6.138 inch
   
    Frequency = 433 MHz:
   
      Quarter Wavelength: 164.7 mm =  6.484 inch
      Half Wavelength:    329.4 mm = 12.968 inch 
===========================================================
*/

/** ----------------------------------------------------
  ** SPI pins
  ** definiert in C:\Users\<username>\Documents\Arduino\libraries\Panstamp2\spi.h 


  #define SPI_SS          10     // PB2 = SPI_SS = CSN
  #define SPI_MOSI        11     // PB3 = MOSI
  #define SPI_MISO        12     // PB4 = MISO
  #define SPI_SCK         13     // PB5 = SCLK
  #define GDO0             2     // PD2 = INT0

 
  #define PORT_SPI_MISO   PINB
  #define PORT_SPI_SS     PORTB
  #define PORT_GDO0       PIND
 
  #define BIT_SPI_MISO    4
  #define BIT_SPI_SS      2
  #define BIT_GDO0        2 
  
 
----------------------------------------------------*/

#include <calibration.h>
#include <cc1101.h>
#include <ccpacket.h>
#include <commonregs.h>
#include <config.h>
#include <nvolat.h>
#include <panstamp.h>
#include <register.h>
#include <repeater.h>
#include <spi.h>
#include <swcommand.h>
#include <swpacket.h>
#include <swquery.h>
#include <swstatus.h>

#include <EEPROM.h>

CC1101 cc1101;

// The LED is wired to the Arduino Output 4 (physical panStamp pin 19)
// im NANO mit 868 Modul (CUL)ist die externe LED an D9 angeschlossen!
#define LEDOUTPUT 9

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

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

void setup()
{
Serial.begin(38400);
Serial.println("Starting CC1101_js_send...");

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

// blink once to signal the setup
blinker();

// reset the counter
counter=0;
Serial.println("initializing...");
 
//--- initialize the RF Chip
cc1101.init();

cc1101.setSyncWord(&syncWord, false); 
    
cc1101.setCarrierFreq(CFREQ_868);
 
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 to 868.175 MHZ. Setup done.");
}

void send_data()
{
CCPACKET data;
data.length = 10;
byte blinkCount = counter++;

data.data[0] = 5;
data.data[1] = blinkCount;
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(blinkCount, HEX);
   Serial.println(" sent ok :)");
   blinker();
}
else
{
   Serial.println("sent failed :(");
   blinker();
   blinker();
}
}

void loop()
{
    send_data();
    delay(1000);
}