Forum: Mikrocontroller und Digitale Elektronik Arduino Serial Monitor SIM800L AT+ ERROR


von donvido (Gast)


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?

von Beo Bachta (Gast)


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.

von donvido (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

Was meinst du mit "Arduino"? Den seriellen Monitor der IDE?

von donvido (Gast)


Lesenswert?

Ja

von Beo Bachta (Gast)


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).

von Stefan F. (Gast)


Lesenswert?

Vielleicht sendet der Monitor von Arduino die Zeichen schneller 
hintereinander, als Putty (oder umgekehrt).

Beim Hammer Terminal kann man das Delay einstellen.

von donvido (Gast)


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.

von Stefan F. (Gast)


Lesenswert?

Versuche mal eine andere Version der IDE.

von donvido (Gast)


Lesenswert?

Ich habe die Version 1.8.13 benutzt.
Ich kann heute Abend mal ältere Versionen ausprobieren.

von Stefan F. (Gast)


Lesenswert?

donvido schrieb:
> Ich habe die Version 1.8.13 benutzt.

Dann mache gleich einen großen Sprung auf irgendeine 1.7er Version.

von A. Z. (donvido)


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.

von Stefan F. (Gast)


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.

von A. Z. (donvido)


Lesenswert?

Ich finde leider keine Möglichkeit ein Delay einzustellen.

Stefan ⛄ F. schrieb:
> Putty sendet hingegen jede Taste einzeln.

Das meinte ich damit:

A. Z. schrieb:
> Der serielle Monitor von Putty sendet aber schon beim schreiben.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

A. Z. schrieb:
> Ich finde leider keine Möglichkeit ein Delay einzustellen.

Jetzt wollte ich dir gerade einen Screenshot von der Einstellung mache 
und stelle fest: Das war ein anderes Programm, nämlich Cutecom (Linux). 
Sorry für die Verwirrung.

von A. Z. (donvido)


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.

von Wikki (Gast)


Lesenswert?

Beo Bachta schrieb:
> Putty hat
> nämlich keine serielle Schnittstelle sondern nur eine API
> zum Betriebssystem (das ist nicht an dich gerichtet, Stefan).

Putty hat genau so wenig eine serielle Schnittstelle wie die Arduino 
IDE, Du Dampfredner.

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.