Forum: HF, Funk und Felder Anfängerfrage: AM vs FM und CC1101


von Markus (cyberschlumpf23)


Angehängte Dateien:

Lesenswert?

Hallo, ich nutze in meinem Haus diverse Funksensoren im ISM Band, die 
ich in meiner Hausautomatisierung integriert habe. Um mehr ueber die 
darunterliegende Technik zu verstehen, habe ich mir nun ein CC1101 
Module gekauft und experimentiere damit. Besonders geht es mir auch um 
den Aspekt, das Signal mit einem SDR aufzufangen und zu decodieren um zu 
verstehen "was da eigentlich passiert".

Ich nutze einen ESP8266 mit einem CC1101 Modul via SPI. Verwendet wird 
die Bibliothek https://github.com/LSatan/SmartRC-CC1101-Driver-Lib

Ich habe folgenden simplen Sketch, der auf 433.92 MHz die Nachricht 
"Hello World" in Endlossschleife sendet. Es handelt sich dabei um das 
Beispiel, dass man in der Arduino IDE unter Examples->CC1101 default 
examples->New transmit method Hello World Advanced findet.
1
// These examples are from the Electronics Cookbook by Simon Monk
2
//https://github.com/LSatan/SmartRC-CC1101-Driver-Lib
3
// mod by Little_S@tan
4
#include <ELECHOUSE_CC1101_SRC_DRV.h>
5
 
6
int gdo0;
7
 
8
byte transmitt_byte[11] = {72,101,108,108,111,32,87,111,114,108,100};
9
char *transmitt_char = "Hello World";
10
 
11
void setup() {
12
 
13
#ifdef ESP32
14
gdo0 = 2;  // for esp32! GDO0 on GPIO pin 2.
15
#elif ESP8266
16
gdo0 = 5;  // for esp8266! GDO0 on pin 5 = D1.
17
#else
18
gdo0 = 6;  // for Arduino! GDO0 on pin 6.
19
#endif 
20
 
21
    Serial.begin(9600);
22
 
23
    if (ELECHOUSE_cc1101.getCC1101()){      // Check the CC1101 Spi connection.
24
    Serial.println("Connection OK");
25
    }else{
26
    Serial.println("Connection Error");
27
    }
28
    
29
    ELECHOUSE_cc1101.Init();                // must be set to initialize the cc1101!
30
    ELECHOUSE_cc1101.setGDO(gdo0,0);        // set lib internal gdo pins (gdo0,gdo2). Gdo2 not use for this example.
31
    ELECHOUSE_cc1101.setCCMode(1);          // set config for internal transmission mode.
32
    ELECHOUSE_cc1101.setModulation(2);      // set modulation mode. 0 = 2-FSK, 1 = GFSK, 2 = ASK/OOK, 3 = 4-FSK, 4 = MSK.
33
    ELECHOUSE_cc1101.setMHZ(433.92);        // 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.
34
    ELECHOUSE_cc1101.setDeviation(47.60);   // Set the Frequency deviation in kHz. Value from 1.58 to 380.85. Default is 47.60 kHz.
35
    ELECHOUSE_cc1101.setChannel(0);         // Set the Channelnumber from 0 to 255. Default is cahnnel 0.
36
    ELECHOUSE_cc1101.setChsp(199.95);       // The channel spacing is multiplied by the channel number CHAN and added to the base frequency in kHz. Value from 25.39 to 405.45. Default is 199.95 kHz.
37
    ELECHOUSE_cc1101.setRxBW(812.50);       // Set the Receive Bandwidth in kHz. Value from 58.03 to 812.50. Default is 812.50 kHz.
38
    ELECHOUSE_cc1101.setDRate(99.97);       // Set the Data Rate in kBaud. Value from 0.02 to 1621.83. Default is 99.97 kBaud!
39
    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!
40
    ELECHOUSE_cc1101.setSyncMode(2);        // Combined sync-word qualifier mode. 0 = No preamble/sync. 1 = 16 sync word bits detected. 2 = 16/16 sync word bits detected. 3 = 30/32 sync word bits detected. 4 = No preamble/sync, carrier-sense above threshold. 5 = 15/16 + carrier-sense above threshold. 6 = 16/16 + carrier-sense above threshold. 7 = 30/32 + carrier-sense above threshold.
41
    ELECHOUSE_cc1101.setSyncWord(211, 145); // Set sync word. Must be the same for the transmitter and receiver. (Syncword high, Syncword low)
42
    ELECHOUSE_cc1101.setAdrChk(0);          // Controls address check configuration of received packages. 0 = No address check. 1 = Address check, no broadcast. 2 = Address check and 0 (0x00) broadcast. 3 = Address check and 0 (0x00) and 255 (0xFF) broadcast.
43
    ELECHOUSE_cc1101.setAddr(0);            // Address used for packet filtration. Optional broadcast addresses are 0 (0x00) and 255 (0xFF).
44
    ELECHOUSE_cc1101.setWhiteData(0);       // Turn data whitening on / off. 0 = Whitening off. 1 = Whitening on.
45
    ELECHOUSE_cc1101.setPktFormat(0);       // Format of RX and TX data. 0 = Normal mode, use FIFOs for RX and TX. 1 = Synchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins. 2 = Random TX mode; sends random data using PN9 generator. Used for test. Works as normal mode, setting 0 (00), in RX. 3 = Asynchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins.
46
    ELECHOUSE_cc1101.setLengthConfig(1);    // 0 = Fixed packet length mode. 1 = Variable packet length mode. 2 = Infinite packet length mode. 3 = Reserved
47
    ELECHOUSE_cc1101.setPacketLength(0);    // Indicates the packet length when fixed packet length mode is enabled. If variable packet length mode is used, this value indicates the maximum packet length allowed.
48
    ELECHOUSE_cc1101.setCrc(1);             // 1 = CRC calculation in TX and CRC check in RX enabled. 0 = CRC disabled for TX and RX.
49
    ELECHOUSE_cc1101.setCRC_AF(0);          // Enable automatic flush of RX FIFO when CRC is not OK. This requires that only one packet is in the RXIFIFO and that packet length is limited to the RX FIFO size.
50
    ELECHOUSE_cc1101.setDcFilterOff(0);     // Disable digital DC blocking filter before demodulator. Only for data rates ≤ 250 kBaud The recommended IF frequency changes when the DC blocking is disabled. 1 = Disable (current optimized). 0 = Enable (better sensitivity).
51
    ELECHOUSE_cc1101.setManchester(0);      // Enables Manchester encoding/decoding. 0 = Disable. 1 = Enable.
52
    ELECHOUSE_cc1101.setFEC(0);             // Enable Forward Error Correction (FEC) with interleaving for packet payload (Only supported for fixed packet length mode. 0 = Disable. 1 = Enable.
53
    ELECHOUSE_cc1101.setPRE(0);             // Sets the minimum number of preamble bytes to be transmitted. Values: 0 : 2, 1 : 3, 2 : 4, 3 : 6, 4 : 8, 5 : 12, 6 : 16, 7 : 24
54
    ELECHOUSE_cc1101.setPQT(0);             // Preamble quality estimator threshold. The preamble quality estimator increases an internal counter by one each time a bit is received that is different from the previous bit, and decreases the counter by 8 each time a bit is received that is the same as the last bit. A threshold of 4∙PQT for this counter is used to gate sync word detection. When PQT=0 a sync word is always accepted.
55
    ELECHOUSE_cc1101.setAppendStatus(0);    // When enabled, two status bytes will be appended to the payload of the packet. The status bytes contain RSSI and LQI values, as well as CRC OK.
56
 
57
    Serial.println("Tx Mode");
58
}
59
 
60
void loop() {
61
 
62
//3 different methods to send data
63
 
64
//Transmitt "Hello World" from byte format.
65
ELECHOUSE_cc1101.SendData(transmitt_byte, 11);
66
delay(2000);
67
 
68
//Transmitt "Hello World" from char format.
69
ELECHOUSE_cc1101.SendData(transmitt_char);
70
delay(2000);
71
 
72
//Transmitt "Hello World" from char format directly.
73
ELECHOUSE_cc1101.SendData("Hello World");
74
delay(2000);
75
 
76
}

Mit gqrx finde ich mein Signal, allerdings nicht bei 433.92 MHz, sondern 
auf 433.964 MHz. Hier die erste Frage: Warum? Ist das Billig-CC1101 
Board so schlecht, dass es da eine solche Verschiebung gibt?

Ich sehe, dass es definitiv mein Signal ist, da es in exakt 2000ms 
Abstand im Wasserfall zu sehen ist. Ändere ich die Zeit, ändern sich die 
Abstände entsprechend.

Mit dem Tool Universal Radio Hacker (https://github.com/jopohl/urh) 
zeichne ich nun das Signal auf und demoduliere es.

Dabei viel mir auf, dass ich, wenn ich das Signal in AM sende 
(ELECHOUSE_cc1101.setModulation(2)) ich immer wieder Fehler habe, sende 
ich es in FM (setModulation(0)) kann es immer perfekt demoduliert 
werden.

Ein Zoom In auf das Signal zeigte mir, dass in AM die Trägerwelle einen 
Nulldurchgang macht und die Fehler immer dann auftraten, wenn dort ein 
Symbol codiert wurde. Bei FM war dies nicht der Fall, das Signal wurde 
immer perfekt demoduliert. Jetzt frage ich mich natürlich: Ist dann AM 
überhaupt nicht dafür geeignet Daten zu versenden, wenn es bei den 
Nulldurchgängen des Signals zu solchen Problemem kommen? Ich habe aber 
trotz einiger Google-Recherche nichts dazu gefunden, insofern bin ich 
mir nicht sicher, ob ich nicht einfach was falsch mache?

Zur Interpretation der Screenshots: Das was man unter "hex decode" sieht 
sind 4 Byte preamble AAAA, dann 4 Byte Syncword d391, dann die Länge 0b 
und dann die ASCII-Hexwerte von H,e,l,l,o, ...

Man sieht oben das AM demodulierte Signal und unten das FM demodulierte 
Signal. Es sind natuerlich auch pro Signal unterschiedliche 
Aufzeichnungen, einmal von einem Signal mit setModulation(0) und einmal 
von setModulation(2).

von Ulf P. (bastler2004)


Lesenswert?

Wichtige Regeln - erst lesen, dann posten!

    Groß- und Kleinschreibung verwenden
    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

von Wastl (hartundweichware)


Lesenswert?

Markus schrieb:
> Mit gqrx finde ich mein Signal, allerdings nicht bei 433.92 MHz, sondern
> auf 433.964 MHz.

Wird vermutlich daran liegen:

Markus schrieb:
> ELECHOUSE_cc1101.setMHZ(433.92);

Markus schrieb:
> ELECHOUSE_cc1101.setDeviation(47.60);

433.92 + 0.0476 = 433.967

Der Restfehler stammt wohl von SDR und/oder vom CC1101
(Frequenzungenauigkeiten der Quarz-Referenzen oder Ungenauigkeit
beim Einstellen der Empfangsfrequenz).

von Markus (cyberschlumpf23)


Lesenswert?

Wastl schrieb:
> Markus schrieb:
>> Mit gqrx finde ich mein Signal, allerdings nicht bei 433.92 MHz, sondern
>> auf 433.964 MHz.
>
> Wird vermutlich daran liegen:
>
> Markus schrieb:
>> ELECHOUSE_cc1101.setMHZ(433.92);
>
> Markus schrieb:
>> ELECHOUSE_cc1101.setDeviation(47.60);
>
> 433.92 + 0.0476 = 433.967
>
> Der Restfehler stammt wohl von SDR und/oder vom CC1101
> (Frequenzungenauigkeiten der Quarz-Referenzen oder Ungenauigkeit
> beim Einstellen der Empfangsfrequenz).

Danke! Stimmt, das könnte es erklären! Und das macht man.... damit nicht 
alle auf 433.92 senden und sich gegenseitig ins Gehege kommen, sondern 
man von vornherein einen gewissen Jitter hat?

Welche Breite muss mein Filter denn haben, wenn ich das möglichst exakt 
mit dem SDR rausschneiden will? Ich gehe auf 433.967 rechne nochmal die 
Ungenauigkeit drauf und dann...? Vordefiniere Filter sind ja z.B. 10kHz, 
20kHz (Narrow, Wide, ...)?

Und wie erklärt sich jetzt das "Problem" bei AM? Ist das eine inherente 
Problematik warum man dann eher FM verwenden würde?

von Wastl (hartundweichware)


Lesenswert?

Markus schrieb:
> Ist das Billig-CC1101
> Board so schlecht, dass es da eine solche Verschiebung gibt?

Dass du ein Billig-SDR haben könntest, auf die Idee bist du
nicht gekommen? Zu einer problematischen Funkübertragung
gehören immer zwei, ein Sender und ein Empfänger, beide
können "schlecht" sein. Was das vermutliche Problem ist
habe ich ja bereits vorher beschrieben.

von Markus (cyberschlumpf23)


Lesenswert?

Doch, das habe ich schon verstanden, und ja auch als mögliche Erklärung 
selbst erkannt.

Im Kern geht es mir ja aber in der Frage um die unterschiedliche 
Darstellung zwischen AM und FM und ob ich überhaupt erwarten darf, dass 
eine längere Nachricht problemlos via AM übertragen werden kann aufgrund 
dessen, dass beim Nulldurchgang die Demodulation doch nicht mehr sicher 
möglich ist - zumindest meine Vermutung?

Falls ich gänzlich falsch liege, bitte gerne korrigieren

von Helmut -. (dc3yc)


Lesenswert?

Wenn du dir mal den Unterschied zwischen AM (genauer OOK - 
on-off-keying) und FM klar machst, kommst du vielleicht selbst drauf: 
bei OOK wird der Unterschied Signal - kein Signal ausgewertet, bei FM 
hast du immer ein Signal und kannst den Empfänger per Squelch schalten 
und eine AGC zum Regeln verwenden.

von Markus (cyberschlumpf23)


Lesenswert?

Falls es der Erklärung dient:

Sender ist ein CC1101, wie schon geschrieben, Empfänger ist ein NOOELEC 
NESDR Smart https://www.nooelec.com/store/sdr/sdr-receivers/smart.html
Ich habe aber auch ein SDRplay und stelle dort das gleiche fest.

Meinem Verständnis nach ist aber die Frage nach der Empfänger HW nicht 
die Erklärung dafür, wie sich das Signal prinzipiell darstellt, sondern 
nur Unterschiede im SNR, generelle Qualität, usw.?

von Markus (cyberschlumpf23)


Lesenswert?

Helmut -. schrieb:
> Wenn du dir mal den Unterschied zwischen AM (genauer OOK -
> on-off-keying) und FM klar machst, kommst du vielleicht selbst drauf:
> bei OOK wird der Unterschied Signal - kein Signal ausgewertet, bei FM
> hast du immer ein Signal und kannst den Empfänger per Squelch schalten
> und eine AGC zum Regeln verwenden.

OK, d.h. dann interpretiere ich daraus also dass ich für eine 
Datenübertragung eher nicht AM nutzen sollte, sondern FM, da am 
Nulldurchgang bei AM eben nicht unterschieden werden kann ob das Signal 
0 ist oder die Trägerwelle, wie im Screenshot oben zu sehen?

von Helmut -. (dc3yc)


Lesenswert?

Wenn du dein Signal so codierst, dass "kein Träger" eine 0 bedeuten 
soll, hast du eine falsche Codierung verwendet. Bei ASK (=OOK) sollte 
man halt Manchestercodierung oder PWM oder sowas verwenden, etwas, das 
für eine logische 0 und 1 einen Signalwechsel beinhaltet. Die üblichen 
Wettersensoren verwenden z.B. 100µs Signal und 200µs kein Signal als 0 
und 200µs Signal und 100µs kein Signal für 1. Und eine ausreichend lange 
Präambel zur Synchronisierung vorher nicht vergessen!

: Bearbeitet durch User
von Markus (cyberschlumpf23)


Lesenswert?

Helmut -. schrieb:
> Wenn du dein Signal so codierst, dass "kein Träger" eine 0 bedeuten
> soll, hast du eine falsche Codierung verwendet. Bei ASK (=OOK) sollte
> man halt Manchestercodierung oder PWM oder sowas verwenden, etwas, das
> für eine logische 0 und 1 einen Signalwechsel beinhaltet. Die üblichen
> Wettersensoren verwenden z.B. 100µs Signal und 200µs kein Signal als 0
> und 200µs Signal und 100µs kein Signal für 1. Und eine ausreichend lange
> Präambel zur Synchronisierung vorher nicht vergessen!

Vielen Dank für diesen Hinweis Helmut, das war "wertvoll" und ja auch 
genau ein Punkt, warum ich frage!

OK, dann liegt der "Fehler" also hier, dass in dem Beispiel gesetzt 
wurde:
1
ELECHOUSE_cc1101.setManchester(0);

und ein Wechsel auf 1 sollte es mir dann auch mit AM immer erfolgreich 
sein? Eine Präambel wird ja bereits gesendet (
1
ELECHOUSE_cc1101.setSyncMode(2);
)

Würde ich das gleiche Ziel nicht aber auch erreichen, indem ich die 
Geschwindigkeit, mit der die Daten gesendet werden, deutlich herabsetze?

Dann sollte es doch sehr viel seltener zu der Situation kommt, dass ein 
übertragenes Symbol genau (nur) in dem Zeitpunkt übertragen wird, indem 
der Träger 0 ist?

Das wäre dann wohl
1
ELECHOUSE_cc1101.setDRate(99.97);       // Set the Data Rate in kBaud. Value from 0.02 to 1621.83. Default is 99.97 kBaud!

was ich dann einfach mal auf einen viel kleineren Wert setze und schaue 
wie es sich dann darstellt?

Oder wird es in der Praxis dann auch so gemacht, das man eine CRC mit 
überträgt und am Empfänger prüft und sicherheitshalber das Signal 
mehrfach aussendet, so dass man etwaige Übertragungsfehler kompensieren 
kann?

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Markus schrieb:
> Oder wird es in der Praxis dann auch so gemacht, das man eine CRC mit
> überträgt und am Empfänger prüft

Das machen so gut wie alle digitalen Funkprotokolle, außer vielleicht 
billige Funksteckdosen oder so.

Markus schrieb:
> sicherheitshalber das Signal mehrfach aussendet

Das wird auch oft gemacht.

Dass AM unzuverlässig ist ist doch bekannt - hast du einen Grund das zu 
nutzen statt FSK?

von Markus (cyberschlumpf23)


Lesenswert?

Niklas G. schrieb:
> Markus schrieb:
>> Oder wird es in der Praxis dann auch so gemacht, das man eine CRC mit
>> überträgt und am Empfänger prüft
>
> Das machen so gut wie alle digitalen Funkprotokolle, außer vielleicht
> billige Funksteckdosen oder so.
>
> Markus schrieb:
>> sicherheitshalber das Signal mehrfach aussendet
>
> Das wird auch oft gemacht.
>
> Dass AM unzuverlässig ist ist doch bekannt - hast du einen Grund das zu
> nutzen statt FSK?

Der Grund ist lediglich, dass ich blutiger Anfänger bin und mir dachte 
ein AM Signal zu "verstehen" (auch im Sinne des URH Tools, siehe 
Screenshot) wäre einfacher. Störungen, was ja einer der Gründe gegen AM 
ist(?), verhinderten ja hier offenbar nicht, dass die Demodulation 
erfolgreich war.

Im Grunde wäre dann also die Erkenntnis aus diesem Thread:

* Ausser es gibt triftige Gründe, grundsätzlich immer FM verwenden
* Wenn doch AM (Modus ASK/OOK), dann immer auch Manchester mit 
aktivieren, ansonsten kommt es zu dem beobachteten Verhalten.
* Immer eine CRC und/oder mehrfach aussenden, da ein einzelnes Aussenden 
immer gestört werden könnte und somit der Empfänger im Zweifelsfall es 
nicht sauber decodieren kann

Ist das so richtig?

von Wastl (hartundweichware)


Lesenswert?

Markus schrieb:
> Oder wird es in der Praxis dann auch so gemacht, das man eine CRC mit
> überträgt und am Empfänger prüft und sicherheitshalber das Signal
> mehrfach aussendet, so dass man etwaige Übertragungsfehler kompensieren
> kann?

Ein CRC ist zwar schon mal gut damit Schrott in der Übertragung
erkannt wird, aber was hilft ein CRC wenn das Datenpaket gar
nicht ankommt? Bei Funkübertragung kann ich ein Datenpaket x-mal
schicken und es können alle Pakete von anderen Funkteilnehmern
gestört sein. Daher ist eine (Funk-)Datenübertragung erst dann
sicher wenn der Sender auch eine Bestätigung über den Erhalt
eines Datenpaketes vom Empfänger bekommt.

Diese Funktionalität ist übrigens bei den NRF24 Chips (ja, wir
reden hier von 433MHz Modulen) automatisch enthalten wenn man
das Acknowledge aktiviert. Dieses Ack wird nur dann gesendet
wenn ein Datenpaket vollständig und fehlerfrei beim Empfänger
angekommen ist. Eine sehr komfortable Art der Datensicherung.

von Wastl (hartundweichware)


Lesenswert?

Markus schrieb:
> Immer eine CRC und/oder mehrfach aussenden, da ein einzelnes Aussenden
> immer gestört werden könnte

Wie gerade geschrieben, es nützt nichts, jedes einzelne
deiner (vielen) Datenpakete kann gestört sein.

von Markus (cyberschlumpf23)


Lesenswert?

Vielen Dank für Eure Antworten!

von Motopick (motopick)


Lesenswert?

Es ist halt auch keine besonders gute Idee, bei einer AM-Modulation
den Traeger bis auf 0% abzusenken. Das bekommt "einfachen"
Demodulatoren nicht besonders. Uebliche Werte liegen eher bei 20 - 30%.
Zur Reichweiteoptimierung kann man auch noch hoehere Werte probieren.

von Markus (cyberschlumpf23)


Lesenswert?

Motopick schrieb:
> Es ist halt auch keine besonders gute Idee, bei einer AM-Modulation
> den Traeger bis auf 0% abzusenken. Das bekommt "einfachen"
> Demodulatoren nicht besonders. Uebliche Werte liegen eher bei 20 - 30%.
> Zur Reichweiteoptimierung kann man auch noch hoehere Werte probieren.

Beziehst Du Dich darauf, dass ich in dem Beispiel einfach mal naiv von 
FM zu ASK/OOK gewechselt habe ohne zeitgleiche andere Parameter zu 
ändern? (Ich habe verstanden, das Manchester Encoding zu aktivieren wäre 
eine gute Idee gewesen?)

Ich habe jetzt jedenfalls nichts gefunden, dass ich so etwas wie die 
Absenkung in dem ASK/OOK Modus einfach beeinflussen könnte und offenbar 
ist hier auch nicht ein sinnvoller Default wie von Dir geschrieben 
20-30% gesetzt?

Wie schon eingangs geschrieben bin ich Neuling in dem Thema und wollte 
vor allem verstehen WARUM es Probleme gibt. Das ist mir soweit gelungen, 
denke ich.

von Motopick (motopick)


Lesenswert?

Markus schrieb:

> Beziehst Du Dich darauf, dass ich in dem Beispiel einfach mal naiv von
> FM zu ASK/OOK gewechselt habe ohne zeitgleiche andere Parameter zu
> ändern? (Ich habe verstanden, das Manchester Encoding zu aktivieren wäre
> eine gute Idee gewesen?)

Da ich den CC1101 nicht kenne, kann ich mich nicht auf dein
Beispiel beziehen. Man kann aber mit sinnvoll gewaehlten
Modulationsparametern bereits asynchron Zeichen senden und
empfangen.
Eine Manchestercodierung sorgt fuer ein Signal ohne Gleichanteil,
0 und 1 treten gleich haeufig auf.
Die behebt das Modulationsproblem bei AM aber nicht.

> Ich habe jetzt jedenfalls nichts gefunden, dass ich so etwas wie die
> Absenkung in dem ASK/OOK Modus einfach beeinflussen könnte und offenbar
> ist hier auch nicht ein sinnvoller Default wie von Dir geschrieben
> 20-30% gesetzt?

Das wirst du selbst herausfinden muessen.
Man koennte das Modulationssignal statisch anlegen und die
Ausgangsspannung/leistung messen.

> Wie schon eingangs geschrieben bin ich Neuling in dem Thema und wollte
> vor allem verstehen WARUM es Probleme gibt. Das ist mir soweit gelungen,
> denke ich.

Das es bei 100%iger AM-Modulation Probleme gibt, hast du ja schon
herausgefunden. :)

von Sim (Gast)


Lesenswert?

Markus schrieb:
> Ist das eine inherente Problematik

Aus Herr Ente und Frasendreschmaschine: inhärent intrinsisch immanent ;)

von Markus (cyberschlumpf23)


Lesenswert?

Was mir jetzt aber noch nicht klar ist: Wenn doch ASK/OOK doch offenbar 
so "schlecht" ist, Manchester-Codierung auch das Problem nicht löst - 
warum wurde das dann wohl integriert? Natürlich kann das am Ende nur TI 
beantworten, aber was kann denn der Use-Case sein, wenn doch FM 
eigentlich in allen Varianten überlegen ist? Einfach "weil man das halt 
auch braucht"?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Markus schrieb:
> warum wurde das dann wohl integriert

Damit es kompatibel mit existierenden (sehr einfachen/billigen) Geräten 
ist die nur ASK/OOK haben. Wenn man auf beiden Seiten FSK zur Verfügung 
hat sollte man es wohl auch nutzen.

von Motopick (motopick)


Lesenswert?

Markus schrieb:
> Was mir jetzt aber noch nicht klar ist: Wenn doch ASK/OOK doch offenbar
> so "schlecht" ist,

Ist sie ja nicht. Ich wuerde auch nicht glauben, dass man den
CC1101 dabei nur mit 100% Modulation betreiben kann.
Das fehlt womoeglich einfach in den Libraries (aka verhackstueckten
Include-Files).
Hast du denn schon einmal Datenblatt/Manual zum CC1101 bemueht?

> Manchester-Codierung auch das Problem nicht löst -

Manchester setzt auf die gewaehlte Modulation auf. Es kann also
etwas schlecht konfiguriertes nicht verbessern.
Manchester kann man im uebrigen mit einfachster Hardware
sowohl kodieren als auch dekodieren. Was so einfach ist, kann
nicht schlecht sein. :)

> warum wurde das dann wohl integriert? Natürlich kann das am Ende nur TI
> beantworten, aber was kann denn der Use-Case sein, wenn doch FM
> eigentlich in allen Varianten überlegen ist? Einfach "weil man das halt
> auch braucht"?

Im Moment redest du noch von Dingen, zu denen dir jedes Verstaendnis
fehlt. Und das wird sich auch mit der Benutzung von zusammenkopierten
Code nicht verbessern.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ich empfehle mal g'schwind ein Studium der elektrischen 
Nachrichtentechnik. Da werden genau so Sachen, wie verschiedene 
Modulationsverfahren, ihre Eigenschaften, verschiedene Kanalcodierungen, 
ihre Eigenschaften, Fehlerschutzverfahren und ihre Eigenschaften, 
Kommunikationskanaele, ihre Eigenschaften wie z.b. Bandbreite, 
Kapazitaet, Fehlereigenschaften, etc. bla. sehr gruendlich 
durchgekaut...

Gruss
WK

von Markus (cyberschlumpf23)


Lesenswert?

Ich habe meine Versuche mit dem am Anfang erwähnten Beispielcode jetzt 
noch ein wenig fortgesetzt:

Aktiviere ich Manchester Encoding so war es in jedem Fall moeglich in 
wenigstens 1 von 3 Übertragungen die ursprüngliche Nachricht erfolgreich 
zu dekodieren.

Setze ich allerdings die Datenrate drastisch herunter, so dass die 
Übermittlung einer "1" bereits mehrere komplette Schwingen umfasst - war 
und es somit nicht zu dem Fall kommt, dass ein Symbol genau zum 
Nulldurchgang der Amplitude moduliert wird - so war mit reinem ASK/OOK 
auch ohne Manchester Encoding die Demodulation stets erfolgreich.

@motopick: Ja, ich habe mir gestern noch das gesamte Datenblatt zu 
Gemüte geführt und auch das dagegen gehalten, was die Library macht. Ich 
gebe zu, dass ich - Überraschung - nicht alles verstanden habe, was das 
Datenblatt beschreibt. Das was noch am ehesten in Frage kommt ist m.E. 
der Punkt 10.6 im Datenblatt auf Seite 33 
(https://www.ti.com/lit/ds/symlink/cc1101.pdf). Ich vermute aber, dass 
es hierbei mehr um die generelle Sendeleistung geht. Ansonsten habe ich 
tatsaechlich nichts gefunden. "By programming the PATABLE, controlled PA 
power ramp-up and ramp-down can be achieved, as well as ASK modulation 
shaping for reduced bandwidth" sowie "The ASK variant supported by the 
CC1101 allows programming of the modulation depth
(the difference between 1 and 0), and shaping of the pulse amplitude. 
Pulse shaping" - allerdings scheint da nicht mehr weiter darauf 
eingegangen zu werden. Eventuell ist es aber Seite 59 "If OOK modulation 
is used, the logic 0 and logic 1 power levels shall be programmed to 
index 0 and 1 respectively." im Bereich der PA_POWER Tabellen.

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

Markus schrieb:

> ..."If OOK modulation
> is used, the logic 0 and logic 1 power levels shall be programmed to
> index 0 and 1 respectively." im Bereich der PA_POWER Tabellen.

Naja siehste. Eine Sendeleistung fuer die '0' und eine fuer die '1'.
Wenn man fuer die '0' da eine Null hineinschreibt, ist man halt
selber zu doof. :)
Und Rampen fuer die Flanken...

Was will man mehr.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.