Software Serial Nano vs. Uno [solved]

Hi,
ich habe nun schon mit meinem Uno Clone ein wenig experimentiert und Daten aus einem Timer (Stackmat Timer) per Software Serial ausgelesen und dargestellt.
Jetzt hab ich heute ein paar neue Bauteile bekommen.
Ich versuche nun die Daten mit einem Nano per Software Serial auszulesen. Das klappt bei weitem nicht so gut wie mit dem UNO. Es werden immer wieder falsche Datenpakete ausgelesen. Das funktioniert mit dem UNO viel zuverlässiger beim selben Input.
Irgendjemand eine Idee?
Ich hab schon verschiedene Pins des Nano versucht: überall das gleiche Problem.

Norbert

So einfach können wir das nicht sagen, wir brauchen dazu deinen Sketch.
Den bitte hier in Code-Tags posten (Schaltfläche </>)

HotSystems:
So einfach können wir das nicht sagen, wir brauchen dazu deinen Sketch.
Den bitte hier in Code-Tags posten (Schaltfläche </>)

Ok,
aber ich glaub nicht, dass daran was zu erkennen ist:

#include <LedControl.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(12, 13, true); // RX, TX
char RxByte[10];
bool Debug = true;


void setup() {
 if (Debug)
 {
   Serial.begin(57600);
   while (!Serial) ;
   Serial.println("Start Test");
   Serial.println("Startup StackWatch");
 }
  mySerial.begin(1200);
   }
   

void loop() {
 if (mySerial.available())
 {
    RxByte[i] = mySerial.read();
    if ((i == 9) || (RxByte[i] == 13)) // ||  end of message
    {  
        //if(RxByte[0] == 'I') lcd.clear();
      if (Debug) debugout(); 
      i = 0;
      delay(500);   
    }
    else i++;
 }
}
void debugout()
    {Serial.print("I received: ");
     Serial.print(i+1, DEC);
     Serial.print("Bytes: ");
     Serial.print(char(RxByte[0]));
     Serial.print(RxByte[1]-48, DEC);
     Serial.print(RxByte[2]-48, DEC);
     Serial.print(RxByte[3]-48, DEC);
     Serial.print(RxByte[4]-48, DEC);
     Serial.print(RxByte[5]-48, DEC);
     Serial.print("|");
     Serial.print(RxByte[6]-48, DEC);
     Serial.write(RxByte[6]);
     Serial.print(RxByte[7], DEC);
     Serial.println();
     }

Ja, und wie gesagt beim Uno gibt das immer schön 10er Päckchen, die auch passen, beim Nano kommen nur manchmal die korrekten Werte.

NorbertA:
Ok,
aber ich glaub nicht, dass daran was zu erkennen ist:

Ja, und wie gesagt beim Uno gibt das immer schön 10er Päckchen, die auch passen, beim Nano kommen nur manchmal die korrekten Werte.

Was macht der dritte Parameter (true) hier:

SoftwareSerial mySerial(12, 13, true); // RX, TX

Den habe ich bisher noch nicht gesehen.

HotSystems:
Was macht der dritte Parameter (true) hier:

SoftwareSerial mySerial(12, 13, true); // RX, TX

Den habe ich bisher noch nicht gesehen.

inverse_logic: is used to invert the sense of incoming bits (the default is normal logic). If set, SoftwareSerial treats a LOW (0 volts on the pin, normally) on the Rx pin as a 1-bit (the idle state) and a HIGH (5 volts on the pin, normally) as a 0-bit. It also affects the way that it writes to the Tx pin. Default value is false.

Die Daten kommen 'invertiert' an. Wie gesagt, beim UNO funktionierts. Gibt es Unterschiede in der HW Spezifikation der Schnittstelle zwischen Uno und Nano?

Also.
Du hast einen UNO Clon und das heißt daß die Arduino/Genuino UNO Schaltpläne nicht richtig sein müssen. Da ein Arduino NANO ca 40€ kostet nehme ich an, daß Du auch keinen Orginal NANO hast.

Auf die Orginalteile bezogen ist der Unterschied, daß beim NANO an Pin 13 direkt ein LED über einen Widerstand angeschlossen ist, beim UNO ein Operationsverstärker in Spanungsfolgerschaltung. Dieser belastent den Ausgang nicht.

Da Du aber sagst, daß Du mit allen Pins des NANO die gleichen Probleme hast, kann ich nichts zu Deinem Problem sagen.

Grüße Uwe

Bleibt jetzt nur noch die Idee, der Nano ist defekt.
Hast du einen weiteren Nano zum probieren?

Ich hatte mal einen, da war zwischen mehreren Pins ein Kurzschluss. Auch ein Clone und beim Löten der Stiftleiste habe die ordentlich gefuscht.

Oder alternativ die "AltSoftSerial" verwenden.

Ich hab das Problem beseitigt. Hab aber noch nicht genau den Grund:
Der Delay war zu lang auf dem Nano. Mir kam es seltsam vor, dass der Uno viel schneller hintereinander Werte lieferte als der Nano.
Ich hab den Delay auf dem Nano auf 50 gesetzt und schon funzts.
Gibt es da einen Unterschied im Delay() Befehl zwischen Uno und Nano?

Gibt es da einen Unterschied im Delay() Befehl zwischen Uno und Nano?

Unwahrscheinlich!

Gleicher Prozessor
Gleiche IDE
Gleiche Libs
Gleicher Compiler

Auch in der Doku zu Delay findet sich sowas nicht.

NorbertA:
Gibt es da einen Unterschied im Delay() Befehl zwischen Uno und Nano?

Der einzige Unterschied, der hier auftreten kann, ist der eingesetzte Quarz bzw. Keramikresonator.
Die können sich geringfügig unterscheiden, was aber in diesem Fall keinen großen Einfluss haben kann.
Aus denen wird letztendlich das "delay" abgeleitet.

Dein delay(500); würde ich weder auf dem Uno noch auf einem Nano Nachbau haben wollen.
Soll doch alles protokolliert werden, oder?
Mit delay erreichst du nur, dass der SoftwareSerial Empfangspuffer sicherer überläuft, bevor du es ausgegeben hast.

Da Serial überhaupt einigermassen funktioniert, sind die Resonatoren/Quarze schon zumindest halbwegs ok. (Und nicht etwa ein 8MHz / 16 MHz Problem)
Der NANO ist ein 168 oder ein 328 ? Wenn es ein 328P ist, und du A6 / A7 nicht brauchst, könntest du ja behaupten, du würdest ihn auf einen UNO laden? Macht das der Bootloader des Nano-Clons mit?

Macht das der Bootloader des Nano-Clons mit?

Laut meiner Erinnerung möchte er zumindest mit einer anderen Baudrate bespielt werden.
Die boards.txt gibt gerne Auskunft dazu.