Zentraler Sende- Empfangspunkt
Inhaltsverzeichnis:
5.1 Spezielles Protokoll für den zentralen Sende/Empfangspunkt 6
6 Beispiel Datenübertragung. 7
7 Namenskonventionen für Programmierung. 8
Versionsverfolgung
Version | Datum | Bemerkung |
|
V0.1 | 18.06.16 | Initialversion |
|
V0.2 | 21.08.16 | Quittungsantwort geändert, editorielle Ergänzungen |
|
V0.3 | 07.10.16 | Auf I2C ohne CRC für Kompatibilität mit RFM69W |
|
V0.4 | 16.10.16 | Der CRC16 wird wieder eingeführt und generell durch den uP gerechnet und bei LEN berücksichtigt |
|
V0.4 | 17.01.17 | Noch die Adresse des DS1621 nachgetragen |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Der zentrale Sende- Empfangspunkt besteht aus den RN-Kontroller-Modul, bestückt mit einem RFM12-Funkmodul (5V-Version!) sowie einem I2C-Leitungspuffer. Die Einheit wird mit 5V fernversorgt. Alternativ kann auch das Universal-S/E-Modul verwendet werden.
Weiter beinhaltet der zentrale Sende/Empfänger einen Temperatursensor. Dazu wird ein DS18B20 (1-wire) verwendet. Ein 2ter I2C-Temperatursensor ist zusätzlich noch auf der Platte montiert.
Verwendetes Kontrollermodul: RN-Mikrofunk oder als Alternative das Modul Universal-S/E
Von Modul RN-Mikrofunk werden die folgenden Pins verwendet:
Pin | Cotrollerport | Signal | Bemerkumg |
1 |
| Antenne | Antenne |
2 |
| GND | |
13 | PD7 | 1-Wire | Temperatursensor |
21 | PD1 | TxD | zur Protokollierung |
22 | PD0 | RxD | zur Protokollierung |
23 | PC6 | Reset |
|
24 | PC5 | SCL | I2C |
25 | PC4 | SDA | I2C |
29 |
| +5V |
|
30 |
| +5V |
|
31 |
| GND |
|
32 |
| GND |
|
Das Modul wird auf eine Trägerplatte gesteckt die auch den I2C-Puffer beinhaltet.
Das verwendete Protokoll zur Ansteuerung des zentralen S/E-Punktes ist das gleiche wie zur Kommunikation mit den Funkteilnehmern, jedoch ohne Preamble- ,Synchronisationsbytes und CRC. Da im Zentralen S/E-Punkt ein 5V RFM12-Modul eingesetzt wird muss der CRC16 im Zentralen S/E-Punkt erzeugt werden.
Die via I2C von der Zentrale ankommenden Daten werden auf die eigene Adresse (DAB) überprüft. Wird diese erkannt so wird die entsprechende Aktion ausgeführt. Bei allen anderen Adressen werden die Daten 1:1 zum Sendemodul weitergeleitet und mit dem CRC ergänzt.
Vom Empfangsmodul empfangene Daten werden auf den CRC überprüft. Ist dieser in Ordnung werden die Daten ohne CRC via I2C-Bus zur Zentrale weitergeleitet (ab LEN ohne CRC1).
Das folgende Beispiel zeigt ein kleines Datenpaket mit CRC16-Fehlerdetektion:
I2C-Adr | R/W | LEN | DAB | SAB | CDB | Data0 | Datax | CRC2 | CRC1 | Stop |
< I2C-Adresse -> | ß------------------------------- Nutzdaten -----------------------------------à | I2C |
Die Nutzdaten werden so zum Sender weitergereicht.
Name | Bezeichnung (original) | Bezeichnung (deutsch) | Byte | Umfang | CRC |
LEN | Length Byte | Länge/Anzahl Bytes | 1 |
| T | CRC- Berechnung | ↓ |
DAB | Destination Address Byte | Empfängeradresse | 2 | T I | LEN: Länge | | ↓ | |
SAB | Source Address Byte | Senderadresse | 3 | ||
CDB | Command Definition Byte | Kommandobyte | 4 | ||
DATA1 | Data Byte 1 | Datenbyte 1 | 5 | ||
CRC2 | High byte of CRC-16 | höherwertiges Byte der CRC16 | 6 | nicht be-rücksichtigt | |
CRC1 | Low byte of CRC-16 | niederwertiges Byte des CRC16 | 7 |
Die gesamte Paketlänge beträgt hier sieben Byte. Die Bytes sind mit ihrem LSB rechts positioniert (Bit7…Bit0). Hier wird 1 Byte Daten übertragen.
Dem Byte SYNC folgt das Längen-Byte LEN. Dieses legt die Anzahl zu übertragenden Bytes fest.
| Bit | |||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
LEN | LEN |
LEN: Dies gibt die Anzahl Bytes (DAB bis und mit letztem Datenbyte) an, OHNE LEN und die CRC-Bytes.
Das Kommando-Byte beinhaltet folgende Funktionen:
| Bit | |||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CDB | ACK/NACK | C/D | R1 | PN |
Die enthaltenen Bits haben die folgende Bedeutung:
Name | Bezeichnung |
PN | Fortlaufende Paket-Nummer (0..15 und wieder von vorne) |
R1 | Reservebit, vorläufig 0 |
C/D | Kommando = 0 / Daten = 1 |
ACK | ACK/NAK Bits |
ACK | Definition |
|
|
0 0 | Sender fordert kein Acknowledge |
|
|
0 1 | Sender fordert Acknowledge |
|
|
1 0 | Empfänger sendet NACK zurück | C/D = 1; R1 = 0; PN = 1 | &hD1 |
1 1 | Empfänger sendet ACK zurück | &h91 |
PN: Paketnummer, die gesendeten Pakete werden von 0 bis 15 durchnummeriert. Dann wird wieder mit 0 gestartet. Eine komplett neue Datenpaketfolge beginnt jedoch immer mit 1. Damit können fehlende Pakete festgestellt und eine Widerholung angefordert werden.
Wird eine Quittung gesendet so werden die Paketnummer PN auf hex 1, das Reservebit R1 auf 0 und C/D auf 1 gesetzt.
C/D: Kommandobyte; mit log.0 werden die folgenden Daten als Kommando interpretiert, mit 1 als Daten. Vorläufig bleibt das Bit beim Datensenden log.1, bei der Quittung log.0.
Die Adresse besteht aus einem Byte.
Die I2C-Adresse des zentralen Sende/Empfangspunktes ist: Dezimal 118 Hex 76 Die I2C-Adresse der Zentrale ist: Dezimal 114 Hex 72 Die I2C-Adresse des Temperaturgebers DS1621 ist: Dezimal 144 Hex 90 |
Die Adresse des zentralen S/E-Punktes (= Modul) ist: Dezimal 5 Hex 05 Die Funk-Adresse des zentralen S/E-Punktes (= Zentrale) ist: Dezimal 85 Hex 55 |
Der CRC wird als 16Bit-CRC realisiert und umfasst alle Bytes bis zum letzten übertragenen Datenbyte ohne die 2 CRC-Bytes.
Das Protokoll wird auf maximal 60 Nutzbytes beschränkt. Dies um eine spätere Verschlüsselung bei Verwendung des RFM69CW zu ermöglichen und im Funkmodulrechner RAM zu sparen.
Das Protokoll ist so ausgelegt dass mit oder ohne Quittung gearbeitet werden kann. Temperaturen können z.B. alle Minuten gesendet werden; dann ist eine Quittung nicht notwendig. Bei Steuerbefehlen und Datenübertragungen muss jedoch eine Empfangsquittung erfolgen.
Die Anzahl der Sende-Wiederholungen bei keiner oder negativer Quittung kann festgelegt werden sollte jedoch auf 2 Sende-Wiederholungen beschränkt werden.
Um bei batteriebetriebenen Modulen Strom zu sparen läuft deren Empfänger nicht ständig. Der Empfänger wartet jedoch eine bestimmte Zeit nach dem Senden von Daten resp. nach dem Empfang der Quittung ob Daten an ihn gesendet werden. Diese müssen also direkt danach folgen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
|
|
|
|
|
|
|
|
|
|
|
|
|
| <---- T2 max. Wartezeit auf Quittung ----> |
|
|
|
|
|
|
| ||||||||
hAA | hAA | h2D | hD4 | hxx | Zent | Sens |
| <-max. 62 Datenbytes-> |
|
| <---- T1 ---> |
|
|
|
|
|
|
|
|
|
|
|
| ||||||
Pre | Pre | Syn | Syn | LEN | DAB | SAB | CDB | D1 | D2 | …… | Dx | CRC | CRC | Umschalt- & Auswerte-zeit SàE | <------------------------------------ T3 --------------------------------------------> |
|
| ||||||||||||
|
|
|
|
| <---------------------------- für LEN massgebend ---------------------------> |
|
|
|
|
| Sens | Zent |
|
|
|
|
| ||||||||||||
|
|
|
| <----------------- für CRC massgebend --------------------------> |
|
| Pre | Pre | Syn | Syn | LEN | DAB | SAB | CDB | CRC | CRC |
|
| |||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
| hAA | hAA | h2D | hD4 | h05 |
| h55 | hD1 | = | ACK |
|
| ||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| h91 | = | NACK |
|
| ||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
|
|
|
|
| <--T4 max. Wartezeit auf zusätzliche Daten --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||
------ Quittung ----------à | <---- T5 ----> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||
Zent |
|
|
|
|
| hAA | hAA | h2D | hD4 | hxx | Sens | Zent |
| <-max. 62 Datenbytes-> |
|
|
|
|
|
|
|
|
|
| |||||
SAB | CDB | CRC | CRC |
|
| Pre | Pre | Syn | Syn | LEN | DAB | SAB | CDB | D1 | D2 | …… | Dx | CRC | CRC |
|
|
|
|
|
|
|
| ||
h55 | hD1 | = | ACK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
| h91 | = | NACK |
| <-------------------------------------- weitere Daten zum Sensor ---------------------------------------> |
|
|
|
|
|
|
|
| ||||||||||||||||
| 2400 Baud | 4800 Baud | 9600 Baud | 19200 Baud | 38400 Baud |
T1 (Annahme) | 2 ms | 2 ms | 2 ms | 2 ms | 2 ms |
T2 | 20 ms | 10 ms | 7 ms | 5 ms | 4 ms |
T3 | 33,33 ms | 16.66 ms | 8,33 ms | 4,2 ms | 2,1 ms |
T4 | 30 ms | 18 ms | 12 ms | 9 ms | 8 ms |
T5 (Annahme) | 5 ms | 5 ms | 5 ms | 5 ms | 5 ms |
Alle Daten, die via zSE (zentrales Sende/Empfangspunkt) gesendet werden sollen werden nach dem gleichen Schema übertragen. Der zSE analysiert die Zieladresse. Ist die Meldung an ihn gerichtet so wird diese ausgeführt. Bei allen anderen Adressen wird das ganze Datenpaket 1:1 über den Sender gesendet.
Im Empfangsfall werden die empfangenen Daten direkt an die Zentrale weitergeleitet (Multimasterbetrieb).
|
|
|
|
| h55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||
hAA | hAA | h2D | hD4 |
| Zentrale | Sensor |
| ß--------------------------- Daten ----------------------------à |
|
| <----------------------------------------------------- max. Wartezeit auf Quittung 50 ms -----------------------------------------------------à |
| |||||||||||||||||
Pre | Pre | Sync | Sync | LEN | DAB | SAB | CDB | D1 | D2 | D3 | D4 | D5 | D6 | CRC2 | CRC1 | Umschaltzeit & Auswertezeit S à E |
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
| h0B | ß--------------------------------------------------- für LEN massgebend ------------------------------------------------à |
|
|
|
|
| Sensor | Zentrale |
|
|
|
|
| ||||||||||||
|
|
|
| ß---------------------------------------------- für CRC massgebend ----------------------------------------à |
|
| Pre | Pre | Sync | Sync | LEN | DAB | SAB | CDB | CRC2 | CRC1 |
|
| |||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| hAA | hAA | h2D | hD4 | h05 |
| h55 | hD1 | = | ACK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| h91 | = | NACK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sensor | Dezimal | SAB |
|
| Baud | Temperatursender |
|
|
| 1 Byte bei | Dauer |
|
|
| Baud | Quittung |
|
| |
1 | 5 | h05 |
|
| 1200 | 107 ms |
|
|
| 1200 | 6,66 ms |
|
|
| 1200 | 67 ms |
|
| |
2 | 6 | h06 |
|
| 2400 | 53 ms |
|
|
| 2400 | 3,33 ms |
|
|
| 2400 | 33 ms |
|
| |
3 | 7 | h07 |
|
| 4800 | 27 ms |
|
|
| 4800 | 1,66 ms |
|
|
| 4800 | 17 ms |
|
| |
4 | 8 | h08 |
|
| 9600 | 13 ms |
|
|
| 9600 | 0,83 ms |
|
|
| 9600 | 8 ms |
|
| |
5 | 9 | h09 |
|
| 19200 | 7 ms |
|
|
| 19200 | 0,42 ms |
|
|
| 19200 | 4 ms |
|
| |
6 | 10 | h0A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 | 11 | h0B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 | 12 | h0C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zentrale | 85 | h55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Byte-Nr. | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | --- | 64 | 65 | 66 |
|
|
|
| |||||
Pre | Pre | Sync | Sync | LENs | DABs | SABs | CDBs | D1 | D2 | D3 | D4 | --- | Dz | CRC2s | CRC1s |
|
|
|
| ||
| Sendebytes (max 66) |
|
| ||||||||||||||||||
ß-------------------------------------------------------- AnzahlByte_s ---------------------------------------------------------à |
| ||||||||||||||||||||
|
|
|
|
|
|
|
| Sendedaten; max. 60 Zeichen |
|
|
|
|
|
| |||||||
|
|
|
|
|
|
|
| Stringlaenge_s |
|
|
|
|
|
| |||||||
|
|
|
|
| |||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||
Dim Sendebytes(66) as Byte | Max. mögliche Bytes, nutzbar sind 60 Bytes |
| |||||||||||||||||||
Dim AnzahlByte_s as Byte | Anzahl Sende-Bytes ab Sync bis und mit CRC1 |
| |||||||||||||||||||
Dim LENs as Byte at Sendebytes(1) Overlay | Länge |
| |||||||||||||||||||
Dim DABs as Byte at Sendebytes(2) Overlay | Zieladresse (Adresse des Empfängers) |
| |||||||||||||||||||
Dim SABs as Byte at Sendebytes(3) Overlay | Adresse des Senders (eigene Adresse) |
| |||||||||||||||||||
Dim CDBs as Byte at Sendebytes(4) Overlay | Kommandobyte |
| |||||||||||||||||||
Dim Sendedaten * 62 as String at Sendebytes(5) Overlay | Netto-Sendedaten-String |
| |||||||||||||||||||
Dim Stringlaenge_s as Byte | Aktuelle Sendestringlänge |
| |||||||||||||||||||
Dim CRC_16s as Word | CRC16 Senden |
| |||||||||||||||||||
Byte-Nr. | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | --- | 62 | 63 | 64 | 65 | 66 |
| |||
Pre | Pre | Sync | Sync | LENe | DABe | SABe | CDBe | D1 | D2 | D3 | D4 | --- | Dx | Dy | Dz | CRC2e | CRC1e |
|
| IRQ_Empfangsbytes (max 66) |
| ||||||||||||||||
ß--------------------------------------------------------------- IRQ_AnzahlByte ----------------------------------------------------------------à |
| |||||||||||||||||
|
|
|
| ↓ Wird für die weitere Verarbeitung umkopiert wenn vollständig ↓ |
|
|
| |||||||||||
|
|
|
| Empfangsbytes (max 66/68) |
| |||||||||||||
|
|
|
| ß------------------------------------------------------------------------ AnzahlByte_e --------------------------------------------------------------------à |
| |||||||||||||
|
|
|
|
|
|
|
| Empfangsdaten; max. 60 Zeichen |
|
|
| |||||||
|
|
|
|
|
|
|
| Stringlaenge_e |
|
|
|
Dim IRQ_Empfangsbytes(66) as Byte | Max. mögliche Bytes, nutzbar sind 60 Bytes |
Dim IRQ_AnzahlByte as Byte | Anzahl Empfangs-Bytes ab Sync bis und mit CRC1 |
Dim Empfangsbytes(66) as Byte | Max. mögliche Bytes, nutzbar sind 60 Bytes |
Dim AnzahlByte_e as Byte | Anzahl Empfangs-Bytes ab Sync bis und mit CRC1 |
Dim LENe as Byte at Empfangsbytes(1) Overlay | Längenbyte |
Dim DABe as Byte at Empfangsbytes (2) Overlay | Adresse des Empfängers |
Dim SABe as Byte at Empfangsbytes (3) Overlay | Adresse des Senders |
Dim CDBe as Byte at Empfangsbytes (4) Overlay | Kommandobyte |
Dim Empfangsdaten * 62 as String at Empfangsbytes(5) Overlay |
|
Dim Stringlaenge_e as Byte | Aktuelle Empfangsstringlänge |
Dim CRC_16e as Word | CRC16 Empfang |
Sendefrequenz: 868.300 MHz
Sendeleistung: 3 mW (5 dBm)
Hub: ±45 kHz
Bandbreite: 67 kHz
Baudrate Air: 4800 / 9600 /19200 Baud
|
| Codes für |
|
|
|
h80xx | Configuration Setting | h80E8 |
h82xx | Power Management | Rx: h82D9 Tx: h8238 |
hAxxx | Frequency Setting | hA67C |
hC6xx | Air Data Rate | 4800: hC647 |
H9xxx | Receiver Control | h95D2 |
hC2xx | Data Filter | hC2AD |
hCAxx | FIFO and Reset Mode | stop: hCA81 enable: hCA83 |
hCED4 | Synchron Pattern | hCED4 |
hB0xx | Receiver FIFO Read | hB000 |
hC4xx | AFC | hC483 |
H9xxx | TX Configuration Control | h9820 |
hCCxx | PLL Setting | hCC76 |
hB8xx | Transmitter Register Write | hB800 |
hE/Fxxx | Wake-Up Timer | hE000 |
hC8xx | Low Duty-Cycle | hC800 |
hC0xx | Low | hC000 |
|
|
|
4.8 kbps | 9.6 kbps | 19.2 kbps |
BW=67 kHz δf FSK =45kHz | BW=67 kHz δf FSK =45 kHz | BW=67 kHz δf FSK =45 kHz |