Es soll das gesendete Byte überprüft werden und zwar mittels timeout und bytevergleich.
was SOLL es machen:
Das gleiche möchte ich auch mit dem Nano Every ermöglichen, aber dafür gibt es nur SoftwareSerial, was das nicht kann. AltSoftSerial kann es, aber eben nicht auf dem Every.
was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...):
das gesendete Byte wird nicht gegengelesen mit SoftwareSerial.
Eine Frage stellen bzw. erklären was man erwartet:
a Hilfestellung wie man AltSoftSerial erweitert (bevorzugt) Durch hinzufügen der Boardparameter, Register und Timer.
b Hilfestellung zur Realisierung mit SoftwareSerial. Gibt es alternativen zu SoftwareSerial, die mit dem Every funktionieren?
Mein Testprogramm sieht dazu so aus. Pin8+9 sind für mit einem Kabel verbunden.:
/*
Serial Echo Test
*/
#define RX_PIN 8
#define TX_PIN 9
#include <SoftwareSerial.h>
SoftwareSerial SerialS(RX_PIN, TX_PIN); // RX, TX
//#include <AltSoftSerial.h>
//AltSoftSerial SerialS(RX_PIN, TX_PIN); //RX, TX
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
SerialS.begin(9600);
Serial.println(F("Startup"));
}
void loop() {
if (Serial.available()) {
byte write_buffer = byte(Serial.read());
SerialS.write(write_buffer);
unsigned long last_tx = millis();
bool timeout_passed = true;
while (!SerialS.available()) { // WAIT FOR ECHO
if (millis() - last_tx > 20) { //timeout 20
Serial.println(F("WRITE TIMEOUT"));
timeout_passed = false;
break;
}
}
if (timeout_passed) {
if (write_buffer != byte(SerialS.read())) { // WRITE ERROR
Serial.println(F("CHAR MISSMATCH"));
} else {
Serial.print(F("GREAT:0x"));
Serial.print(write_buffer, HEX);
Serial.println(F(" WAS SENT."));
}
}
}
}
ja, weil ich mit dem nomalen nano relativ an der speichergrenze bin.
klar ich könnte auch einen mega nehmen, aber der passt nicht auf mein pcb, da müsste ich die ganze avr geschichte drauf platzieren. auf dieses dann doch micro-löten habe ich eigentlich keine lust.
Gib uns mal den gesamten Sketch.
Wahrscheinlich können wir Dir beim Speichersparen helfen.
Es gibt den ATmega2560 auch auf einer kleinen Platine.
Grüße Uwe
Habe sehr viel Zeit damit verbracht und auch Geld rein gesteckt, was in meinem Programm steckt.
Ich habe kein Problem damit das Ergebnis zu teilen, aber die Source aktuell nicht für Jedermann zugänglich.
Schade dass man auf sein Testsketch reduziert wird, weil F() fehlt. @noiasca: Oder was möchtest du mir sagen?
Hier investiert jeder sehr viel Zeit/Geld in die Programmierung, Hardware und Hilfestellung für Probleme Anderer, daher wenn dir geholfen werden soll, spiel mit offenen Karten!
Ich pfeife normalerweise auf die Karmapunkte, aber vielleicht sagen 0 Punkte nach 100 Posts doch etwas über das vorherige Verhalten aus...
Ganz nebenbei, wenn du nur überprüfen willst, ob SoftwareSerial verfügbar ist, nutze .isListening(), .available() konnte ich mit SoftwareSerial nicht nutzen. Die Libs sind übrigens kein Geheimnis, sondern werden mit allen geteilt und sind auch für dich einsehbar, dafür schreiben viele Entwickler so ein-zwei Kommentare in die Libs.
Hab euch PNs geschickt um meine Code mit euch zu teilen.
Was ein Forum ist und heißt weiß ich natürlich. Helfen tue ich hier genauso, wenn ich was zu beitragen kann. Dass es nicht heraussticht, mag daran liegen, dass ich kein Profi bin.
Mal vom großen Ganzen ab, zurück zum Teilziel hier:
was hat man (Sketch und Hardware):
Es soll das gesendete Byte überprüft werden und zwar mittels timeout und bytevergleich.
was SOLL es machen:
Das gleiche möchte ih auch mit dem Nano Every ermöglichen, aber dafür gibt es nur SoftwareSerial, was das nicht kann. AltSoftSerial kann das, aber eben nicht auf dem Every.
was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
das gesendete Byte wird nicht gegengelesen mit SoftwareSerial.
Eine Frage stellen bzw. erklären was man erwartet
a Hilfestellung wie man AltSoftSerial erweitert (bevorzugt) Durch hinzufügen der Boardparameter, Register und Timer.
b Hilfestellung zur Realisierung mit SoftwareSerial. Gibt es alternativen zu SoftwareSerial, die mit dem Every funktionieren?
Auf dem Nano 3.0 schaut das ganze so aus:
/*
Serial Echo Test
*/
#define RX_PIN 8
#define TX_PIN 9
#include <SoftwareSerial.h>
SoftwareSerial SerialS(RX_PIN, TX_PIN); // RX, TX
//#include <AltSoftSerial.h>
//AltSoftSerial SerialS(RX_PIN, TX_PIN); //RX, TX
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
SerialS.begin(9600);
Serial.println("Startup");
}
void loop() {
if (Serial.available()) {
byte write_buffer = byte(Serial.read());
SerialS.write(write_buffer);
unsigned long last_tx = millis();
bool timeout_passed = true;
while (!SerialS.available()) { // WAIT FOR ECHO
if (millis() - last_tx > 20) { //timeout 20
Serial.println(F("WRITE TIMEOUT"));
timeout_passed = false;
break;
}
}
if (timeout_passed) {
if (write_buffer != byte(SerialS.read())) { // WRITE ERROR
Serial.println(F("CHAR MISSMATCH"));
} else {
Serial.print(F("GREAT:0x"));
Serial.print(write_buffer, HEX);
Serial.println(F(" WAS SENT."));
}
}
}
}
Ist da was dran oder ist das genauso nur Marketing wie das "backwards compatible" ?
Was hat nun dein Problem genau mit Parity zu tun?
In der dokumentierten Nano-Variante sehe ich da nichts.
Was siehst du, wenn du im CHAR MISSMATCH - Zweig gesendetes und empfangenes Byte in der Fehlermeldung anzeigst? (Und wie erwartest du einen Parity Fehler bei 8 bit Nutzdaten?)
Mag schon sein, dass der Every nen zweiten Uart hat, aber ich brauchs an den pin8+9.
1:1 compatible zum nano 328P ist er nicht.
Mit Parity hat es nichts zu tun. Ich nutze die AltSoftSerial Library, weil ich sie gut finde.
Im Fall SoftwareSerial kommt es gar nicht erst zum char mismatch, weil gar kein char zurück kommt. die timeout schleife würde ewig weiterlaufen, wenn das timeout nicht drin wäre.
harryberlin:
...
Reaktionen auf die PNs blieb bisher aus.
...
Was hattest Du Dir vorgestellt?
Vll, daß die Leute, Denen Du großherzig Dein geistiges Eigentum zur Verbesserung geschickt hast, Dieses für Dich auch noch in bare Münze umwandeln?
Aber: Ist Dein Sketch und wenn man schon als Schmarotzer hingestellt wird, nur weil man schmarotzt, dann ist Das halt so.
Woher möchtest du wissen, ob ich was geschickt habe? Immer die Mutmaßungen hier....
Erwartet habe ich eine Antwort. Inhalt sei mal dahin gestellt.
Schmarotzer
Halte dich mal mit diesen asozialen Äußerungen zurück! Nein du brauchst die Erklärung jetzt nicht aus dem Wiki verlinken.
Es geht um Erweiterung von AltSoftSerial, wo wohl jeder davon profitieren kann.
Was dann damit angestellt wird, ist jedem überlassen und auch gar nicht Thema hier! Wenn du schon so korrekt sein willst. Das der Speicher nicht ausreicht war eine Randinfo, die ebenfalls nicht zum Topic hier gehört.
Vorher mal nachdenken, bevor man sich so verhält.
Das Karma kam aber jetzt nicht von Dir, oder?
Was ist daran großartig asozial, daß ich die Mit-User vor der, meiner Meinung nach recht einseitigen Situation, Die Du hier an den Tag legst, warnen, gar beschützen will?
SO gesehen bin ich aber so was von sozial ... noch etwas mehr und ich werde zum Bundespräsidenten ernannt ...
Wenn aber doch JEDER von Deinem Problem, oder eben der Lösung dazu, profitieren soll, verstehe ich Deine Geheimhaltung noch viel weniger - aber kein Ding, etwas blöd wird man ja wohl noch sein dürfen.
In diesem Sinne
PS: 'woher möchtest Du ...' - solange Du nicht nur im Forum rumlügst, hast Du Denen das Zeug geschickt - steht zumindest weiter oben so - und bisher hatte ich keinen Anlass, Dir nicht zu glauben - sollte ich besser nicht?