Arduino Serial Monitor SIM800L AT+ ERROR

Gast #6673099
Lesenswert?

Hallo zusammen,
ich hatte gestern ein äußerst kurioses Problem, auf das ich mir keinen 
Reim machen kann.
Und zwar habe ich hier ein SIM800L Modul (die Spannungsversorgung ist 
unproblematisch) und einen Arduino Nano.
Um das Sim Modul für mein Projekt zu konfigurieren, habe ich den Nano 
zunächst mal als Serial Passthrough mit SoftwareSerial programmiert.
(siehe: 
https://www.arduino.cc/en/Tutorial/LibraryExamples/SoftwareSerialExample)
Für die Eingabe habe ich den Serial Monitor von der Arduino IDE 
verwendet.
Hier mal Beispielhaft die Ausgabe:
1
->AT
2
OK
3
->AT+IPR?
4
+IPR=115200
5
->ATI
6
SIM800 14.16
7

8
OK
9
->AT+IPR=9600;&W
Nach dem ich die Baudrate dann für das Sim Modul und den Arduino auf 
9600 gesetzt habe sah die Ausgabe wie folgt aus:
1
->AT
2
OK
3
->ATE1
4
OK
5
->AT+IPR?
6
AT+
7
ERROR
8
->ATI
9
ATI
10
SIM800 14.16
11

12
OK
13
->AT&F
14
AT&
15
ERROR

Sämtliche Befehle mit + oder & konnten nicht korrekt übertragen werden. 
Von AT+TEST123 wurde AT+123 zurückgegeben und natürlich ERROR.
Als ich dann mal spaßeshalber die Schnittstelle von Arduino auf Putty 
gewechselt habe, funktionierte alles problemlos...
1
->AT
2
OK
3
->AT+IPR?
4
+IPR=9600

Hat von euch einer eine Ahnung, woran das liegt?
Gast #6673231
Lesenswert?

donvido schrieb:
> Hat von euch einer eine Ahnung, woran das liegt?

Da wird wohl die Softserial-Implementierung nicht mehr
schnell genug hinterherkommen.

Softserial nutzt keine UART-Hardware, daher muss die
Arduino-Software viel mühselig selbst machen was sonst
die UART Hardware erledigt.
Gast #6673245
Lesenswert?

Beo Bachta schrieb:
> Da wird wohl die Softserial-Implementierung nicht mehr
> schnell genug hinterherkommen.

Bei 9600 Baud?
Bei 115200 Baud gabs jedenfalls keine Probleme mit SoftSerial...

donvido schrieb:
> Schnittstelle von Arduino auf Putty
> gewechselt

Das war am Ende alles, was ich geändert habe, damit es funktioniert. Die 
Softserial-Implementierung hat sich da keineswegs geändert.
Gast #6673286
Lesenswert?

Stefan ⛄ F. schrieb:
> Was meinst du mit "Arduino"?

Ja so ist das. Immer Wischi-Waschi Aussagen. Während man
sich bei "Arduino" noch die serielle Schnittstelle zusammen-
reimen könnte, geht das bei Putty nicht mehr. Putty hat
nämlich keine serielle Schnittstelle sondern nur eine API
zum Betriebssystem (das ist nicht an dich gerichtet, Stefan).
Gast #6673410
Lesenswert?

Ich habe mal das SIM800 Modul gegen einen FTDI getauscht.
Mit
mySerial.begin(9600);
werden vom Arduino Serial Monitor immer nur maximal 4 Zeichen übetragen 
entweder bei 2 Zeichen mit '\r\n'und bei mehr als 2 Zeichen nur noch mit 
'\n' (z.B. 'AT+\n').

Mit
mySerial.begin(15200);
werden ganz entspannt Zeichenfolgen von der Größe des Buffers 
übertragen.
#6673787
Lesenswert?

v1.6.13 -> gleiches Problem
v1.0.5-r2 -> gleiches Problem
mit HTerm senden -> gleiches Problem

Sobald ich mehr als 4 Zeichen auf einmal sende, kommen nur noch die 
ersten 3 und das letzte Zeichen an.

Der serielle Monitor von Putty sendet aber schon beim schreiben.
Gast #6673813
Lesenswert?

A. Z. schrieb:
> mit HTerm senden -> gleiches Problem

Ohne oder mit welchem Delay? Probiere aus, ob das Delay eine Rolle 
spielt, dann bist du danach etwas schlauer.

Soweit mir bekannt ist, senden Hammer Terminal und Arduino zeilenweise, 
wenn du die Enter Taste drückst.

Putty sendet hingegen jede Taste einzeln.
#6673962
Lesenswert?

Ich glaub, ich hab die Ursache gefunden:
size_t SoftwareSerial::write(uint8_t b)
deaktiviert für jedes zu sendende Byte die Interrupts, um sicher das 
Timing einzuhalten.

Wenn nun C_in >> C_out, (C=Datenrate) dann verschluckt der UART eben ein 
paar Bytes.

Wenn ich aber
1
Serial.begin(19200);
setze, dann kommt alles an.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren