Rolladensteuersender
Inhaltsverzeichnis
5.1.2 Synchronization Bytes – SYNC1 und SYNC2. 6
Version | Datum | Bemerkung |
|
V0.1 | 6.9.18 | Initialversion |
|
V0.2 | 27.11.18 | Tastenanordnung ergänzt |
|
V0.3 | 05.12.18 | Quittung geändert |
|
V1.0 | 18.12.18 | Tastenzuweisung korrigiert, Text ergänzt, abgeschlossen |
|
|
|
|
|
|
|
|
|
Das Rolladensteuersender dient zum Steuern der oberen Rolläden. Es ist vollkommen autark und batteriegespiesen. Es steuert die Rolläden via Funkprotokoll. Als Sendemodul wird der Universal-Datensender verwendet.
Durch das Drücken einer Taste wird der Sender per Level-Interrupt aus dem Sleep-Mode aufgeweckt. Nach dem Aufwecken wird ein Code ausgesendet. Dieser wird vom Rollladenempfänger empfangen und quittiert. Erhält der Sender keine Quittung wird das Senden noch 1-mal widerholt. Während dem Senden sind die Interrupts ausgeschaltet. Nach dem Empfang der Quittung werden die Interrupts wieder eingeschaltet und der Prozessor geht in den Sleepmode.
Der DIL-Schalter dient mit den 3 ersten Schaltern zur Unterscheidung wo der Sender eingesetzt wird. Der 4. Schalter steuert einen Debug-Mode. Mit 0 ist er ausgeschaltet, mit 1 werden das Printer Port und die LEDs aktiviert.
Ort |
| DIL-Schalter; Position |
| Funkadresse dezimal | |||
|
| 1 | 2 | 3 | 4 | ||
Elternschlafzimmer |
| 1 | 0 | 0 | 0/1 |
| 17 |
Kinderzimmer Süd |
| 0 | 1 | 0 | 0/1 |
| 18 |
Kinderzimmer Nord |
| 1 | 1 | 0 | 0/1 |
| 19 |
Gang |
| 0 | 0 | 1 | 0/1 |
| 20 |
Für die Tasten ist eine neue Tastaturträger-LP notwendig. Als Verbindung dient eine Steckerleiste. Das Funkmodul kann direkt auf diese Steckerleiste gesteckt werden.
Um ein Aufwachen des Sendemoduls zu ermöglichen ist von jeder Taste je ein Widerstand auf 3.3V gelegt (Low Level Interrupt).
Ort | DIL-Schalter | Taste | zugehöriger Port | gesendete Daten | |
Codebyte Binär | Code hex | ||||
Bad | 100x | T1 / auf | PortD.6 | 00010010 | 12 |
|
| T2 / ab | PortD.7 | 00010011 | 13 |
Schlafzimmer |
| T3 / auf | PortD.4 | 00010000 | 10 |
|
| T4 / ab | PortD.5 | 00010001 | 11 |
Kinderzimmer Süd | 010x | T1 / auf | PortD.6 | 00010100 | 14 |
|
| T2 / ab | PortD.7 | 00010101 | 15 |
Kinderzimmer Nord | 110x | T1 / auf | PortD.6 | 00010110 | 16 |
|
| T2 / ab | PortD.7 | 00010111 | 17 |
Gang (Kinderzimmer Süd) | 001x | T1 / auf | PortD.6 | 00010100 | 14 |
|
| T2 / ab | PortD.7 | 00010101 | 15 |
(Kinderzimmer Nord) |
| T3 / auf | PortD.4 | 00010110 | 16 |
|
| T4 / ab | PortD.5 | 00010111 | 17 |
Tastenanordnung (von vorne gesehen):
Bad & Schlaf-zimmer; | T1 | T3 |
| T1 | Kinderzimmer |
T2 | T4 |
| T2 |
Verwendeter Prozessor ATmega 328P-PU mit dem Sende/Empfangsmodul RFM12B.
Stecker X2 | Prozessor-Pin | Signal | Alternativ-Signal |
1 | 3, 5, 21 | GND |
|
2 | 4, 6 | VCC | 3.3V DC |
3 | 30 | PD0 | TXD |
4 | 31 | PD1 | RXD |
5 | 27 | PC4 | SDA / ADC4 |
6 | 28 | PC5 | SCL / ADC5; |
7 | 1 | PD4 | Taste 2 |
8 | 2 | PD5 | Taste 1 |
9 | 9 | PD6 | Taste 4 |
10 | 10 | PD7 | Taste 3 |
Pin | Signal | Bemerkumg |
1 | MISO |
|
2 | +3V |
|
3 | Clk |
|
4 | MOSI |
|
5 | Reset |
|
6 | Gnd |
|
Die Kommunikation zwischen Netzwerkknoten erfolgt in Form von Datenpaketen. Diese Datenpakete können von unterschiedlicher Länge sein. Die totale Paketlänge wird von der Anzahl Adress- und Datenbytes, der Fehlererkennungsmethode und einiger spezifischer Bytes bestimmt. Ein Byte (LEN) bestimmt die Anzahl folgender Bytes, ein weiteres Byte (Command Definition Byte: CDB) definiert weitere Funktionen.
Jedem Telegramm können eine beliebige Anzahl von Präambel-Bytes (Vorspann) vorangestellt werden, bevor es mit dem eigentlichen Synchronisationsbyte beginnt. Die Präambel-Bytes können beliebig sein, müssen sich aber vom Synchronisationsbyte unterscheiden. Da 2 verschiedene Funkmodule (RFM12B resp. RFM69CW) eingesetzt werden können sind 2 Preamble-Bytes vorgesehen.
Das folgende Beispiel zeigt ein kleines Paket mit CRC16-Fehlerdetektion:
PRE | … | SYNC | SYNC | LEN | DAB | SAB | CDB | DATA1 | CRC2 | CRC1 |
Name | Bezeichnung (original) | Bezeichnung (deutsch) | Byte | Umfang | CRC |
PRE | Preamble Byte | Vorspann |
|
|
|
SYNC | Synchronization Byte | Synchronisation |
|
|
|
SYNC | Synchronization Byte | Synchronisation |
|
|
|
LEN | Length Byte | Länge/Anzahl folgende Bytes | 1 | LEN | T | CRC- Berechnung | ↓ |
DAB | Destination Address Byte | Empfängeradresse | 2 | T | | 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 ohne die Preamblebytes und Synchronisationsbytes. Die Bytes sind mit ihrem LSB rechts positioniert (Bit7…Bit0).
Da das verwendete Funkmodul RFM12B intern bereits Preamblebytes und Synchronisationsbytes bereitstellt wird nur der Rest des Protokolls ab LEN in Software programmiert.
Das Preamble-Byte ist vordefiniert und dient der Taktsynchronisation des Empfängers..
| Bit | |||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Binär | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
Dies entspricht 0hAA in der Hexadezimalen Schreibweise und 170 als Dezimalzahl. Das Byte wird 2 mal gesendet.
Die zwei SYNC-Bytes sind vordefiniert und kennzeichnen den Start eines jeden Datenpakets.
| Bit | |||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Binär | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 |
Dies entspricht 0h2D in der Hexadezimalen Schreibweise und 45 als Dezimalzahl. Das Byte kann im Funkmodul RFM12B umprogrammiert werden.
| Bit | |||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Binär | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
Dies entspricht 0hD4 in der Hexadezimalen Schreibweise und 210 als Dezimalzahl. Das Byte ist im Funkmodul RFM12B vorprogrammiert.
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 NACHFOLGENDE Anzahl Bytes an, MIT den CRC-Bytes.
Beim RFM69CW erfolgt die CRC-Berechnung immer EXTERN.
Die maximale Anzahl beträgt 255 Bytes; wird vom RFM69CW zusätzlich verschlüsselt so sind maximal 60 Byte Daten, Quelladresse + CDB-Byte sowie Zieladresse, Paketlänge und CRC möglich. Die Länge des FIFO´s beträgt total 66 Byte.
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 |
ACK | ACK/NAK Bits |
C/D | Kommando = 0 / Daten = 1 |
R1 | Reservebit, vorläufig 0 |
PN | Fortlaufende Paket-Nummer (1..15 und wieder von vorne) |
ACK | Definition |
|
|
0 0 | Sender fordert kein Acknowledge | C/D = 1; R1 = 0 |
|
0 1 | Sender fordert Acknowledge | ||
1 0 | Empfänger sendet NACK zurück | C/D = 1; R1 = 0; PN = PN der zu quittierenden Sendemeldung resp. 0 | |
1 1 | Empfänger sendet ACK zurück |
PN: Paketnummer, die gesendeten Pakete werden von 1 bis 15 durchnummeriert (0 entfällt). Dann wird wieder mit 1 gestartet. Eine komplett neue Datenpaketfolge beginnt wieder mit 1. Damit können fehlende Pakete festgestellt und eine Wiederholung angefordert werden.
Wird eine Quittung gesendet so wird das Reservebit R1 auf 0, C/D auf 1 und die Paketnummer PN wird bei positiver Quittung auf die empfangene Paketnummer gesetzt, bei negativer Quittung auf 0.
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 ebenfalls log.1.
Quittungen: Positive Quittung (ACK): &B1110xxxx
Negative Quittung (NACK): &B10100000
Die Adressen bestehen aus einem Byte. DIP-Schalter können 16 verschiedene Adressen auf dem Modul eingestellt werden.
Der Umfang der möglichen Einzeladressen beträgt 1….199 (0h01 … 0hC7).
Temperatursensoren , Block 1: 01….15 |
Die Adressen 201 … 254 (0hC9 … 0hFE) sind Gruppenadressen (was immer die Gruppen sein mögen, z.B. alle Temperatursensoren, alle Rolläden etc.).
Als Allrufadresse wird 200 (0hC8) verwendet.
Der CRC wird als 16Bit-CRC realisiert und umfasst die Bytes ab/mit Längenbyte (LEN) bis zum letzten übertragenen Datenbyte ohne die 2 CRC-Bytes.
| |
Im Folgenden noch Bemerkungen für zukünftige Projekte:
- Wenn man auf der gleichen Frequenz verschieden lange Daten überträgt so müssen die Empfangspuffer auf die maximal mögliche (oder maximal vorgesehene) Datenlänge ausgelegt werden. Ist der Puffer zu klein wenn längere Daten empfangen werden so werden damit die dem Puffer nachfolgenden Daten überschrieben. Das Gleiche gilt auch für Datenlängen <3; es müssen immer mindestens 4 Bytes sein.
- Wird Senden mit Quittung verwendet so sollte der Sender bei der Wiederholung die gleiche Paketnummer verwenden. Damit kann der Empfänger erkennen, wenn der Sender die Quittung nicht auswerten konnte und wiederholt. Der Empfänger würde bei fortlaufender Paketnummer direkt wieder schalten(z.B. Relais ein/aus).
- Keine Pullups bei der Interrupt-Leitung vom RFM12. Scheinbar legt der RFM12 diese Leitung an Masse. Ist ein Pullup aktiv werden ca. 90 uA verbraucht. Leerlauf ist ohne diesen Pullup 2.5 uA, hervorgerufen durch den Spannungsteiler für die Spannungsmessung.
Bei der Verwendung der 2 Funkmodule RFM12BS und RMM12BSP traten Kompatibilitätsprobleme auf. Es funktionierte nicht jeder mit jedem.