Gespeichert von sebastianheld am
Features:
Basiert auf Controller AVR 4te
- Controller auf Basis des ATMega328P
- kompatibel zu KNX-RF
- verwendet fertiges Funkmodul RFM23B
- Gatewayfunktion Draht<->Funk und zusätzlich entweder App app-8-in oder app-8-out
- Bestückungsvariante für RF-only
- Kollisionserkennung von KNX Telegrammen funktioniert nun zuverlässig
Einschränkungen gegenüber AVR 4te Controller
- SDA/SCL nicht mehr gesondert verfügbar
- RES1/RES2 (reserve I/O) gibts nicht mehr
Beschreibung:
Das Projekt liegt im Redmine-System.
Das freebus-rf interface board basiert auf dem AVR 4TE controllerboard. Letzteres wurde um ein fertig erhältliches Funkmodul erweitert. Das Funkmodul ist das RFM23B (in der 868MHz Version) von hoperf.com. Das ist eine Variante des RFM22B, mit auf 13 dBm begrenzter Sendeleistung, das entspricht 20 mW (milliwatt) . 25 mW ist der gesetzlich zulässige Maximalwert. Das RFM22B kann mit 20 dBm (100 mW) senden, was nicht erlaubt ist. Also liegt man mit dem RFM23B auf der sicheren Seite. Im Folgenden bezeichne ich das RFM22B kurz mit RFM (Radio Frequency Module).
Systemtakt
Das RFM ist mit dem AVR über die SPI Schnittstelle verbunden. Ferner liefert es den Takt für den AVR. Der AVR hat also, wenn das RFM bestückt ist, keinen eigenen Quarz. Das RFM hat einen 30MHz Quarzoszillator. Über einen einstellbaren internen Teiler liefert das RFM einen 10MHz Takt für den AVR, der dort über den XTAL1 pin eingespeist wird. Die AVR fuses werden auf "externer Takt" eingestellt. In dieser Betriebsart steht der XTAL2 pin als Port pin zur Verfügung. Er ist mit dem Eingang SDN (shutdown) des RFM verbunden. Der AVR kann damit den RFM quasi abschalten. Dies feature wird nicht benutzt, weil damit auch der Takt für den AVR abgeschaltet würde.
ohne Funk geht auch
Man kann auf derselben Platine auch einen ganz normalen freebus controller aufbauen. Dann lässt man das RFM und R1 weg und bestückt den Quarz (Q2, C10, C11). In diesem Fall wird der AVR mit 8MHz getaktet. Die verschiedenen Taktfrequenzen (mit RFM / ohne RFM) sind in der firmware berücksichtigt.
nur Funk
Schliesslich kann man auch eine rf-only Version bestücken. Dazu lässt man die Teile für die EIB Schnittstelle weg. Und man muss sich überlegen, wie man die Stromversorgung macht. Man kann z.B. den Spannungswandler drin lassen, D2 bestücken, L2 durch einen 12 Ohm Widerstand ersetzen, und EIB+/EIB- an eine Gleichspannung von 12...32 Volt anschliessen. Man kann auch direkt mit 3,3Volt an VCC gehen. Batteriebetrieb ist mit diesem board allerdings nicht richtig möglich, weil noch nicht klar ist, wie man den AVR nach einem shutdown des RFM wieder startet. Ausserdem geht Batteriebetrieb sowieso nur für Busteilnehmer, die nur senden können.
der Controller
Der AVR ist ein ATMEGA 328p. Für normale Applikationen würde auch der ATMEGA 168p reichen. Ein Betrieb mit bootloader ist jedoch nur mit dem ATMEGA 328p möglich. Die *.hex files im downloadbereich sind generell für den ATMEGA 328p compiliert.
Stückliste
Die 3 rechten Spalten geben die Bestückungsvarianten an.
TP-RF Interface, Draht- und Funk
TP freebus ohne Funk
RF nur Funk
X Bauteil(e) bestücken
*?* bei Bedarf ("nur Funk" mit Spannungswandler, in diesem Fall kann L2 durch einen 12 Ohm Widerstand ersetzt werden)
Ein Reichelt Warenkorb für TP-RF: Reichelt-Warenkorb.
Kennung | Bezeichnung | Wert | Reichelt Best. Nr. | TP-RF | TP | RF |
---|---|---|---|---|---|---|
C1, C2, C3 | SMD Kondensator 1206 | 100n | X7R-G1206 100n | X | X | X |
C4, C6 | Keramikkondenstaor RM5 | 100n | X7R-5 100n | X | X | |
C5 | Keramikkondenstaor RM5 | 100n | X7R-5 100n | X | X | X |
C7 | Elko radial | 100µ/16V | RAD 100/16 | X | X | X |
C8 | Elko radial | 100µ/63V | RAD 100/63 | X | X | ? |
C9 | Keramikkondensator RM2,5 | 470p | NPO-2,5 470P | X | X | ? |
C10, C11 | Keramikkondensator RM2,5 | 33p | KERKO 33P | X | ||
C12 | Keramikkondensator | 47p | KERKO 47P | X | X | |
D1 | Si-Diode | 1N4148 | 1N 4148 | X | X | |
D2 | Si-Diode | 1N4148 | 1N 4148 | X | X | ? |
D3 | Zenerdiode 0,5W | BZX79C8V2 | ZF 8,2 | X | X | |
D4 | Schottky Diode | BAT46 | BAT 46 | X | X | |
D6 | Schottky Diode | BAT46 | BAT 46 | X | X | ? |
D7 | Überspannungsschutz-Diode | SMAJ40A | X | X | ? | |
IC1 | Microcontroller | ATMEGA328P-20P | ATMEGA 328P-PU | X | X | X |
IC2 | Funkmodul | RFM23B-868-S1 | X | X | ||
IC3 | Spannungswandler | MC34063AP | MC 34063 A | X | X | ? |
JP1 | Stiftleiste RM2,5 gerade | 1X10 | SL 1X40G 2,54 | X | X | X |
JP3 | Stiftleiste RM2,5 gerade | 2X3 | SL 2X40G 2,54 | X | X | X |
L1 | Festinduktivität | 220µH | SMCC 220µ | X | X | ? |
L2 | Festinduktivität | 150mH | L-11P 150M | X | X | ? |
LED1 | LED 3mm rot | LED 3MM 2MA RT | X | X | X | |
Q1 | Transistor PNP | BC557B | BC 557B | X | X | |
Q2 | Quarz HV49U | 8 MHz | 8,000-HC49U-S | X | ||
Q3 | Transistor PNP | BC640 | BC 640 | X | X | |
Q4 | FET | BS170 | BS 170 | X | X | |
R1 | Widerstand 1/4W | 10k | 1/4W 10K | X | X | |
R2, R3 | Widerstand 1/4W | 10k | 1/4W 10K | X | X | X |
R4, R7 | Widerstand 1/4W | 10k | 1/4W 10K | X | X | |
R5 | Widerstand 1/4W | 120k | 1/4W 120K | X | X | |
R6, R16 | Widerstand 1/4W | 100k | 1/4W 100K | X | X | |
R8 | Widerstand 1/4W | 2R2 | 1/4W 2,2 | X | X | ? |
R9 | Widerstand 1/4W 1% | 3K6 | METALL 3,60K | X | X | ? |
R10 | Widerstand 1/4W | 12K | 1/4W 12K | X | X | |
R11 | Widerstand 1/4W | 5K6 | 1/4W 5,6K | X | X | |
R12 | Widerstand 1/4W | 100R | 1/4W 100 | X | X | |
R13 | Widerstand 1/4W | 12R | 1/4W 12 | X | X | |
R14 | Widerstand 1/4W 1% | 2K2 | METALL 2,20K | X | X | ? |
R15 | Widerstand 1/4W | 1K | 1/4W 1K | X | X | X |
R17 | Widerstand 1/4W | 220K | 1/4W 220K | X | X | |
S1 | Kurzhubtaster | 6x6x4,3 | TASTER 3301 | X | X | X |
SV1 | Wannenstecker | ML20 | WSL 20G | X | X | X |
X2 | SMB Print Einbaubuchse | SMB EB2-L174 | X | X |
D7, IC2 gibt es nicht bei Reichelt.
IC2 z.B. bei www.octamex.de
Wahlweise können 1N4148 durch BAT46 ersetzt werden (dann hat man nur 1 Sorte Dioden).
Applikationen
Auf jeder der 3 Varianten kann eine Applikation laufen. Normalerweise funktioniert derselbe Quelltext mit allen 3 Varianten, es muss jeweils nur die richtige lib eingebunden werden. Ja, sogar auf dem interface, also der Schnittstelle zwischen Draht und Funk (man kann auch "gateway" oder "access point" dazu sagen), kann zusätzlich z.B. noch ein out8 oder in8 laufen.
Antennenanschluss
über SMB Buchse. Die Buchse ist vollständig im 4TE Gehäuse, zugänlich über ein zu bohrendes Loch in der mittleren "Stufe" des Gehäuses.
Der SMB Stecker verdeckt evtl. 1 oder 2 Schraubklemmen-Löcher, beim Anschliessen der Schraubklemmen muss er gezogen werden.
U = SMB Buchse ! = SMB Stecker o = Schraubklemmenloch wie üblich __ | o | ! -- - U | | --------- | | | |
Antenne
Als Antenne kommt z.B. Aurel GP868 in Frage (Conrad 190123), ca. 30€, man kann sich sowas aus ein paar Drähten auch selbst bauen.
Oder man baut sich einen Koaxdipol aus einem Stück RG213 Kabel (s.u.). Für das Interface sollte man schon eine solche gute Antenne verwenden, für die übrigen RF Geräte reicht dann ein ca 8cm langer Draht. Als endgültige Lösung stelle ich mir eine gedruckte Antenne vor. Aber selbst Hager z.B. verwendet ein Stück Draht.
Meine Antenne
Sie ist einfach zu bauen. Man nehme ein 162mm langes Stück RG213 Kabel. Entferne an beiden Enden 25mm von der äußeren Isolierung. Die Abschirmung muss entflochten und auseinandergefaltet werden, damit man auch den Innenleiter abisolieren kann. Der Innenleiter muss 24mm abisoliert werden. Nun wird beidseitig der Schirm mit dem Innenleiter verlötet. Schirmgeflecht entsprechend kürzen.
In der Mitte entfernt man ca 10mm von der Isolierung, und trennt die Abschirmung auf, so dass eine Lücke von ca. 5mm entsteht. Auf einer Seite wird jetzt die Abschirmung der Zuleitung angelötet, auf der anderen Seite der Innenleiter. Als Zuleitung nimmt man am besten RG174-U, weil das zu den SMA / SMB Steckern passt.
Belegung der ATMEGA328P pins
PIN FUNKTION --- -------- PB0/ICP1/CLKO ICP1 EIB_IN (input capture) PB1/OC1A OC1A CTRL (PWM direkt mit timer1 machbar?) PB2/OC1B/SS SS RFM22.NSEL PB3/OC2A/MOSI MOSI RFM22.SDI PB4/MISO MISO RFM22.SDO PB5/SCK SCK RFM22.SCK PB6/XTAL1 XTAL1 clock in von RFM22, Quarz wenn ohne RFM22 PB7/XTAL2 XTAL2 RFM22.SDN bzw. Quarz wenn ohne RFM22 PC0/ADC0 IO1 PC1/ADC1 IO2 PC2/ADC2 IO3 PC3/ADC3 IO4 PC4/ADC4/SDA IO5/SDA entweder 8 I/O lines oder 6 I/O + I2C PC5/ADC5/SCL IO6/SCL PD0/RXD RXD RXD/RES3 PD1/TXD TXD TXD/RES4 PD2/INT0 INT0 frei PD3/INT1 INT1 RFM22.NIRQ PD4/XCK/T0 PD4 PROG PD5/T1/OC0B OC0B EIB_OUT PD6/AIN0/OC0A PD6 IO7 PD7/AIN1 PD7 IO8
Benutzung der AVR Hardware-Resourcen
- Timer0
timing für freebus (Draht)
Output Compare register und pins für EIB_OUT
- Timer1
Timer und PWM für die App.
Evtl zusätzlich Input Capture von EIB_IN.
(flanke an EIB_IN speichert wert des timer1. Daraus kann man den genauen Zeitpunkt der Flanke rekonstruieren, trotz interrupt latency)
- Timer2
timing für RF.
- INT0
frei
- INT1
Interrupts vom RFM22
- SPI Schnittstelle (MOSI, MISO, SCK, SS)
bedient den RFM22