Arduino Mega Embed 2560 Board Serial

Hallo ich habe ein Problem mit folgendem Board mit der Seriellen Schnittstelle TX/RX 0

Lesen/Schreiben auf einem dem orginalen MEGA 2560 Steckboard funktioniert.

Auf der Embed Version kann ich zwar Schreiben aber nicht einlesen.
Habe Testhalber 2 Stück schon ausprobiert, ob es an einer Lötstelle liegt...

TX/RX Leitung ist richtig angeschlossen und GND müsste auch passen.

Hat jemand eine Idee?

Sketch falsch oder falsch/fehlerhaft angeschlossen.
Z.B. Reicht wie am Bild es nicht aus die Header reinzustecken. Die müssen schon gelötet werden.

Mach echte Bilder aus der wir eindeutig alle Verbindungen sehen können, poste sie mit zwei Testsketchen, dann kann man dir vieleicht helfen.



// GENERAL INPUTS
int ESTOPIN= 4;       // EINGANG ESTOP IN FÜR MELDUNG
int KEYSWITCH= 5;      // EINGANG KEYSWITCH IN FÜR MELDUNG
int RESETEXT= 6;    // EINGANG RESET TASTE INTERN

// GENERAL OUTPUTS

int OUT1= 32;        // AUSGANG RELAIS 1 SEKTION 1-4
int OUT2= 33;        // AUSGANG RELAIS 2 SEKTION 5-8
int OUT3= 34;        // AUSGANG RELAIS 3 SEKTION 9-12
int OUT4= 35;        // AUSGANG RELAIS 4 SEKTION 12-16
int OUT5= 36;        // AUSGANG RELAIS 5 SEKTION 17-20
int OUT6= 37;        // AUSGANG RELAIS 6 SEKTION 21-24
int OUT7= 38;        // AUSGANG RELAIS INTERLOCK 1 BRÜCKEN 
int OUT8= 39;        // AUSGANG RELAIS INTERLOCK 2 BRÜCKEN

int ANZEIGE="";




void setup() {
  // STARTE COMMUNICATION
  Serial.begin(9600);
  Serial.println("SERIAL 1 BEGINN");

  // DEFINIERTE E/As
  pinMode(ESTOPIN, INPUT_PULLUP); 
  pinMode(KEYSWITCH, INPUT_PULLUP); 
  pinMode(RESETEXT, INPUT_PULLUP); 
  pinMode(OUT1, OUTPUT); 
  pinMode(OUT2, OUTPUT); 
  pinMode(OUT3, OUTPUT); 
  pinMode(OUT4, OUTPUT); 
  pinMode(OUT5, OUTPUT); 
  pinMode(OUT6, OUTPUT); 
  pinMode(OUT7, OUTPUT); 
  pinMode(OUT8, OUTPUT); 
} 


//#####################################################################################################
//AUFRUF PROGRAMM
//#####################################################################################################

void loop() {

    delay(500);
	// Falls es was zu lesen gibt, lesen wir es. Wenn nicht, dann eben nicht
	if(Serial.available())
	{                                   					//++++++++++++++++++++++++++++++++++++++++++
		String data_from_display="";                        // LADE SCHNITSTELLE UND SCHREIBE STRING
														    //++++++++++++++++++++++++++++++++++++++++++
		while(Serial.available())
		{                                
			data_from_display += char(Serial.read());
		}
		Serial.println(data_from_display);
		sendData(data_from_display);
	}
    // Egal, ob etwas über die Serielle gelesen wurde.
	// Wir lesen jetzt die EINGÄNGE 
	
	ESTOPIN =     digitalRead(4);                             	//+++++++++++++++++++++++++++++++++++++++++++
	KEYSWITCH =   digitalRead(5);                             	// EINLESEN VON EINGÄNGEN
	RESETEXT=     digitalRead(6);                               //+++++++++++++++++++++++++++++++++++++++++++
 

Wohin geht das gelbe Kabel? Bild ist nicht eindeutig
Wohin geht das blaue Kabel? Bild ist nicht eindeutig

Der Sketch ist unvollständig, fehlt mehr als die schließende Klammer?
Mir ist nicht klar warum du das von Serial gelesene Zeichen auch wieder auf der gleichen Serial ausgeben willst.

Hallo laserdivision

Poste mal ein Blockschaltbild von Deinem Projekt.

ist doch garaniert mit USB verbunden

Serial ist Serial0 nicht 1

Ja ist mit USB Verbunden. Serial 0. komisch ist das es auf dem orginalen Board einwandfrei funktioniert.

Wahrscheinlich ein anderer USB Treiber. Aber so oder so unsauber 2 elektrische Signale auf eine Pin zu geben.

Wie meinst 2 elektrische Signale auf 1 Pin?

Ein mal vom USB Treiber und ein mal über die Pinleiste

Okay kann das echt ein Problem sein? Warum funktioniert es dann an dem anderen Arduino einwandfrei? obwohl es gleich angeschlossen ist?

Liegt das am Board selber?

Lötstellen usw müssten passen das 2 von den Boards nicht laufen ist doch komisch?

Vielleicht geht das wegen diesen beiden Widerständen:
image
Aber wie gesagt: In jeder Firma würde durchs Codereview fallen wenn du so was machst. Es mag zwar gehen, ist aber einfach nur Müll.

Hier mal der komplette Code. Ich bin kein Programmierer. Bin da neu in der Sache

// +++++++++++++  INPUTS FROM DISPLAY TO MEGA ++++++++++++
// SERIELLE BUTTON/TEXT KOMMUNIKATION INFO
// Interlock EXT1 = "BT98ON" "BT98OFF"
// Interlock EXT2 = "BT99ON" "BT99OFF"
// Interlock RESET = "ERESET"
// Interlock 1-4 Select = "IL14ON" "IL14OFF"
// Interlock 5-8 Select = "IL58ON" "IL58OFF"
// Interlock 9-12 Select = "IL912ON" "IL912OFF"
// Interlock 12-16 Select = "IL1216ON" "IL1216OFF"
// Interlock 17-20 Select = "IL1720ON" "IL1720OFF"
// Interlock 21-24 Select = "IL2124ON" "IL2124OFF"
// Interlock ALL ON/OFF "ALLON" "ALLOFF"
// SYSTEM RESTART = "SReset"
// LED SYSTEMTEST = "TLEDON" "TLEDOFF"

// +++++++++++++  OUTPUT FROM ARDUINO TO MEGA ++++++++++++
// PAGE 2 t1.txt HAUPTSTATUS ANZEIGE
// PAGE 2 t4.txt KEYSWITCH ON/OFF

//#####################################################################################################
//SETUP CONTROLLER
//#####################################################################################################
// GENERAL INPUTS
int ESTOPIN= 4;       // EINGANG ESTOP IN FÜR MELDUNG
int KEYSWITCH= 5;      // EINGANG KEYSWITCH IN FÜR MELDUNG
int RESETEXT= 6;    // EINGANG RESET TASTE INTERN

// GENERAL OUTPUTS

int OUT1= 32;        // AUSGANG RELAIS 1 SEKTION 1-4
int OUT2= 33;        // AUSGANG RELAIS 2 SEKTION 5-8
int OUT3= 34;        // AUSGANG RELAIS 3 SEKTION 9-12
int OUT4= 35;        // AUSGANG RELAIS 4 SEKTION 12-16
int OUT5= 36;        // AUSGANG RELAIS 5 SEKTION 17-20
int OUT6= 37;        // AUSGANG RELAIS 6 SEKTION 21-24
int OUT7= 38;        // AUSGANG RELAIS INTERLOCK 1 BRÜCKEN 
int OUT8= 39;        // AUSGANG RELAIS INTERLOCK 2 BRÜCKEN

int ANZEIGE="";




void setup() {
  // STARTE COMMUNICATION
  Serial.begin(9600);
  Serial.println("SERIAL 1 BEGINN");

  // DEFINIERTE E/As
  pinMode(ESTOPIN, INPUT_PULLUP); 
  pinMode(KEYSWITCH, INPUT_PULLUP); 
  pinMode(RESETEXT, INPUT_PULLUP); 
  pinMode(OUT1, OUTPUT); 
  pinMode(OUT2, OUTPUT); 
  pinMode(OUT3, OUTPUT); 
  pinMode(OUT4, OUTPUT); 
  pinMode(OUT5, OUTPUT); 
  pinMode(OUT6, OUTPUT); 
  pinMode(OUT7, OUTPUT); 
  pinMode(OUT8, OUTPUT); 
} 


//#####################################################################################################
//AUFRUF PROGRAMM
//#####################################################################################################

void loop() {

    delay(500);
	// Falls es was zu lesen gibt, lesen wir es. Wenn nicht, dann eben nicht
	if(Serial.available())
	{                                   					//++++++++++++++++++++++++++++++++++++++++++
		String data_from_display="";                        // LADE SCHNITSTELLE UND SCHREIBE STRING
														    //++++++++++++++++++++++++++++++++++++++++++
		while(Serial.available())
		{                                
			data_from_display += char(Serial.read());
		}
		Serial.println(data_from_display);
		sendData(data_from_display);
	}
    // Egal, ob etwas über die Serielle gelesen wurde.
	// Wir lesen jetzt die EINGÄNGE 
	
	ESTOPIN =     digitalRead(4);                             	//+++++++++++++++++++++++++++++++++++++++++++
	KEYSWITCH =   digitalRead(5);                             	// EINLESEN VON EINGÄNGEN
	RESETEXT=     digitalRead(6);                               //+++++++++++++++++++++++++++++++++++++++++++
 
	delay(30);															                    //+++++++++++++++++++++++++++++++++++++++++++
  if(KEYSWITCH == HIGH){
    Serial.print("t4.pco=0");                               
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);                                	      // FUNKTION MELDUNG KEYSWITCH OFF/ON                         
    Serial.print("t4.pco=63488");                             //+++++++++++++++++++++++++++++++++++++++++++
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.print("t4.txt=\"OFF !\"");                          
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
    delay(100);
	}
  if(KEYSWITCH == LOW){
    Serial.print("t4.pco=0");                               
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);                                          
	  Serial.print("t4.pco=2016");
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.print("t4.txt=\"ON !\"");                          
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
    Serial.print("vis p32,0");                          
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
    delay(100);
	}                                                       
                                                          //++++++++++++++++++++++++++++++++++++++++++++++
 if(ESTOPIN == HIGH){                                     // FUNKTION MELDUNG NOTAUS
                                                          //++++++++++++++++++++++++++++++++++++++++++++++
  delay(30);
  digitalWrite(OUT5, LOW);
  delay(30);
  Serial.print("b1.bco=65504");                           
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("b1.pco=63488");                           // SENDE TEXT AN DISPLAY EMERGENCY STOP // TASTER NEGATION
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("t1.pco=63488");                           
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("t1.txt=\"EMERGENCY STOP !\"");             // SENDE TEXT AN DISPLAY EMERGENCY STOP // TASTER NEGATION
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("vis p30,0");                              // BILD STOP
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("vis p31,1");                              // BILD STOP
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(200); 
}
if((ESTOPIN == HIGH) && (KEYSWITCH == LOW))	// Klammern retten Nerven
	{               
		delay(30);
		digitalWrite(OUT5, LOW);
		delay(30);
		Serial.print("b1.bco=65504");                           
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.print("b1.pco=63488");
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.write(0xff);         
		Serial.print("t1.pco=63488");                         
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.print("t1.txt=\"EMERGENCY STOP !\"");             // SENDE TEXT AN DISPLAY EMERGENCY STOP // TASTER NEGATION
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.write(0xff);
    Serial.print("vis p30,0");                              // BILD STOP
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.write(0xff);
    Serial.print("vis p31,1");                              // BILD STOP
		Serial.write(0xff);
		Serial.write(0xff);
		Serial.write(0xff);
    delay(200); 
	}

if(ESTOPIN == LOW){
  delay(30);
  Serial.print("t1.txt=\"\"");                            // LEERE TEXT WENN KEIN NOTAUS // TASTER NEGATION
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("b1.bco=20");                           
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.print("b1.pco=65535");
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.write(0xff);
  Serial.print("vis p31,0");                            // BILD STOP 0
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.write(0xff); 
  Serial.print("vis p30,0");                            // BILD STOP 0
	Serial.write(0xff);
	Serial.write(0xff);
	Serial.write(0xff);
  delay(200); 
}                                                         //++++++++++++++++++++++++++++++++++++++++++++++
if(ESTOPIN == LOW && KEYSWITCH == HIGH){ 
  delay(500);                                            // FUNKTION MELDUNG SYSTEM STARTBEREIT        
  Serial.print("t1.pco=2016");                            //++++++++++++++++++++++++++++++++++++++++++++++
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("t1.txt=\"SYSTEM READY !\"");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("vis p32,1");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(500);
  Serial.print("t1.pco=2016");                            //++++++++++++++++++++++++++++++++++++++++++++++
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.print("t1.txt=\"WAIT FOR KEYSWITCH !\"");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
   Serial.print("vis p32,0");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  delay(500); 

}                                                            //+++++++++++++++++++++++++++++++++++++++++++++
if(ESTOPIN == LOW && KEYSWITCH == LOW){ 
    delay(30);                                               // FUNKTION MELDUNG LASER EMISSION OFF/ON        
	  Serial.print("t1.pco=65504");                            //++++++++++++++++++++++++++++++++++++++++++++
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.print("t1.txt=\"LASER EMISSION ON !\"");
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
    Serial.print("vis p30,1");
	  Serial.write(0xff);
	  Serial.write(0xff);
	  Serial.write(0xff);
    delay(300);
	} 
	else
		Serial.println("KEINE DATEN...");

} // Ende von loop


                                                          //+++++++++++++++++++++++++++++++++++++++++++++
void sendData(String data_from_display){                  //EMFANGENE DATEN VON DISPLAY STRING                                                         
                                                          //+++++++++++++++++++++++++++++++++++++++++++++
	delay(30);
  
	if(data_from_display =="IL14ON"){                       // SEKTION ANWAHL BUTTON INTERLOCK 1-4 ON
		delay(30);
    digitalWrite(OUT1, HIGH);
    delay(30);
	}
	if (data_from_display =="IL14OFF"){                // SEKTION ANWAHL BUTTON INTERLOCK 1-4 OFF
		delay(30);
    digitalWrite(OUT1, LOW);
    delay(30);
	}
	if (data_from_display =="IL58ON"){                // SEKTION ANWAHL BUTTON INTERLOCK 5-8 ON
		delay(30);
    digitalWrite(OUT2, HIGH);
    delay(30);
	}
	if (data_from_display =="IL58OFF"){               // SEKTION ANWAHL BUTTON INTERLOCK 5-8 OFF
		delay(30);
    digitalWrite(OUT2, LOW);
    delay(30);
	}
	if (data_from_display =="IL912ON"){                // SEKTION ANWAHL BUTTON INTERLOCK 9-12 ON
		delay(30);
    digitalWrite(OUT3, HIGH);
    delay(30);
	}
	if (data_from_display =="IL912OFF"){                // SEKTION ANWAHL BUTTON INTERLOCK 9-12 OFF
		delay(30);
    digitalWrite(OUT3, LOW);
    delay(30);
	}
	if (data_from_display =="IL1316ON"){                // SEKTION ANWAHL BUTTON INTERLOCK 13-16 ON
		delay(30);
    digitalWrite(OUT4, HIGH);
    delay(30);
	}
  if (data_from_display =="IL1316OFF"){                // SEKTION ANWAHL BUTTON INTERLOCK 13-16 OFF
		delay(30);
    digitalWrite(OUT4, HIGH);
    delay(30);
	}
  if (data_from_display =="IL1720ON"){                // SEKTION ANWAHL BUTTON INTERLOCK 17-20 ON
		delay(30);
    digitalWrite(OUT5, HIGH);
    delay(30);
	}
  if (data_from_display =="IL1720ON"){                // SEKTION ANWAHL BUTTON INTERLOCK 17-20 OFF
		delay(30);
    digitalWrite(OUT5, HIGH);
    delay(30);
	}
  if (data_from_display =="IL2124ON"){                // SEKTION ANWAHL BUTTON INTERLOCK 21-24 ON
		delay(30);
    digitalWrite(OUT6, HIGH);
    delay(30);
	}
  if (data_from_display =="IL2124OFF"){                // SEKTION ANWAHL BUTTON INTERLOCK 21-24 OFF
		delay(30);
    digitalWrite(OUT6, HIGH);
    delay(30);
	}
  if (data_from_display =="ALLON"){                   // SEKTION ANWAHL INTERLOCK ALLE ON
		delay(30);
    digitalWrite(OUT1, HIGH);
		digitalWrite(OUT2, HIGH);
		digitalWrite(OUT3, HIGH);
		digitalWrite(OUT4, HIGH);
    digitalWrite(OUT5, HIGH);
    digitalWrite(OUT6, HIGH);
    delay(30);
	}
	if (data_from_display =="ALLOFF"){            // SEKTION ANWAHL INTERLOCK ALLE OFF
		delay(30);
    digitalWrite(OUT1, LOW);
		digitalWrite(OUT2, LOW);
		digitalWrite(OUT3, LOW);
		digitalWrite(OUT4, LOW);
    digitalWrite(OUT5, HIGH);
    digitalWrite(OUT6, HIGH);
    delay(30);
	}
  if (data_from_display =="BT98ON"){              // Interlock 1 Brücke
		delay(30);
    digitalWrite(OUT7, LOW);
    delay(30);
	}
   if (data_from_display =="BT98OFF"){            // Interlock 1 Brücke
		delay(30);
    digitalWrite(OUT7, HIGH);
    delay(30);
	}
   if (data_from_display =="BT99ON"){            // Interlock 2 Brücke
		delay(30);
    digitalWrite(OUT8, LOW);
    delay(30);
	}                     
    if (data_from_display =="BT99OFF"){          // Interlock 2 Brücke
		delay(30);
    digitalWrite(OUT8, HIGH);
    delay(30);
	}  
	delay(30);
}

Der originale Mega hat Widerstände zwischen USB-Serial Chip und ATMega2560
Deiner auch?

Aber sach mal:
Du hast 4 serielle Schnittstellen!
Willst aber trotzdem eine der vier doppelt benutzen.
Dafür muss es einen gewaltigen/überwältigenden Grund geben.
Welcher ist das?

Merke: Die serielle ist kein Bus!

Ja laut Pinout Schema 4 Serielle. Ich brauch nur extrem viele Ein/Ausgänge, deshalb dachte ich ich nehme den 0,1 weil das auch so beschriftet ist ??
Und Ihr meint das liegt an einem Widerstand zwischen USB und dem MEGA?

Anbei mal das Pinout und der Schaltplan für die Platine.


Die scheinen da zu sein.
Über den Wert schweigt der Plan.

Ja der R2/R4 .... komisch..
Was halt extrem komisch ist das des Board ja zum Display Schreibt also funktioniert ja TX aber der RX nicht....

Am Original Board keine Probleme....
Dann dachte ich okay vieleicht habe ich beim Löten irgentwie die Leiterbahn beschädigt, deshalb nochmal eins gelötet aber unter der Lupe sieht der Lötpunkt jetzt nicht so schlecht aus...

Puh......

Gibts irgendeine funktionierende kleinere Alternative?? Arduino Portenta ??...

Wegen dem Preis und ggf. Unterstützung im Code bin ich sehr offen. Ich würde das auch dementsprechend honorieren und bezahlen via Paypal

Portexpander eine Option?

Wozu brauchst du die vielen Ausgänge? Vielleicht gibt es da einen Weg etwas zu optimieren, so das eine zusätzliche Serielle frei wird.

Die beiden Platinen haben verschiedene USB Adabter-Bausteine (programmierter ATmega16U2 gegen einen CH340.)

70 sind Dir zu wenig??

Grüße Uwe

Meintest du das


vom dem CH340 rechts oben sind die Widerstände zw M8RXD und D1 so wie M8TXD und D0