CC1101 Signal in Daten umwandeln

Hallo zusammen,
ich bin neu hier und habe ein Problem wo Ihr mir vieleicht helfen könnt.
Ich habe einen Arduino Nano mit einem CC1101 868MHz Modul verbunden.
Ich will damit einen Temperatursensor (Bresser Art.No. 7009999) auslesen.
Der Arduino bekommt jede Minute ein Signal vom CC1101 über GDO2 Pin.
Das Signal kommt vom Temperatursensor (TS), denn wenn der TS blinkt hab ich am Arduino ein Signal. Im Serial Monitor lass ich mir dann die Impulsbreite des Signal ausgeben. Jetzt muss ich das Signal in Daten umwandeln und da komme ich nicht weiter. Ich finde da keine Zuordnung was eine 1 und eine 0 ist. Wie bekomme ich diese Zuordnung raus? Weil die Impulse unterschiedlich breit sind und die Anzahl der Impulse variiert. Oder könnte es sein das ich das CC1101 Modul falsch eingestellt habe!

```cpp

#include <ELECHOUSE_CC1101_SRC_DRV.h>
//#include <cc1101_debug_service.h>


void setup() {
  Serial.begin(115200);
  Serial.println("Serial ok");
  delay(100);
  // if (ELECHOUSE_cc1101.getCC1101()){       // Check the CC1101 Spi connection.
  // Serial.println("Connection OK");
  // }else{
  // Serial.println("Connection Error");
  // }

  pinMode(2, INPUT);

//CC1101 Settings:                (Settings with "//" are optional!)
  ELECHOUSE_cc1101.Init();            // must be set to initialize the cc1101!
//ELECHOUSE_cc1101.setRxBW(812.50);  // Set the Receive Bandwidth in kHz. Value from 58.03 to 812.50. Default is 812.50 kHz.
//ELECHOUSE_cc1101.setPA(10);       // set TxPower. The following settings are possible depending on the frequency band.  (-30  -20  -15  -10  -6    0    5    7    10   11   12)   Default is max!
  ELECHOUSE_cc1101.setMHZ(868.3); // Here you can set your basic frequency. The lib calculates the frequency automatically (default = 433.92).The cc1101 can: 300-348 MHZ, 387-464MHZ and 779-928MHZ. Read More info from datasheet.
  ELECHOUSE_cc1101.setDRate(54);
  ELECHOUSE_cc1101.SetRx();  // set Receive on
  Serial.println("Rssi: " + (String)ELECHOUSE_cc1101.getRssi());

}

#define AR_LEN 600

bool Flanke = false;
int Counter = 0;
unsigned long microzeit = 0;
unsigned long StartzeitP = 0;
unsigned long StartzeitN = 0;
unsigned int Zeitdata[AR_LEN];
int index = 0;
int merker = 0;
int PN = 1;
bool wechsel = false;

unsigned long EndzeitG = 0;
unsigned long StartzeitG = 0;
unsigned long GesamtEinzelzeit = 0;

void loop() {
  //cc1101_debug.debug();
  
  int Eingang = digitalRead(2);

  // Positive Flankenerkennung
  if(Eingang && !Flanke){  
    microzeit = micros();
    if(Counter == 0){
      StartzeitG = microzeit;
    }
    Counter++;
    StartzeitP = microzeit;
    if(microzeit - StartzeitN < 9000 && microzeit - StartzeitN > 0 && index < AR_LEN){
      Zeitdata[index] = microzeit - StartzeitN;
      index++;
    }
  }

  // Negative Flankenerkennung
  if(!Eingang && Flanke){  
    microzeit = micros();
    //microzeit = loops;
    StartzeitN = microzeit;
    if(microzeit - StartzeitP < 9000 && microzeit - StartzeitP > 0 && index < AR_LEN){
      Zeitdata[index] = microzeit - StartzeitP;
      index++;
    }
    EndzeitG = microzeit;
  }
  Flanke = Eingang;

  // Serieller Monitor Ausgabe
  if(micros() - StartzeitG > 61000 && index > 0){
    Serial.println("Receive Data - P-Flanken: " + (String)Counter + " Index: " + (String)(index) + " G-Zeit: " + (String)(EndzeitG - StartzeitG));
    unsigned int max = 0;
    unsigned int min = 999999;
    unsigned int maxP = 0;
    unsigned int minP = 999999;
    
    for(int i=0;i<index;i++){
      Serial.print(Zeitdata[i]);
      Serial.print(",");
      if(i % 2){
        if(max < Zeitdata[i]){
          max = Zeitdata[i];
        }
        if(min > Zeitdata[i]){
          min = Zeitdata[i];
        }
      }
      else{
        if(maxP < Zeitdata[i]){
          maxP = Zeitdata[i];
        }
        if(minP > Zeitdata[i]){
          minP = Zeitdata[i];
        }
      }
      GesamtEinzelzeit += Zeitdata[i];
    }
    Serial.println();
    Serial.println("MaxN: " + (String)max + " MinN: " + (String)min + " MaxP: " + (String)maxP + " MinP: " + (String)minP); // + " GE-Zeit: " + (String)GesamtEinzelzeit);

    Counter = 0;
    index = 0;
    merker = 0;
    PN = 1;
    wechsel = false;
    GesamtEinzelzeit = 0;
    StartzeitG = 0;
    EndzeitG = 0;

    memset(Zeitdata, 0, sizeof(Zeitdata));
  }  //*/
}

11:16:12.608 -> Receive Data - P-Flanken: 511 Index: 600 G-Zeit: 59284
11:16:12.608 -> 944,20,16,36,156,28,16,52,184,56,192,16,16,16,176,68,164,64,176,24,20,44,192,52,184,56,168,76,164,80,156,28,16,44,156,16,16,56,180,64,212,24,176,72,164,72,164,24,16,44,148,16,28,52,184,64,172,132,16,100,24,36,164,16,16,44,276,16,20,64,408,76,164,16,16,44,156,28,16,100,16,104,16,52,652,252,28,44,272,16,16,100,20,64,292,252,16,100,16,92,32,104,16,100,16,72,20,16,16,92,24,20,16,72,16,100,48,72,16,72,16,16,20,20,20,204,16,100,16,56,24,28,16,224,16,100,16,36,16,56,16,96,20,80,28,156,36,268,16,20,16,100,16,16,28,64,16,100,24,72,36,112,16,44,24,292,16,44,128,16,16,16,20,44,152,24,16,76,16,16,16,16,20,16,184,100,16,44,16,64,16,104,16,80,20,100,24,16,16,24,20,52,16,104,16,72,16,16,16,104,16,52,20,32,20,100,16,92,28,16,16,64,16,52,16,176,16,112,16,100,16,16,20,72,16,100,16,28,16,56,16,108,56,200,36,80,20,100,36,212,16,100,20,80,36,112,20,84,24,104,16,112,44,212,16,92,28,52,28,136,16,108,16,104,16,80,36,56,144,16,56,204,16,100,20,104,36,36,156,64,16,64,16,100,16,64,16,28,16,44,304,108,16,64,164,72,168,24,16,104,16,64,16,16,16,100,20,16,24,72,16,92,16,24,20,64,16,100,52,204,28,100,16,104,24,16,16,64,20,104,16,64,20,16,16,100,56,60,20,100,16,120,36,80,36,36,404,136,16,104,16,108,48,72,16,112,16,92,40,80,48,212,16,64,16,28,16,100,16,28,16,64,16,92,28,16,16,64,16,116,36,184,16,28,16,64,16,100,48,100,16,72,16,20,16,100,16,64,16,24,16,112,16,92,24,16,20,24,16,28,16,64,44,64,404,144,20,100,16,72,44,104,16,92,36,16,16,44,36,92,64,80,16,80,16,16,20,100,16,52,36,16,20,100,16,100,20,24,16,64,16,56,16,16,28,108,16,92,44,72,16,56,16,36,16,128,28,60,20,16,16,72,16,20,16,16,24,64,16,104,16,24,20,52,28,88,24,64,16,16,28,204,36,120,16,24,20,184,16,100,20,104,44,76,16,100,16,16,20,72,16,16,16,76,44,52,16,132,24,72,20,16,16,84,32,100,16,100,16,112,16,100,28,16,16,64,16,104,24,72,36,100,44,220,20,72,16,16,16,56,24,20,16,100,16,100,20,100,16,84,44,208,36,92,16,84,36,220,16,132,16,24,20,60,20,100,16,68,20,16,16,100,16,36,20,16,16,16,16,224,
11:16:12.773 -> MaxN: 292 MinN: 16 MaxP: 944 MinP: 16

Vielleicht können Sie sich diese Bibliothek ansehen

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Danke für die Info,
ich schau mir das mal an. Kann ein wenig dauern da es für mich sehr umfangreich ist.

Hallo, das mit dem 868MHz Empfang hab ich hinbekommen.
Jetzt hab ich noch eine 433MHz Sender den ich mit einem CC1101 (433Mhz) empfange. Der Sender schickt 3mal das selbe. Ich hab mal mit dem Oszi das Signal am GDO2 aufgenommen. Aber ich komme nicht darauf wie ich die Signale in Daten umwandeln kann so das es zur Temperatur und Luftfeuchte passt. Kann mir damit jemand helfen?


Damit sich hier jeder zurecht findet, solltest du einen neuen Thread mit passendem Titel aufmachen.

In den Daten ist als Erstes Kanal, Gerät ID, danach zweimal temp und humi.
such mall bei Forum - Mikrocontroller.net. Dort hat eine das geschaft aber nur mit Tchibo Station

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.