Meshnetics Zigbee
Da in letzter Zeit mehrere Personen im Forum mit den Zigbee Modulen von Meshnetics und dem zugehörigen eZeeNet-Stack arbeiten, soll dieser Artikel eine Hilfestellung für die bei der Entwicklung auftretenden Probleme bieten.
ZigBee Module: Hardware
Die Zigbee-Module von Meshnetics basiert auf dem AT86RF230 Funk-Chipsatz aus Atmels Z-Link Platform, bzw. auf dem AT86RF212 für den 868/915-MHz-Modul.
Bei den bisher erschienenen Modulen wird der Funk-Chipsatz von einem ATmega1281 Mikrocontroller aus Atmels AVR Reihe angesteuert. Die Hardware in Inneren des Moduls ist dabei ähnlich verschaltet wie die des Referenzdesigns von Atmel, so dass sich die von Meshnetics bereitgestellte Software auch auf den Atmel Demo und Entwicklungskits nutzen lässt. Meshnetics bietet in Kooperation mit Atmel den Download des eZeeNet Stacks für den Einsatz auf den Kits an (siehe eZeeNet Software Development Kit (SDK) for Atmel RZ200 ).
Bisher sind drei verschiedene Module verfügbar. Diese unterscheiden sich in der Anbindung der Antenne. Das ZDM-A1281-A2 Modul besitzt eine integrierte On-chip-Antenne. Das ZDM-A1281-B0 Modul verfügt über einen symetrischen HF-Port. Das ZigBit Amp Modul (ZDM-A1281-PN) enthält einen zusätzlichen Verstärker um mehr Sendeleistung und damit höhere Reichweiten zu ermöglichen.
Laut der Aussage eines Mitarbeiter von Meshnetics auf der Messe "Sensor und Test" in Nürnberg 2008 sollen demnächst weitere Module erscheinen die - statt des AVR - einen integriertem ARM-Controller besitzen.
Weitere Details zu den Eigenschaften der Hardware sowie des Chipsatzes und eine Auflistung weiterer Module auch anderere Hersteller finden sich im Artikel ZigBeeModule.
ZDM-A1281-A2 PinOUT vs. embedded ATmega1281 und AT86RF230
Pin | ZDM-A1281-A2 | Pin | ATmega1281 |
---|---|---|---|
1 | SPI_CLK | 11 | PB1 (SCK/PCINT1) |
2 | SPI_MISO | 13 | PB3 (MISO/PCINT3) |
3 | SPI_MOSI | 12 | PB2 (MOSI/PCINT2) |
4 | GPIO0 | 15 | PB5 (OC1A/PCINT5) |
5 | GPIO1 | 16 | PB6 (OC1B/PCINT6) |
6 | GPIO2 | 17 | PB7 (OC0A/OC1C/PCINT7) |
7 | OSC32K_OUT | 18 | PG3 (TOSC2) |
8 | RESET | 20 | RESET |
9 | DGND | 22 | GND |
10 | CPU_CLK | 24 | XTAL1 |
11 | I2C_CLK | 25 | PD0 (SCL/INT0) |
12 | I2C_DATA | 26 | PD1 (SDA/INT1) |
13 | UART_TXD | 27 | PD2 (RXD1/INT2) |
14 | UART_RXD | 28 | PD3 (TXD1/INT3) |
15 | UART_RTS | 29 | PD4 (ICP1) |
16 | UART_CTS | 30 | PD5 (XCK1) |
17 | GPIO6 | 31 | PD6 (T1) |
18 | GPIO7 | 32 | PD7 (T0) |
19 | GPIO3 | 33 | PG0 (WR) |
20 | GPIO4 | 34 | PG1 (RD) |
21 | GPIO5 | 43 | PG2 (ALE) |
22 | DGND | 22 | GND |
23 | DGND | 22 | GND |
24 | D_VCC | 21 | VCC |
25 | D_VCC | 21 | VCC |
26 | JTAG-TMS | 56 | PF5 (ADC5/JTAG-TMS) |
27 | JTAG-TDI | 54 | PF7 (ADC7/JTAG-TDI) |
28 | JTAG-TDO | 55 | PF6 (ADC6/JTAG-TDO) |
29 | JTAG-TCK | 57 | PF4 (ADC4/JTAG-TCK) |
30 | ADC_INPUT_3 | 58 | PF3 (ADC3) |
31 | ADC_INPUT_2 | 59 | PF2 (ADC2) |
32 | ADC_INPUT_1 | 60 | PF1 (ADC1) |
33 | BAT | 61 | PF0 (ADC0) |
34 | A_VREF | 62 | AREF |
35 | AGND | 63 | GND |
36 | GPIO_1WIRE | 1 | PG5 (OC0B) |
37 | UART_DTR | 6 | PE4 (OC3B/INT4) |
38 | USART0_RXD | 2 | PE0 (RXD0/PCINT8/PDI) |
39 | USART0_TXD | 3 | PE1 (TXD0/PD0) |
40 | USART0_EXTCLK | 4 | PE2 (XCK0/AIN0) |
41 | GPIO8 | 5 | PE3 (OC3A/AIN1) |
42 | IRQ7 | 9 | PE7 (ICP3/CLK0/INT7) |
43 | IRQ6 | 8 | PE6 (T3/INT6) |
Desweiteren sind intern noch folgende Pins des AT86RF230 mit Pins des ATmega1281 verbunden:
Pin | AT86RF230 | Pin | ATmega1281 |
---|---|---|---|
7 | TST | n.v. | GND |
8 | RST | 44 | PA7 (AD7) |
11 | SLP_TR | 14 | PB4 (OC2A/PCINT4) |
17 | CLKM | 24 | XTAL1 |
19 | SCLK | 11 | PB1 (SCK/PCINT1) |
20 | MISO | 13 | PB3 (MISO/PCINT3) |
22 | MOSI | 12 | PB2 (MOSI/PCINT2) |
23 | SEL | 10 | PB0 (SS/PCINT0) |
24 | IRQ | 7 | PE5 (OC3C/INT5) |
Wie man sich das Ganze in etwa vorzustellen hat, kann man grob im Datenblatt für das RZRaven-LCD Modul nachschauen (der Schaltplan auf Seite 12 in [1])
Einen Schaltplan des Moduls gibt's bei [2].
Weblinks
[1] AVR2016: RZRAVEN Hardware User's Guide
[2] Schaltplan bei dropbox.com
Software
Bootloader
UART-Bootloader für Linux: http://pervasive.researchstudio.at/portal/projects/meshprog
Beispielaufruf:
./meshprog -t /dev/ttyUSBx -f myfile.srec
eZeeNet ZigBee Software Stack
Bekannte Probleme
fw_dataRequest liefert FAIL zurück
Laut Datenblatt zum Stack (V1.7, Seite 46) liefert fw_dataRequest den Rückgabewert FAIL nur dann, wenn die zu sendende Datenmenge zu groß für den Puffer ist.
Doch auch wenn die Datenmenge kleiner ist als die größe des Buffers, kann es vorkommen, dass man den Rückgabewert FAIL erhält.
Der Grund ist folgender: Daten können nur dann über einen Endpunkt versendet werden, wenn für den betreffenden Endpunkt ein Handler zum Datenempfang registriert wurde. Ist kein Handler registriert, gibt fw_dataRequest ebenfalls FAIL zurück.
Dies steht nicht explizit im Datenblatt, so dass man vermuten könnte, dass Daten auch ohne die Registrierung eines Endpuktes versendet werden können.
Es kann kein Netz aufgebaut werden
siehe: http://www.mikrocontroller.net/topic/84931#803551 Problem sollte hier noch zusammengefasst und erläutert werden
ADC-Ports funktionieren nicht?
Der Handler der ADC-Ergebnisroutinen wird nicht aufgerufen, obwohl die Ports geöffnet und mittels adc_get Samples angefragt wurden.
Code:
include "adc.h"
...
void adc0DataHandler(uint16_t data){
...
}
void adc1DataHandler(uint16_t data){
...
}
void adc2DataHandler(uint16_t data){
...
}
void adc3DataHandler(uint16_t data){
...
}
...
adc_open(ADC_BAT, adc0DataHandler);
adc_open(ADC_INPUT_1, adc1DataHandler);
adc_open(ADC_INPUT_2, adc2DataHandler);
adc_open(ADC_INPUT_3, adc3DataHandler);
...
adc_get(ADC_BAT);
adc_get(ADC_INPUT_1);
adc_get(ADC_INPUT_2);
adc_get(ADC_INPUT_3);
ZigBee PRO Stack
Der ZigBee PRO Stack ist ein komplett neuer Stack, welcher nicht mehr auf der OpenMAC Implementierung basiert. Das noch beim eZeeNet Stack eingesetzte RTOS wurde ebenfalls ersetzt.
SerialNet AT Commands Set
Atmel SerialNet Userguide: http://www.atmel.com/Images/doc8389.pdf
MeshNetics OpenMAC
Contiki OS
Die ZigBit-Module werden nun von Contiki unterstützt. Damit ist es möglich, 6LoWPAN über diese Module zu betreiben. http://www.sics.se/contiki/
µracoli
µracoli unterstützt die ZigBit-Module. Es bietet eine einfache Abstraktion der AT86RFxxx-Hardware auf relativ niedrigem Niveau (ISO-Schicht 1/2) und bietet sich damit als Baukasten an für einfache Aufgaben, die keine komplette Netzwerkschicht benötigen.