Software Serial auf Atmega 328 einrichten?

Laut diesem Thread kann man dazu jeden pin verwenden: ATMega328P (Arduino Uno): Which pins can be used for software UART + pin mapping - Project Guidance - Arduino Forum

Ich hab die pins A2 (RX) und A3 (TX) verwendet, aber ohne Erfolg. Die Wahl der pins hatte keinen besonderen grund.
Es waren einfach fast keine pins mehr frei weil alle anderen schon verlötet wurden. Sieht so aus als müsst Ich doch einige dinge umlöten um das zum laufen zu bringen. Schade, dass Ich das nicht gewusst habe als das projekt noch am breadboard war :smiley:

Die Frage ist nur, welche pins kann Ich auf dem Board für Software Serial verwenden?

Es handelt sich genau um dieses Board: AZ-Nano V3-Board mit Atmega328 und CH340 – AZ-Delivery

LFP:
.....
Die Frage ist nur, welche pins kann Ich auf dem Board für Software Serial verwenden?

Du kannst ganz sicher alle digitalen Pins verwenden, mit Ausnahme von D0 und D1.

Eigentlich müssten die analogen Pins A0 bis A5 auch funktionieren, da diese auch als digitale Pins genutzt werden können.
Ich habe es bisher nicht getestet. Evtl. musst du die Pins zuvor als digitale definieren.

Aber Achtung, es muss SoftwareSerial sein, nicht AltSoftSerial.

A6 und A7 auf dem NANO sind keine digitalen Pins sondern nur analoge. Diese können sicher nicht als Serielle Pins verwendet werden.

Grüße Uwe

Das Thema hat mich jetzt auch interessiert und ich habe es getestet.

Getestet wurden A0 bis A3, da A4 und A5 für I2C belegt sind.
Und es funktioniert mit SoftwareSerial. Sicher funktionieren A4 und A5 auch.

Du must nur den RX-Pin als Input und den TX-Pin als Output im Setup definieren und es löpt.

Hallo LFP,

hast du denn schon Ergebnisse, die du uns mitteilen kannst ?

Wäre toll, wenn wir Informationen von dir erhalten.

HotSystems:
Hallo LFP,

hast du denn schon Ergebnisse, die du uns mitteilen kannst ?

Wäre toll, wenn wir Informationen von dir erhalten.

Hab eure antworten gerade gesehen. Ich werd heut im laufe des Tages nochmal nachsehen ob mit den Lötstellen und dem Setup alles in Ordnung ist und euch berichten.

EDIT:

Ich hab die Lötstellen kontrolliert und zur sicherheit nochmal neu verlötet. Der Kontakt sollte da sein.
Testweise hab Ich mal die RX/TX pins für SoftwareSerial vertauscht um zu sehen ob das der Fehler war, aber ohne Erfolg.

Hier mal der Testcode und mehr Hintergrund dazu:

#include <SoftwareSerial.h>

SoftwareSerial SoftSerial(A2, A3);

void setup()
{
  Serial.begin(9600);
  SoftSerial.begin(19200);
  
  Serial.println("Hardware Serial");
  SoftSerial.print('D');
}

void loop()
{
}

Der SerialMonitor am PC gibt mir wie erwartet "Hardware Serial" aus.
Der char 'D', den ich an SoftSerial übergebe, sollte eine Messung am Rangefinder auslösen. Das würde Ich unter anderem durch ein hörbares piep und ein aufleuchten des Lasers mitbekommen.
Als der Rangefinder am RX0 / TX1 hing, hat das auch funktioniert. Auf den Pins A2 / A3 passiert aber nichts. Bin ratlos!

Kein Wunder, dass es nicht funktioniert.
Du ignorierst ja auch meine Informationen aus dem Post #3.

Warum machst du nicht, was ich dir geschrieben habe ?

Ah, du hast recht. Ich hab das ganz übersehen weil Ich schon so verwirrt bin von dem Thema.

Ich hab den code jetzt angepasst, aber es funktioniert trotzdem nicht:

#include <SoftwareSerial.h>

int rxPin = A2;
int txPin = A3;

SoftwareSerial SoftSerial = SoftwareSerial(rxPin, txPin);

void setup()
{
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  
  SoftSerial.begin(19200);
  
  SoftSerial.print('D');
}

void loop()
{
}

(deleted)

Peter-CAD-HST:
Moin LFP

Wie sieht dein Testaufbau aus ?

Gruss Peter
und gesund bleiben

Das komplette Projekt ist schon recht komplex da es (bis auf den switch von Serial auf SoftwareSerial) bereits fertig ist.
Falls Ihr ein Programm empfehlen könnt mit dem man die Teile und verkabelungen gut abbilden kann, werd Ich euch damit was zusammenstellen.

Grundsätzlich siehts so aus:

Ich hab einen Laser Rangfinder der mittels serieller schnittstelle kommuniziert.

  • RX des LRF ist mit pin A2 am Nano verbunden
  • TX des LRF ist mit pin A3 des Nano verbunden
  • Im Setup wird (dank HotSystems) der input/output pin definiert
  • Danach wird der SoftwareSerial port geöffnet
  • Ich schicke den char 'D' mittels SoftwareSerial an den LRF (sollte eine Messung auslösen und entweder ein ergebnis oder einen fehlercode zurücksenden)
  • Nichts passiert

Jetzt muss Ich leider los und bin erst in ein paar stunden wieder da.

LFP:

  • Ich schicke den char 'D' mittels SoftwareSerial an den LRF (sollte eine Messung auslösen und entweder ein ergebnis oder einen fehlercode zurücksenden)

Versteht dein LRF überhaupt diese Anweisung 'D' ?
Also könnte es auch an der Empfängerseite liegen ?

Evtl. solltest du erst mal eine normale serielle Verbindung mit SoftwareSerial zu einem anderen Arduino aufbauen. Damit du sicher sein kannst, diese Vebindung funktioniert.

Wenn wir nicht genau wissen, was da abläuft, ist eine weitere Hilfe schwer.

Edit:
Grad gelesen. Du hast die Verbindungen der seriellen sicher falsch verdrahtet.
Bei der seriellen sollte RX vom LRF mit TX vom Arduino und TX am LRF mit RX am Arduino verbunden sein und nicht so wie du es beschrieben hast. Es muss immer der Sender (TX) mit dem Empfänger (RX) verbunden sein.

(deleted)

Peter-CAD-HST:
Moin

nun kann das aber was werden :slight_smile:

Die Hoffnung stirbt zuletzt.

(deleted)

HotSystems:
Versteht dein LRF überhaupt diese Anweisung 'D' ?
Also könnte es auch an der Empfängerseite liegen ?

Evtl. solltest du erst mal eine normale serielle Verbindung mit SoftwareSerial zu einem anderen Arduino aufbauen. Damit du sicher sein kannst, diese Vebindung funktioniert.

Wenn wir nicht genau wissen, was da abläuft, ist eine weitere Hilfe schwer.

Edit:
Grad gelesen. Du hast die Verbindungen der seriellen sicher falsch verdrahtet.
Bei der seriellen sollte RX vom LRF mit TX vom Arduino und TX am LRF mit RX am Arduino verbunden sein und nicht so wie du es beschrieben hast. Es muss immer der Sender (TX) mit dem Empfänger (RX) verbunden sein.

Du hattest recht, was aber nichts geändert hat (hab rxPin halt jetzt mit A3 definiert und txPin mit A2)

Hier 2 Screenshots mithilfe dessen Ich damals das ding auf RX0 / TX1 zum laufen gebracht hab:


Wie gesagt: Das alles hat bereits mit dem Seriellen anschluss funktioniert.
Ich hab einfach das Gelbe kabel von TX1 auf A3, und das Weiße kabel von RX0 auf A2 verlegt.

Also wenn es mit der Hardware Seriellen funktioniert, muss es auch mit SoftwareSerial funktionieren.
Ich kann leider nicht erkennen, was da noch falsch ist.

Hast du denn die Verbindung mal mit einem Arduino getestet ?

Ich fürchte das werd Ich jetzt wohl machen müssen.

LFP:
Ich fürchte das werd Ich jetzt wohl machen müssen.

Ein Gegencheck ist immer wichtig, wenn man nicht weiter kommt.
Bisher hatte ich mit SoftwareSerial noch nie Probleme, daher kann ich mit nicht vorstellen, dass es nicht geht.

Doch noch eine Frage:
Mit welcher Spannung betreibst du dein externes Modul und woher holst du diese Spannung ?

HotSystems:
Doch noch eine Frage:
Mit welcher Spannung betreibst du dein externes Modul und woher holst du diese Spannung ?

Der LRF hängt am 3V Pin und das komplette Board bekommt während des tests den strom über USB.