Forum: Mikrocontroller und Digitale Elektronik Arduino Uno Code to Mega


von Steffen (Gast)


Lesenswert?

Hallo zusammen,

folgende Ausgangssituation:

Ich habe ein C# Programm geschrieben, dass über den Serialport und ein 
XBee-Explorer-Board einen Befehl an ein Arduino Uno+XBee-Shield sendet. 
Dieses sendet dann dementsprechend die Werte der 6 ADCs. Das 
funktioniert auch reibungslos.

Nun habe ich den Code des Unos genoimmen und 1 zu 1 auf den MEGA 
überspielt. Das XBEE-Shield inkl. Sensoren habe ich 1 zu 1 am MEGA 
angeschlossen. Die Pin-Belegung ist auch die selbe. Funktionieren tut es 
allerdings nicht. Die LED, die den Empfang von Daten signalisiert 
leuchtet auf, aber die Sende-LED nicht. Warum?!?! Die Logik ist die 
selbe und die Pins, die der Mega für das XBee-Shield verwendet sind die 
gleichen wie beim Uno (SoftwareSerial Pin 2 & 3).

Habt ihr Tipps?

Hier der Programmcode des Uno:
1
#include <SoftwareSerial.h>
2
3
#define MWB 10
4
5
#define DataRequest 0x51
6
7
SoftwareSerial XBee(2, 3);
8
9
void setup() {
10
  XBee.begin(9600);
11
}
12
13
14
void loop() {  
15
  uint8_t DataRequested=0;
16
  uint8_t IncomingData=0;
17
  int Lux1,Lux2,Lux3,IR1,IR2,IR3;
18
19
20
   if (XBee.available() > 0) {
21
    IncomingData = XBee.read();
22
    if(IncomingData==DataRequest){
23
      DataRequested=1;  
24
    }
25
   IncomingData=0;
26
   }
27
28
  if(DataRequested==1){ 
29
    Lux1 = analogReadMWB(A0,MWB);
30
    IR1 = analogReadMWB(A3,MWB);
31
    Lux2 = analogReadMWB(A1,MWB);
32
    IR2 = analogReadMWB(A4,MWB);
33
    Lux3 = analogReadMWB(A2,MWB);
34
    IR3 = analogReadMWB(A5,MWB);
35
36
    XBee.print("UNO");
37
    XBee.print(":");
38
    XBee.print(Lux1);
39
    XBee.print(":");
40
    XBee.print(Lux2);
41
    XBee.print(":");
42
    XBee.print(Lux3);
43
    XBee.print(":");
44
    XBee.print(IR1);
45
    XBee.print(":");
46
    XBee.print(IR2);
47
    XBee.print(":");
48
    XBee.println(IR3);
49
  
50
    DataRequested=0;
51
  }
52
}
53
54
55
int analogReadMWB(uint8_t Channel, int Cycles){
56
  int Buffer=0;
57
  for(int i=0;i<Cycles;i++){Buffer+=analogRead(Channel);}    
58
  return Buffer/Cycles;  
59
  }


..und der Code des Megas:

1
#include <SoftwareSerial.h>
2
3
#define MWB 10
4
5
#define DataRequest 0x51
6
7
SoftwareSerial XBee(2,3);
8
9
void setup() {
10
  XBee.begin(9600);
11
}
12
13
14
void loop() {    
15
  uint8_t DataRequested=0;
16
  uint8_t IncomingData=0;
17
  int Lux4,IR4;
18
19
20
   if (XBee.available() > 0) {
21
    IncomingData = XBee.read();
22
    if(IncomingData==DataRequest){
23
      DataRequested=1;  
24
    }
25
   IncomingData=0;
26
   }
27
28
  if(DataRequested==1){ 
29
    Lux4 = analogReadMWB(A0,MWB);
30
    IR4 = analogReadMWB(A1,MWB);
31
32
    XBee.print("MEGA");
33
    XBee.print(":");
34
    XBee.print(Lux4);
35
    XBee.print(":");
36
    XBee.println(IR4);
37
  
38
    DataRequested=0;
39
  }
40
  
41
}
42
43
44
int analogReadMWB(uint8_t Channel, int Cycles){
45
  int Buffer=0;
46
  for(int i=0;i<Cycles;i++){Buffer+=analogRead(Channel);}    
47
  return Buffer/Cycles;  
48
  }



Ich habe ebenfalls getestet, ob das XBee-Shield des Unos oder des Mega 
falsch eingestellt ist, aber das ist kein problem. Den Code des Megas 
kann ich auf den Uno packen und es funktioniert. Ebenfalls kann ich die 
XBee-Shields beliebig tauschen und es funktioniert weiterhin auf dem 
Uno. Also warum funktioniert es nicht auf dem Mega?

Vll noch die XBee-Infos, auch wenn ich mir da sicher bin:

USB-Exploer am PC (eingestellt als Broadcast)
MY: BABA
SH: 13A200
SL: 40E823C4
DH: 0
DL: FFFF

XBee Device 1 am Uno:
MY: BABA
SH: 13A200
SL: 40E82352
DH: 3A200
DL: 40E823C4

XBee Device 2 am Mega:
MY: BABA
SH: 13A200
SL: 40E82337
DH: 3A200
DL: 40E823C4



Lieben gruß,

Steffen

von Steffen (Gast)


Lesenswert?

Nachtrag:

Habe auf dem Mega folgendes getestet:

Jegliche XBee Funktionen in Serial-Funktionen gewandelt (Im Grund 
überall wo "XBee" stand durch "Serial" ersetzt.

Nun kommen die Daten im C# Programm auch einwandfrei an. Ich kann COM9 
auswählen (XBee-USB-Explorer) und kann Daten vom Uno empfangen und am 
COM10 wie sonst üblich per Kabel die Daten vom Mega.

Ich sehe da nur eine Stelle, die Probleme macht:
Die XBee-Ansteueruzng via SoftwareSerial am Mega. Ist da etwas zu 
beachten?

Gruß,

Steffen

von Steffen (Gast)


Lesenswert?

Fünfig geworden.


"Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69"

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.