Forum: Mikrocontroller und Digitale Elektronik Per Arduino - TCM120 EnOcean ansprechen


von He K. (mr_sol)


Lesenswert?

Hallo

Vielleich hat jemand von euch eine Idee oder Hinweis.

Ich habe ein Freeduino per NewSoftUART Pin 2,3 (da Ausgabe per Terminal 
über USB erfolgt und daher Pin 0,1 belegt ist) mit mit einen TCM120 von 
EnOcean.

Die Ausgabe von Telegrammen funktioniert ausgezeichnet. Jetzt würde ich 
gerne den TCM per Befehl (Transmit Command Telegram) ansprechen und die 
Antwort (RMT) an den Terminal ausgeben.

TX_TELEGRAM sollte eigentlich OK zurückgeben.

Was mache ich falsch?
Wie bekomme ich die 127 AdressID zum anlernenvon Aktoren?
1
/**
2
* Auslesen/Aufrufen TCM120
3
*
4
* TCM120 
5
* Tx[Pin8]->Arduino Rx[Pin2]
6
* Rx[Pin7]->Arduino Tx[Pin3]
7
*
8
* @V0.1  2011.07.23: Auslesen Telegram TCM120
9
* @V0.2  2011.07.24: Befehle an TCM120 per Terminal senden    
10
* @copyright  
11
* @license
12
*/
13
14
#include <NewSoftSerial.h>
15
16
//**** VARIABLEN
17
byte bTcmTx=0;
18
int ledPin=13;
19
20
//**** NewSoft Parameter
21
const int rxPin=2, txPin=3 ;
22
NewSoftSerial mySerial(rxPin, txPin);
23
24
//**** EINGABE mit CR
25
#define INLENGTH 20
26
#define INTERMINATOR 13
27
28
29
/** 
30
* Setup konfiguriert Digitalport, Ports, ect
31
*/
32
void setup()  
33
{
34
  //**** Led Test  
35
  pinMode(ledPin,OUTPUT);
36
  digitalWrite(ledPin,HIGH);
37
  delay(150);
38
  digitalWrite(ledPin,LOW);
39
40
  //**** Datenrate Terminal
41
  Serial.begin(9600);
42
  Serial.println("Telegramme TCM120");
43
44
  //**** Datenrate fuer SoftUART Tx/Rx Schnittstelle - absenden Transmit Command Telegram an TCM120
45
  mySerial.begin(9600);
46
  mySerial.print("TX_TELEGRAM");
47
  
48
}
49
50
51
/** 
52
* Schleife 
53
* Liest TCM120 Telegramme ueber SoftUART Tx an Terminal aus
54
*/
55
void loop()                     // run over and over again
56
{
57
58
  //**** Ausgabe Terminal Telegramme
59
  if (mySerial.available()) {
60
      //**** Zeilenvorschub vor A5
61
      bTcmTx=(char)mySerial.read();
62
      if(bTcmTx==165){
63
        Serial.println("");
64
        digitalWrite(ledPin,HIGH);
65
        delay(150);
66
        digitalWrite(ledPin,LOW);  
67
        }
68
      Serial.print(bTcmTx,HEX);
69
  }
70
  
71
  //**** Ausgabe Terminal 
72
  if (Serial.available()) {
73
      mySerial.print((char)Serial.read());
74
  }
75
}

Vielen Dank im voraus

von He K. (mr_sol)


Lesenswert?

Bin in der Zwischenzeit weiter, habe trotzden noch ein Problem

Beim Befehl INF_INIT 
[A5][5A][8B][89][00][00][00][00][00][00][00][00][Chk]

sollten 15 Telegramme kommen

0xA5 0x5A 0x8B 0x89  ""
0xA5 0x5A 0x8B 0x89  "EnOcean"
0xA5 0x5A 0x8B 0x89  "TCM120"
0xA5 0x5A 0x8B 0x89  "Version"
....usw

Ich bekomme zwar Antworten jedoch nur hat das keine Ähnlichkeit mit den 
Beschrieben.
Hat jemand eine Ahnung an was es liegt?

Quellcode
1
#include <NewSoftSerial.h>
2
3
//**** VARIABLEN
4
byte bTcmTx=0;
5
int ledPin=13;
6
int packet[14];
7
int j;
8
9
//**** NewSoft Parameter
10
const int rxPin=2, txPin=3 ;
11
NewSoftSerial mySerial(rxPin, txPin);
12
13
14
/** 
15
* Setup konfiguriert Digitalport, Ports, ect
16
*/
17
void setup()  
18
{
19
  //**** Led Test  
20
  pinMode(ledPin,OUTPUT);
21
  digitalWrite(ledPin,HIGH);
22
  delay(150);
23
  digitalWrite(ledPin,LOW);
24
25
  //**** Datenrate Terminal
26
  Serial.begin(9600);
27
  Serial.println("Telegramme TCM120");
28
29
  //**** Datenrate fuer SoftUART Tx/Rx Schnittstelle - absenden Transmit Command Telegram an TCM120
30
  mySerial.begin(9600);
31
32
  //**** INR_INIT holt Informationen ueber TCM120
33
  send_packet(0x8B,0x89,0,0,0,0,0,0,0,0); 
34
35
}
36
37
38
/** 
39
* Schleife 
40
* Liest TCM120 Telegramme ueber SoftUART Tx an Terminal aus
41
*/
42
void loop()                     // run over and over again
43
{
44
  get_packet();  
45
}
46
47
48
/** 
49
* Holt Telegramm von TCM120
50
*/
51
void get_packet() 
52
{
53
  if (mySerial.available()) {
54
      //**** Zeilenvorschub vor A5
55
      bTcmTx=(char)mySerial.read();
56
      if(bTcmTx==165){
57
        Serial.println("");
58
        }
59
      Serial.print(bTcmTx,HEX);
60
  }
61
  if (Serial.available()) {
62
      mySerial.print((char)Serial.read());
63
  }
64
}
65
66
67
/** 
68
* Sendet Telegramm an TCM120
69
*/
70
void send_packet(int typ,int cmd,int D3,int D2,int D1,int D0,int D_3,int D_2,int D_1,int D_0) 
71
{
72
  mySerial.print(0xA5,BYTE);
73
  mySerial.print(0x5A,BYTE);
74
  mySerial.print(typ,BYTE);
75
  mySerial.print(cmd,BYTE);
76
  mySerial.print(D3,BYTE);
77
  mySerial.print(D2,BYTE);
78
  mySerial.print(D1,BYTE);
79
  mySerial.print(D0,BYTE);
80
  mySerial.print(D_3,BYTE);
81
  mySerial.print(D_2,BYTE);
82
  mySerial.print(D_1,BYTE);
83
  mySerial.print(D_0,BYTE);
84
  mySerial.print(0,BYTE);
85
  mySerial.print(0xff & (typ+cmd+D3+D2+D1+D0+D_3+D_2+D_1+D_0));
86
}

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.