Forum: Mikrocontroller und Digitale Elektronik SIM800L Verbindung instabil


von A. H. (dernetteeddie1978)



Lesenswert?

Hi Leute,

möchte mit meinem Arduino Uno das SIM800L GSM Bord per AT-Befehle 
ansteuern.

Dazu hab ich die entsprechende Library von Vittorio in Github 
installiert.
Ich versuche SMS zu senden ("send SMS" aus den Beispielfiles) aber es 
gehen keine raus.
Auch Statusabfragen aus dem Beispiel "get Informations" kommen nicht 
richtig im seriellen Monitor an. Stattdessen erscheinen div. merkwürdige 
Zeichen. Im Netz steht überall das läge an einer falsch eingestellten 
Baudrate, die ist in den Beispielen aber mit 9600Baud voreingestellt und 
der Chip soll die lt. HW-Manual auch unterstützen. Auch andere Baudraten 
bessern nichts.

Verschiedene Sachen hab ich beachtet/ versucht:

- Die Betriebsspannung des GSM Boards ist 4V bis 2A Stromstärke per 
Labornetzteil, Masse ist mit dem Arduinoboard verbunden.

- Die Ansteuerung der UART Schnittstelle des SIM800L Boards erfolgt ja 
über GPIO Pins des Arduino Boards, so wie es in der Library 
implementiert ist.
Lt. HW Spec des GSM Boards passen die Spannungspegel zw. den beiden 
Boards nicht zusammen. Daher wird dort eine Beispielschaltung (siehe 
Seite 31) zur Anpassung vorgeschlagen. Die hab ich implementiert, 
wenngleich ich nicht sicher bin ob das überhaupt nötig ist weil die 
HW-Spec nur für den Chip ist, nicht aber das ganze GSM Board. Das Board 
wird ja f. Arduino verkauft und normalerweise sind die Sachen ja Plug n 
Play. Das ist zwar bei der Versorgungsspannung auch nicht der Fall, da 
wird es aber überall im Netz erwähnt. Bei den Pins f. die Schnittstelle 
schreibt niemand was davon.
Unterm Strich hats nichts geändert.

Ein anderer Code aus dem Netz funktioniert etwas besser in dem Sinn dass 
Statusabfragen nun ab und zu korrekt beantwortet, werden aber teilweise 
kommt auch Error zurück (siehe Screenshots). SMS senden geht immer noch 
nicht.
1
#include <SoftwareSerial.h>
2
3
SoftwareSerial mySerial(10, 11); // RX, TX
4
5
void setup()
6
{
7
  // Open serial communication
8
  Serial.begin(9600);
9
10
  // set the data rate for the SoftwareSerial port
11
  mySerial.begin(9600);
12
13
  delay(1000);
14
  Serial.println("Testing SIM800L module");
15
  Serial.println();
16
  Serial.print("Sizeof(mySerial) = "); Serial.println(sizeof(mySerial));
17
  Serial.println();
18
19
}
20
21
void loop() // run over and over
22
{
23
24
  if( mySerial.available() )
25
  {
26
    char c = mySerial.read();
27
    Serial.print(c);
28
  }
29
30
  if(Serial.available())
31
  {
32
    String Arsp = Serial.readString();
33
34
    Serial.println("Serial available");
35
    Serial.println(Arsp);
36
    mySerial.println(Arsp);
37
    Serial.println("Serial available end");
38
  }
39
40
}


Schicke ich beispielsweise ein "AT" so kommt beim ersten mal die 
korrekte Antwort beim zweiten Mal wieder so ein merkwürdiges Zeichen, 
siehe Screens im Anhang.
Ein "AT+CGMF=1" gibt einen Error zurück. Manchmal gehts aber dann auch 
nach mehreren Versuchen.

Teilweise stürzt die Kommunikation auch ganz ab und ich bekomme gar 
keine Rückmeldung mehr.

Merkwürdig ist außerdem dass die "Program Running" Rückmeldung der IDE 
auch fehlt und trotzdem funktioniert die Kommunikation teilweise.

Die IDE ist Atmel Studio mit vMicro Plugin.

Irgendwo im Netz bin ich mal über nen Post gestolpert nachdem das ein FW 
Fehler des SIM800L Chips sein soll.
Kann das wer bestätigen? Wenn ja gibts ne bessere Alternative?

Gruß
Eddie

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zwar kann das Labornetzteil bis zu 2A liefern, aber wie ist es 
angeschlossen? Das Ding kann schnelle Lastspitzen produzieren, die z.B. 
bei einem halben Meter Kabel schon zu störenden Spannungseinbrüchen 
führen können.

Hast Du einen ausreichenden Kondensator unmittelbar am SIM800L 
untergebracht?

von H.p. S. (hps)


Lesenswert?

Ich hatte ähnliche Probleme mit einem SIM800L. AT-Kommandos gingen, 
SMS-Senden ging nicht.
Habe mir daraufhin ein SIM800C(!) zugelegt ... funktionierte praktisch 
auf Anhieb.
Es gibt auch einen anderen Thread hier, der die Eignung des SIM800L für 
Deutschland (Europa?) in Frage stellt.

VG HPS

von A. H. (dernetteeddie1978)


Lesenswert?

Rufus Τ. F. schrieb:
> Zwar kann das Labornetzteil bis zu 2A liefern, aber wie ist es
> angeschlossen? Das Ding kann schnelle Lastspitzen produzieren, die z.B.
> bei einem halben Meter Kabel schon zu störenden Spannungseinbrüchen
> führen können.
>
> Hast Du einen ausreichenden Kondensator unmittelbar am SIM800L
> untergebracht?

Hi,

danke. Den Kondensator hab ich nicht, aber das Netzteil zeigt auch den 
Stromfluss an. Der liegt bei max. 100mA. Das sind aber natürlich nur 
Durchschnittswerte.

Welche Größenordnung bräuchte ich da?

LG

von A. H. (dernetteeddie1978)


Lesenswert?

H.p. S. schrieb:
> Es gibt auch einen anderen Thread hier, der die Eignung des SIM800L für
> Deutschland (Europa?) in Frage stellt.

Ja, ich hatte auch schon mal so etwas gesehen. Aber die AT Kommandos 
gehen ja auch nur teilweise.

Hast du was zum Level shiften dazwischen geschaltet? Welches Board hast 
du da genau? Wenn gar nix mehr geht hole ich mir halt das 800C für paar 
Euros auch noch.

LG

von H.p. S. (hps)


Lesenswert?

Hallo,
kein Level-Shifter dazwischen ... das Board über E-Bucht vom Chinesen 
(5,70 Euronen)...
Du siehst auch am Blinken, ob es sich überhaupt anmelden kann: ca. 1Hz, 
wenn nicht, ca. 3Hz, wenn es geklappt hat...
Gruss HPS

von H.p. S. (hps)


Lesenswert?

muss natürlich 0,3Hz statt 3Hz heißen, also sehr langsames Blinken...
Gruss HPS

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. H. schrieb:
> aber das Netzteil zeigt auch den Stromfluss an. Der liegt bei max.
> 100mA. Das sind aber natürlich nur Durchschnittswerte.

Allerdings. Denk einfach mal daran, daß das Ding eine Sendeleistung von 
2 Watt hat. Das muss irgendwo herkommen.

> Welche Größenordnung bräuchte ich da?

Sieh Dir mal im "Hardware Design Guide" 
(http://wiki.seeedstudio.com/images/4/46/SIM800L_Hardware_Design_V1.00.pdf)

den Abschnitt 4.1 "Power Supply" (ab Seite 21) an.

von A. H. (dernetteeddie1978)


Lesenswert?

So, also den 100µF hab ich num mit dran, die anderenm beiden hab ich 
nicht da. Gibt aber keine Verbesserung.

Einbuchen ins Netz tut er sich schon. Dauert ne Weile aber dan fängt er 
an im 3 Sek. Takt zu blinken.

Kommandos gehen immer noch nicht einwandfrei.
@HPS: Welche Library hast du benutzt?

LG

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. H. schrieb:
> Gibt aber keine Verbesserung.

Und wie sieht die Verdrahtung aus? Ist das ein Aufbau auf einem 
Frickelboard?

von A. H. (dernetteeddie1978)


Lesenswert?

Jepp, ist n Breadboard.

Auf dem SIM800L PCB sind auch schon teile Drauf. Eins istn 470µF, die 
LED mit 470R und zwei Teile ohne Bezeichnung, die sehen aber auch nach 
Kondensatoren aus.

LG

: Bearbeitet durch User
von A. H. (dernetteeddie1978)


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nun, das sind zwar die im "Designer Manual" erwähnten Kondensatoren, 
aber die Verdrahtung auf einem Frickelboard ist halt eben genau das: 
Frickelig.

Ersetze die durch möglichst kurze Leitungen, die direkt mit dem Netzteil 
verbunden sind, und wo möglichst wenige Steckkontakte im Spiel sind.

Die schnell pulsierende Stromaufnahme des Moduls ist ein 
Herausforderung.

von A. H. (dernetteeddie1978)


Lesenswert?

Jepp, hab hier auch grad nen anderen Thred gefunden wo das genau das 
Problem war.

Habs mit dem Oskar mal nachgemessen und tatsächlich beim Einbuchen ins 
Netz sieht man gelegentliche Spannungseinbrüche um ca 0,5 bis 1 Volt.
Eigentlich sollte der ganze Arduino Kram doch Plug n Play sein. Daher 
hatte ich an sowas gar nicht gedacht.

@Hps: Wie hadt du es mit dem 800c gemacht? Ist der auch so empfindlich?

Lg

von H.p. S. (hps)


Lesenswert?

Hallo,
da meine Steuerung (Strom-)ausfallsicher sein soll, habe ich eh' einen 
6V Gel-Akku, 4,5Ah (neu ca. 15,-) als Speisung. Das SIM800C habe ich da 
direkt über 2 Dioden (eine normale (0,7V) und eine Schootky (0,3V)) 
angeschlossen, ergibt also 5V (mein SIM800C hat eine 5V-Speisung).
Da ging es mit dem 800C problemlos, das 800L konnte sich nicht einwählen 
(kann also nicht das Stromproblem sein) ...
Sicher geht es auch über eine andere Batterie-/Stromversorgung.

Beim Initiieren des 800C habe ich folgende AT-Befehle verwendet:
- Setze Baud-Rate auf 19200
- Setze den Textmode auf "GSM"
- setze den Character-Mode für SMS
- setze das CSCA (SMS Center), bei mir Telekom
- sende SMS ersten Teil (Empf. Nr.)
- warte, bis 0x20 (Blank) zurückkommt
- Sende SMS-Nachrichten-Text
- Sende 0x1A (Fertig-Zeichen)

Das hat funktioniert...

VG HPS

von Jim Beam (Gast)


Lesenswert?

Noch etwas Senf:

SIM800C, SIM800L, SIM800D, SIM900

Habe ich stabil + zuverlässig in div. Projekten am laufen.
SMS+Voice, bisher keine bekannten Ausfälle.
Popel-Billig-SIMCARD von NettoKOM, Prepaid, PIN-Input/PIN-Change/PUK
Guthabenabfrage per AT+CUSD=1,"*100#",geht alles.

> (kann also nicht das Stromproblem sein) ...
Doch das kann.
Vor wenigen Tagen erst ein Thread, bei dem es daran "GARANTIERT NICHT" 
liegen konnte, der TO praktisch unbelehrbar war, und wo es dann 
zu-Kreuze-kriech GENAU-DARAN lag...

Die Module versuchen erstmal pausenlos eine Verbindung zum Netz zu 
bekommen, es kommt also zu unkalkulierbaren Peaks in der Versorgung. 
Solange dies nicht zuverlässig geklärt ist, sind alle anderen 
Überlegungen sinnlos, da bei intern abgekackten Modulen auch keine 
sinnvolle RS232-Kommunikation gewährleistet ist.

Inkompatibilitäten lokaler Firmware zeigt sich sicher NICHT daran, dass 
es "manchmal geht" und manchmal nicht.

Solange das Thema der Versorgung sowie der Begriff LowESR nicht im Kern 
begriffen ist, machen weitere Hinweise keinen Sinn.
Das "105°-Aufdruck = LowESR" Märchen hilft da wenig, auch MUSS ein 
LowESR-Elko unmittelbar (=wenige Millimeter) an den VersorgungsPins des 
SIM-Moduls sitzen, ergänzt durch weitere C.

ALL das geht auch EXAKT und UNZWEIDEUTIG aus der Hardware-Spec. der 
Module hervor, was in China auch nicht jeder begriffen hat: Auf deren 
Fertig-Modulen habe ich teils Elkos angetroffen, die nicht-im-Traum 
funktionieren können, Austausch hat da Wunder bewirkt.

Seither layoute ich PCB mit SIM-Modulen selbst, einseitig popelig, würde 
bei einigen Pseudo-Experten hier Shitstorms auslösen...
NUR: Klappt (bisher) immer und zuverlässig. (Was aber für Shitstorms ja 
keine Rolle spielt)

Auch das (kleinere) SIM900 ist händisch einlötbar, PWR, RX, TX sind (bei 
mir) die einzigen Leitungen zum AVR, NETIO, PWR, RING habe ich immer 
auch als LED auf der PCB, direkt an den SIM-Outputs über 5K6, den 
PWR/RESET-Kram per Transistor kann man sich m.E. sparen, das kann ein 
AVR auch ohne Transistor.

Geht an Labor-NT und auch mit einer 18650er Zelle über 
China-Powerpack-USB-Platine MIT LowESR-Elko+Ker+Tantal direkt an den Vcc 
Pins des Moduls.
OHNE LowESR-Elko geht es NIE zuverlässig.

Aber das habe ich alles nur geträumt, weil es ja nicht sein kann:
> (kann also nicht das Stromproblem sein) ...

von Stefan F. (Gast)


Lesenswert?

Wir hatten das gleiche Thema neulich auch bei einem WLAN Modul. Auch da 
musste der betroffene zur Kenntnis nehmen, dass Steckbretter nicht zur 
Stromversorgung taugen.

von A. H. (dernetteeddie1978)


Lesenswert?

Naja, dann werd ich heute Abend mal bei Onkel Conrad vorbeischauen und 
die Kondensatoren besorgen.
Werd das Modul mal auf ne Lochrasterplatine löten und die C`s dann 
direkt neben das Modul. Dann werd ich Kabel anlöten und mit verlöteten 
Bananensteckern ins Netzteil stecken.
Mal schauen wieweit das weiter hilft.

Was meint ihr zu den Transistoren für das Levelshifting? Hab grad 
normale BC547C drin. Das Datenblatt gibt ja Typen an, die sind aber SMD 
und bei meiner Filiale nicht verfügbar.

Aber die BC547 haben ja je nach Stromverstärkung ne Grenzfrequenz zw. 
375-750kHz. Das sollte f. ne serielle Übertragung doch reichen, oder?

LG

: Bearbeitet durch User
von Jim Beam (Gast)


Lesenswert?

Also, ich pers. mache bei meinen SIM800/900 Modulen überhaupt kein 
explizites Level-Shifting, nur ein Clipping.

SIM läuft an 4V
AVR läuft an 5V

AVR-RX geht direkt an SIM-TX
AVR-TX geht über Widerstand an SIM-RX und von dort per 3,3VZenerdiode an 
GND

Läuft schon ewig tadelllos @19200Baud, mehr habe ich nie getestet, ich 
wüsste auch keinen Grund warum ich die paar CMD/Daten-Bytes schneller 
senden sollte.

von Stefan F. (Gast)


Lesenswert?

Mindestens bis 115200 Baud kann man einfach Spannungsteiler verwenden 
mit Widerständen im Bereich zwischen 1 und 3 kΩ.

von A. H. (dernetteeddie1978)


Lesenswert?

Hi Leute,

also vielen Dank an alle. Hab die Spannungsversorgung nun so aufgebaut 
wie im Manual beschrieben und - simsalabim - die SMS ist rausgegangen.

Yieppiieee :)

LG

von A. H. (dernetteeddie1978)


Lesenswert?

Hm, ok ganz gehts doch noch nicht. Die SMS gehen raus, aber die 
Kommunikation scheint nicht sauber zu sein. Ich kann über den seriellen 
Monitor noch nicht kommunizieren.

Lg

von A. H. (dernetteeddie1978)


Lesenswert?

Ok, hier nochmal die Rückmeldung. Irgendwie gehts nun doch, ich glaub 
ich hab einfach nicht lange genug gewartet nach Eingabe der Befehle und 
zu schnell den nächsten gegeben. Ist grad etwas diffus.

Was auf jeden Fall nicht geht ist das SMS-Read Beispiel aus der Library.

Über den oben angehängten Code jedoch kann ich die SMS per seriellem 
Monitor auslesen.

Im Netz hab ich mal was gelesen dass die Nutzung von Strings nicht 
richtig geht. Daher ließt der obige Code das in eine char Variable um.

Damit gehts deutlich besser, die erste Version des Codes war nämlich 
auch mit Strings gemacht und hat gar nicht funktioniert.

Naja ist etwas schwammig. Bin da auch nicht tief genug drin ums wirklich 
zu verstehen.

LG

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.