Ich benutzt in einem Programmabschnitt den Mega als USB to Serial Converter,
Wenn ich die Baudrate auf
Serial.begin(9600);
Serial1.begin(9600);
stelle funktioniert es aber wenn ich sie auf eine höhere stelle funktioniert die Kommunikation nicht mehr.
Ich habe im HardwareSerial.h schon die Puffer größe auf 256byte hoch gedreht leider ändert sich dann aber auch nichts.
Durchschleifen erledige ich so ->
// read from port 1, send to port 0:
if (Serial1.available()) {
Serial.write(Serial1.read());
}
// read from port 0, send to port 1:
if (Serial.available()) {
Serial1.write(Serial.read());
}
// read from port 1, send to port 0:
if (Serial1.available()) {
int inByte = Serial1.read();
Serial.write(inByte);
}
// read from port 0, send to port 1:
if (Serial.available()) {
int inByte = Serial.read();
Serial1.write(inByte);
}
Bei solchen Sachen IMMER den ganzen Code, idealerweise mit "für Forum kopieren " direkt aus der IDE, dass auch garantiert der tatsächliche Code gepostet wird.
Weil oftmals steckt der Fehler woanders als man denkt und viele Augen sehen mehr als zwei.
Der Code funktioniert für baud >9600 siehts schlecht aus
Könntest du das etwas ausführlicher schreiben? (Deinen ersten Post habe ich gesehen)
Was hängt an Serial und Serial1 ?
Was überträgst du ? (Wie viel in welcher Zeit ?)
Wofür brauchst du Serial1? USB to Serial kannst du auch direkt an Pin 0 / 1 abgreifen.
Ich fass mal alles zusammen ich sehs ein das es unübersichtlich wird.
Der mega übernimmt Steuerungsaufgaben, er kommuniziert mit diverser Hardware. Eine davon ist Serial an den mega angebunden und kann auch serial geupdatet werden. Jetzt will ich später aber nicht jedes mal den Chip entlöten zum updaten sondern würde das ganz einfach über den Mega machen.
Daher es gibt einen Mode da arbeitet der Mega ganz normal und dann gibts noch einen bei dem wird alles was über USB rein kommt zu Serial1 oder 2 durchgeschleift zum updaten . Übertragen werden bis zu 4MB , das dauert nur fast ne Stunde mit 9600 baud
... ohne Pause und Handshake, vermutlich
Da muss Serial1 ( also der Weiter-Sender ) schon eine Stufe schneller sein als der ursprüngliche Sender, sonst kanns nicht gehen.
Software-Handshake ( xon/xoff ) müsstest du programmieren, Hardware Handshake musst du selber bauen und programmieren. ( RTS/CTS pins auf dem 16U2 sind zwar vorhanden, aber nicht auf irgendwelche Anschlüsse gelegt).
Aber 57600 / 115200 ist ja schon deutlich schneller als 9600. Könnte deine "diverse Hardware" überhaupt 250000 ?
Schwieriger wird es , wenn die Riesen-Datenmengen in verschiedene Richtungen gehen und nicht klar ist, wer schneller sein muss.
Zur Hardware die gegenüber kannt über 1 Mbds , ich kann sie ja abstöpseln und an den PC hängen,.... das geht aber umständlich wenn sie später verlötet ist
HardwareSerial bei 16 MHz kann 500000 und 250000 Bd.
Lies doch mit 250000 vom PC und sende es mit 500000 weiter, wenn dein PC-Programm und die andere Hardware das unterstützt. Da sollte ein 16 MHz Arduino genug Luft haben, dass er sich nicht verschluckt.
Dann brauchst du statt >1 Stunde nur knapp 3 Minuten für deine 4 MB.
Alternativ, Fage an die Elektroniker: kann man, statt zu stöpseln, die Signale sicher auch elektrisch unter Verwendung eines Hilfs-Pins umschalten auf einen "Bypass USB -> Serial1-Tx" Betrieb, oder ?
Wenn man dann noch berücksichtigt, dass man den Serial1-Tx Pin während der Bypass-Phase nach Geschmack auf HIGH / LOW / INPUT / INPUT_PULLUP setzen kann, sollte es auch ohne ein Sortiment verschiedener Logik - Gatter gehen?