Meshnetics Zigbee

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

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

Zigbee Modul ZDM-A1281-A2 mit On-chip-Antenne. Die metallische Abschirmung über dem Controllerteil wurde entfernt
Zigbee Modul ZDM-A1281-PN. Die metallische Abschirmung über dem Controllerteil wurde auch hier entfernt


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.