Hallo Ich habe 2 XBee-Pro 868 und möchte an einem einen Taster anschließen. Der Schaltzustand soll an dem anderen XBee an einem DO ausgegeben werden. Ich ahbe jetzt über XCTU folgende Einstellungen vorgenommen: XBee 1: ID-7FFF CE-End Device D1-4(Digital Out Pin 19) IC-FFFF (DIO Change Detect) IR-14 (Sample Rate) XBee 2: ID-7FFF CE-Coordinator D1-3(Digital Input Pin 19) IR-14 (Sample Rate) Die DH und DL Adressen stimmen auch. UART Kommunikation funktioniert. Aber leider wird der Status vom Taster nicht übertragen. Jemand eine Idee?
Wenn bei Digi noch das gleiche Personal wie früher bei Maxstream im Support sitzt dann kannst Du die auch als Privatperson problemlos andrahten. Z.B. Auch per Email, falls Dir Englisch am Telefon nicht so liegen sollte. http://www.digi.com/support/productdetail?pid=3553 Ansonsten kann ich mich erinnern, dass einige Features erst sehr spät in der Firmware hinzugekommen sind obwohl im Manual bereits beschrieben. Update ist also obligatorisch!
Komme nochmal drauf zurück, lese mal die Firmware History für 1.61... http://ftp1.digi.com/support/firmware/93009379_E.txt
Hallo. Danke für die Antwort. Habe die neuste Firmware drauf. Auch habe ich es mit der normalen Firmware und mit der für AIO/DIO adapters versucht. Das ergebnis war gleich. Mal abwarten was die vom Supportteam sagen. Danke erstmal
Also mit CE=0 bei Beiden gehts auch nicht. Woher weiß der 2. XBee, dass er das Eingangssignal vom XBee von Pin 19 auch an PIN 19 ausgeben soll?
Hallo, man kann ein XBee-Modul so konfigurieren, dass es bei einem PinChange eine Nachricht sendet. Und man kann an einem lokalen oder entfernten XBee-Modul Pins schalten. Beides nacheinander geht natürlich genauso. Aber nicht ohne externe Hilfe. Du musst einen Controller spendieren, der die Nachricht über den PinChange registriert und daraufhin einen Pin schaltet. Michael S.
Also der Support von Digi hilft nur wenn man ein teureres Paket bucht. Habe unteranderem diese Seite gefunden, die beschreibt wie es geht: http://examples.digi.com/sensors/802-15-4-digital-input-with-a-button/5/ oder das hier https://www.youtube.com/watch?v=CLQEo2Ow1Qs Aber leider wird dabei ein anderer XBee verwendet, so dass die Einstellungen bei meinen etwas anders sind. Habt ihr eine Idee wie man den XBee 868 auch so einstellen kann?
:
Bearbeitet durch User
Der Support hilft nur gegen Geld? Was ist das denn? Vielleicht mal bei Digi in Dortmund anrufen (wenn es die da noch gibt). Ansonsten, wenn es nicht funktioniert hier schon mal eine Alternative http://www.radiocrafts.com/uploads/rcxxxx(hp)-tm_data_sheet_1_42.pdf RC1180(HP)-TM
Ich hab das ganze jetzt soweit das ich den Empfänger im API modus betreibe und die Daten des Schalters über UART bekomme. Die Daten die ich empfange sehen dann so aus: 7E 00 12 92 00 13 A2 00 40 A2 94 45 FF FE 01 01 00 02 00 00 02 FA Die vorletzte Stelle bedeutet das der Schalter aus ist. Schalte ich den Schalter an, sthet dort eine 00. Habe jetzt meinen 2. XXBee an einen Atmega8 angeschlossen und über RX/TX verbunden. Wollte jetzt die Daten mit BASCOM auswerten um dann einen PIN zu schalten, komme aber bei dem Vergleich der HEX Daten nicht so richtig voran. Hat dafür jemand ein Beispielprogramm? Alternativ auch in C?
Hallo, Du bist doch schon fast am Ziel. Das IO-Frame des Routers hast Du empfangen und den Pin-Status ausgelesen. Jetzt musst Du nur noch ein lokales AT-Command absetzen, das den auserwählten Pin am lokalen Device schaltet. mfg Michael S.
Und wie mache ich das mit dem lokalen AT Komando setzten? Muss ich das über den Microcontroller machen oder geht das über den XBee? Beim Microcontroller habe ich das Problem das ich die Hexwerte des Strings nicht richtig verglichen bekomme. Und wenn ich eh den Microcontroller benutzen muss, kann ich ja auch gleich einen digitalen Ausgang vom Controller nutzen.
1 | $regfile "m8def.dat" |
2 | $crystal = 3686400 |
3 | $baud = 9600 |
4 | |
5 | Dim S As String * 18 |
6 | |
7 | On URXC OnRxD |
8 | Enable URXC |
9 | Enable Interrupts |
10 | |
11 | Config Portc.5 = Output |
12 | Portc.5 = 0 |
13 | |
14 | Do
|
15 | //Vergleich der Hexwerte
|
16 | |
17 | Loop
|
18 | End
|
19 | |
20 | Onrxd: |
21 | 'S = S + Chr(udr) |
22 | S = Chr(udr) |
23 | Return
|
Kann mir jemand bei dem Vergleich auf den HEX Wert helfen?
Hallo, Silvio Franz schrieb: > Die Daten die ich empfange sehen dann so aus: > 7E 00 12 92 00 13 A2 00 40 A2 94 45 FF FE 01 01 00 02 00 00 02 FA > > Die vorletzte Stelle bedeutet das der Schalter aus ist. Schalte ich den > Schalter an, sthet dort eine 00. Du hast das Prozedere mit Worten bereits beschrieben. Die Bytes des Frames haben eine Bedeutung, die dem Manual zu entnehmen sind (das habe ich jetzt nicht vorliegen - ich versuchs aus der Erinnerung): 7E 00 12 92 00 13 A2 00 40 A2 94 45 FF FE 01 01 00 02 00 00 02 FA aa bb cc dd aa bb = gibt an, welche Pins als digitaler Inputs geschaltet sind cc dd = gibt an, wie der Status der Pins ist Das bedeutet: Pin 2 (welcher auch immer das am Modul ist) ist high. Wenn Dir bekannt ist, welches der Pin ist, der das IO-Sample auslöst, dann reicht es aus, diesen zu testen: if (dd & 02), dann ist Pin2 high, andernfalls low. Silvio Franz schrieb: > Und wenn ich eh den Microcontroller benutzen muss, kann ich ja auch > gleich einen digitalen Ausgang vom Controller nutzen. Das ist natürlich richtig. mfg Michael S.
Ja das ist richtig, dass hatte ich auch so verstanden. mein Problem ist aber den string zu vergleichen. Jetzt wird in den String S jedes Zeichen geschrieben
1 | S = Chr(udr) |
Jetzt habe ich den String mit den Zeichen drin. Jetzt muss z.B. die 21. Stelle auf 02 geprüft werden
1 | if HEX(substr(S,20,1))="02" Then |
Aber die abfrage bekomme ich nicht so richtig hin
Hallo, Du legst die empfangenen Bytes als String ab: Silvio Franz schrieb: > Onrxd: > 'S = S + Chr(udr) > S = Chr(udr) > Return Das ist wenig zielführend. Speichere die Werte in einem Array, denn es handelt sich um Integer-Werte. Dann kannst Du z.B. prüfen, ob im 21. Element das Bit.2 gesetzt ist: if (my_array[20] & 0x02) .... mfg Michael S.
Danke für eure Hilfe. Läuft jetzt soweit alles. Wer wissen will wie man den API-Modus des XBee Pro 868 ausließt, kann folgenden Code nehmen. Zusatzlich ließt er noch aus was über UART gesendet wird.
1 | $regfile "m8def.dat" |
2 | $crystal = 3686400 |
3 | $baud = 9600 |
4 | $hwstack = 32 ' default use 32 for the hardware stack |
5 | $swstack = 10 ' default use 10 for the SW stack |
6 | $framesize = 40 ' default use 40 for the frame space |
7 | |
8 | Dim S As String * 1 'h für hoch, r für runter |
9 | Dim E(50) As Integer |
10 | Dim Pos As Integer |
11 | Dim Zeichen As Integer |
12 | Dim Stimmtio As Bit |
13 | Dim Stimmtzeichen As Bit |
14 | Pos = 1 |
15 | Zeichen = -1 |
16 | |
17 | Do
|
18 | If S = "h" Then |
19 | ...
|
20 | Elseif S = "r" Then |
21 | ...
|
22 | End If |
23 | Loop
|
24 | End
|
25 | |
26 | On Urxc Onrxd |
27 | Enable Urxc |
28 | Enable Interrupts |
29 | |
30 | Onrxd: |
31 | Zeichen = Udr |
32 | If Zeichen = 126 Then 'Wenn Zeichen HEX(E7) - Zeichen für Stringanfang |
33 | Pos = 1 |
34 | Stimmtio = 1 |
35 | Stimmtzeichen = 1 |
36 | End If |
37 | |
38 | If Pos > 50 Then 'Wenn Arrayspeicher voll, dann auf 1 zurücksetzen |
39 | Pos = 1 |
40 | End If |
41 | |
42 | E(pos) = Zeichen |
43 | 'Print Pos ; ":" ; E(pos) ; ":" ; Zeichen |
44 | |
45 | 'Überprufen ob alle Bits richtig sind |
46 | If Pos = 4 Then |
47 | If E(pos) <> 146 Then 'Sendemodus DI = HEX(92) - wenn ein digitaler Eingang am XBee geschaltet wird |
48 | Stimmtio = 0 |
49 | End If |
50 | If E(pos) <> 144 Then 'Sendemodus Zeichen = HEX(90) - wenn ein Zeichen über UART gesendet wird |
51 | Stimmtzeichen = 0 |
52 | End If |
53 | End If |
54 | If Pos = 16 Then ' |
55 | If Stimmtzeichen = 1 Then ' |
56 | If E(pos) = 114 Then |
57 | S = "r" |
58 | Elseif E(pos) = 104 Then |
59 | S = "h" |
60 | End If |
61 | End If |
62 | End If |
63 | If Pos = 17 Then 'Erste Stelle Bitmask = 00 |
64 | If E(pos) <> 0 Then |
65 | Stimmtio = 0 |
66 | End If |
67 | End If |
68 | If Pos = 18 Then 'Zweite Stelle Bitmask = 02 |
69 | If E(pos) <> 2 Then |
70 | Stimmtio = 0 |
71 | End If |
72 | End If |
73 | If Pos = 20 Then 'Erste Stelle Bit == 00 |
74 | If E(pos) <> 0 Then |
75 | Stimmtio = 0 |
76 | End If |
77 | End If |
78 | If Pos = 21 Then 'Zwiete Stelle Bit =00(Schalter ein), =02(Schalter aus) |
79 | If Stimmtio = 1 Then 'Schalter nicht betätigt |
80 | If E(pos) = 2 Then |
81 | S = "h" |
82 | Elseif E(pos) = 0 Then 'Schalter betätigt |
83 | S = "r" |
84 | End If |
85 | End If |
86 | End If |
87 | 'Zurücksetzen |
88 | Pos = Pos + 1 |
89 | |
90 | Return
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.