Forum: Mikrocontroller und Digitale Elektronik Meshnetics Zigbee ZDM-A1281 zwei UARTs gleichzeitig öffnen mit eZeeNet Stack?


von Holger M. (nezaya)


Lesenswert?

Hallo,

vielleicht kann mir jemand helfen.

Ich nutze ein ZDM-A1281 Zigbee Modul von Meshnetics zusammen mit dem 
eZeeNet-Stack [1]. Der darauf verbaute Controller (ATMega1281) besitzt 
zwei UART, welche vom Stack auch unterstützt werden.

Wenn ich nur UART_0 mittels uart_open öffne funktioniert alles, ebenso 
wenn ich nur UART_1 öffne.
Ist jedoch bereits ein UART offen, bekomme ich beim Öffnen des anderen 
UART von uart_open den Rückgabewert -1. Dieser Rückgabewert bedeutet 
laut Datenblatt

1. incorrect UART channel oder
2. unsupported flags oder
3. insufficient resources.

Die ersten beiden Fehler können es nicht sein, da die UARTS einzeln mit 
den selben Parametern funktionieren. Bleibt also nur noch "insufficient 
resources" als Grund.

Hier mal der Code zum öffnen der UARTs.
1
int uart0;
2
int uart1;
3
4
UARTMode_t param;
5
param.baudrate = UART_BAUDRATE_9600;
6
param.data = UART_DATA8;
7
param.parity = UART_PARITY_NONE;
8
param.stopbits = UART_STOPBIT_1;
9
10
uart0=uart_open(UART_CHANNEL_0, &param, UART_FLOW_CONTROL_NONE,UART0RXByte,tx0Done);
11
uart1=uart_open(UART_CHANNEL_1, &param, UART_FLOW_CONTROL_NONE,UART1RXByte,tx1Done);

Meine Frage ist jetzt, was muss ich tun damit ich genügend Resourcen 
habe um zwei UARTs gleichzeitig zu öffnen. Mein Programm enthält bisher 
eigentlich sonst keinen weiteren Code. Es kann also nicht daran liegen, 
dass ich selbst zuviel Resourcen brauche. Gibt es eine Möglichkeit in 
Stack mehr Resourcen für den UART zu reservieren, oder geht das öffnen 
von zwei UARTS gleichzeitig generell nicht (und warum steht es dann 
nicht gleich im Datenblatt)?

Gruß Holger

[1] Datenblatt zum Stack: http://www.meshnetics.com/dl.php?id=17

von Andreas P. (andyp17)


Lesenswert?

Hallo,

Ich glaube, du musst für beide ein eigenes Parameterset erstellen (zb. 
param1 und param2) und die ganzen Einstellungen für beide UARTs machen.

mfg
Andy

von Holger M. (nezaya)


Lesenswert?

Hallo Andreas Posch,

ich hab das mal so geändert, wie du es vorgeschlagen hast, das hat aber 
keine Besserung gebracht.

Ich hoffe irgendwo am Stack was einstellen zu können, habe aber bisher 
nix gefunden.

Gruß Holger

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Frag doch mal deren Support.

von Andreas P. (andyp17)


Lesenswert?

Komisch. Normalerweise müsste es so klappen. Ich benutze nämlich die 
PWM-Kanäle und da muss man auch jeden Kanal separat initialisieren. Ich 
dachte, das wäre auch bei den UARTs so...

von Juergen M. (bug)


Lesenswert?

Hallo Holger,

was ist denn UART0RXByte, tx0Done, UART1RXByte, tx1Done?
Läufts denn wenn du an den Stellen jeweils NULL einträgst?

Grüße, Jürgen.

von Holger M. (nezaya)


Lesenswert?

Hallo

erstmal Danke für eure bisherigen Vorschläge.

>was ist denn UART0RXByte, tx0Done, UART1RXByte, tx1Done?
>Läufts denn wenn du an den Stellen jeweils NULL einträgst?

Nein, hatte ich inzwischen auch schon versucht. Daran liegt es aber 
nicht.

Inzwischen habe ich wohl gefunden, was ich suche. Es gibt im HAL 
(Hardware Aabstraction Layer) der zum Stack gehört in der Source 
(uart.h) ein
1
#ifndef NUM_USART_CHANNELS
2
#define NUM_USART_CHANNELS 1 // Number USART channels
3
#endif

Man muss wohl vorher einfach nur definieren, wieviele Kanäle man 
gleichzeitig öffen will. Dann wird vom HAL entsprechend Speicher 
reserviert. Dazu hatte ich leider keine Doku.

Denke das sollte die Lösung sein. Evt. muss man noch den HAL neu 
übersetzen. Ich werde es gleich mal ausprobieren und Wenn es klappt hier 
berichten. Vielleicht hilft es dann ja noch jemandem.

Gruß Holger

von Holger M. (nezaya)


Lesenswert?

Oben beschriebene Lösung hat funktioniert!

von Alexander J. (alexanderj)


Lesenswert?

meshnetics support, nur mit dev kit. ansonsten vieeeeeeeeeele mail hin 
und her und vielleicht eine antwort.
p.s. bei atmel zigbee modulen gibts den support kostenlos

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.