Forum: Mikrocontroller und Digitale Elektronik Arduino Softserial geht nicht


von Herbert (Gast)


Lesenswert?

Hallo Zusammen,

im Moment probiere ich gerade die SoftSerial eines Arduino Uno.
Das Testprogramm soll folgendes tun: Daten vom PC empfangen, an die 
Softserial übergeben. Dort schleife ich das Sendesignal auf den 
Soft-Rx-Eingang, dieser empfängt das Signal und gibt es an den PC 
zurück.
Leider scheint es aber nicht zu funktionieren. Hat jemand eine Idee?
1
#define LEDPIN           13      
2
#define ARDUINO_RXPIN    8      // data from LPC to arduino
3
#define ARDUINO_TXPIN    11      // data from arduino to LPC
4
5
#define LEDON  { digitalWrite(LEDPIN,HIGH); } 
6
#define LEDOFF { digitalWrite(LEDPIN,LOW); }
7
8
#include <SoftwareSerial.h>
9
10
SoftwareSerial SoftSerial(ARDUINO_RXPIN, ARDUINO_TXPIN); // RX, TX only pin 8,9,10,11,14 are allowed on atmega328
11
12
void setup() 
13
{
14
  // initialize both serial ports:
15
  Serial.begin(9600);
16
  pinMode(ARDUINO_RXPIN, INPUT);
17
  pinMode(ARDUINO_TXPIN, OUTPUT);
18
  SoftSerial.begin(9600);
19
  pinMode(LEDPIN,OUTPUT);
20
  LEDON;
21
}
22
23
void loop() 
24
{  
25
  // read from pc serial port, send to LPC:
26
  if (Serial.available()) 
27
  {
28
    uint8_t value = Serial.read();
29
    SoftSerial.write(value);
30
  }
31
  
32
  // read from LPC, send to PC:
33
  if (SoftSerial.available()) 
34
  {
35
    uint8_t value=SoftSerial.read();
36
    Serial.write(value);
37
  }
38
 
39
}

von Karl H. (kbuchegg)


Lesenswert?

Herbert schrieb:
> Hallo Zusammen,
>
> im Moment probiere ich gerade die SoftSerial eines Arduino Uno.
> Das Testprogramm soll folgendes tun: Daten vom PC empfangen, an die
> Softserial übergeben. Dort schleife ich das Sendesignal auf den
> Soft-Rx-Eingang

hast du das kontrolliert?
Kommt da auch was an?
Nicht dass dein Kabel falsch rum gekreuzt ist.

Einfach mal eine LED an diesen Pin halten (und natürlich an GND). Wenn 
der PC sendet (im Terminal einen Stein auf die Tastatur legen, damit der 
dauersendet). Die LED muss dann flackern.

von Jürgen S. (jurs)


Lesenswert?

Im Prinzip sollte das funktionieren - mit Übertragungsfehlern.

Diese beiden Zeilen in Deinem Code würde ich aber dringend weglassen:
>   pinMode(ARDUINO_RXPIN, INPUT);
>   pinMode(ARDUINO_TXPIN, OUTPUT);

Die zu Arduino mitgelieferte SoftwareSerial Library ist ein vollkommen 
beknacktes Ding: Wenn Du es gleichzeitig mit HardwareSerial verwendest, 
kommt es oberhalb 4800 Baud garantiert zu mehr oder weniger 
Übertragungsfehlern.

Wenn Du eine fehlerfreie Übertragung benötigst, gleichzeitig bzw. 
überlappend mit der HardwareSerial-Schnittstelle, installierst Du Dir 
besser die "AltSoftSerial" Library. Allerdings läuft die nur an einem 
festen Pin.

von Herbert (Gast)


Lesenswert?

Danke für eure Antworten.
Ich habe noch mal ein wenig experimentiert: Das Oszi zeigt an, dass 
SoftSerial sendet. Es wird also nichts empfangen.
Dann habe ich die Brücke mal raus gezogen und das Brummen meines Fingers 
erzeugt ein paar Zufallszeichen die scheinbar von der Softserial 
empfangen werden und an den PC weitergeleitet.

Schlussfolgerung: Die Softserial hat ein Problem beim gleichzeitigen 
Senden und Empfangen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Herbert schrieb:
> Softserial übergeben. Dort schleife ich das Sendesignal auf den
> Soft-Rx-Eingang, dieser empfängt das Signal und gibt es an den PC
> zurück.

 Und wie soll das ganze funktionieren ?
 Mach es umgekehrt, (Soft<=>PC, Hard<=>Arduino), dann geht es.
 Es würde mich sehr wundern, wenn irgendeine SoftSerial gleichzeitig
 senden und empfangen kann.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.