Adafruit Feather Fona bleibt nicht "aus"

Heyho!
ich habe die Frage schon im Adafruit Forum gestellt aber irgendwie... bekomme ich keine richtige antwort.

Ich habe einen Feather Fona der über LiPo läuft und einen TLP5111 der alle 2 Stunden den ENABLE PIN wieder freigibt und der Feather erwacht. Dieser sendet dann ein paar Daten und das funktioniert auch ganz wunderbar. Danach schalte ich das SIM-Modul aus und setze den DONE Pin des TLP5111, so damit er den Feather wieder ausschaltet. An sich ja keine große Sache, allerdings hat der Feather FONA eine besonderheit: Der ENABLE PIN schaltet nur den Feather aus, nicht das SIM Modul. Dazu muss man den Key Pin (nachdem man das Pad auf der Rückseite durschnitten hat) Kurz auf HIGH setzten und dann für 2 Sekunden auf LOW.

Gesagt getan, SIM Modul geht aus, setze DONE Pin und der Feather geht aus. 2 Sekunden später started das Sim Modul wieder, obwohl alles andere aus ist.

Gibt jetzt 2 Möglichkeiten:

  1. ich mache was falsch
  2. beim ausgehen findet ein kleiner peak statt und dieser schaltet das SIM Modul wieder ein. Wie könnte man das abfangen? Oder wie würde man eine Schaltung bauen, die einfach den KEYPIN immer auf HIGH setzt, außer es kommt ein Signal von einem anderen Pin?

An sich ist das Projekt fertig, das ist das einzige was noch nicht funktioniert.

Danke schon einmal für die Hilfe :slight_smile:

         +
       R1 5K
        |_|
         |
-Pin-----+
         |
         \
          |
          +----Signal
          |
         /
         |
         |
        GND

Da wo das Signal rein geht ist Basis eines Transistor. Basiswiderstand nicht vergessen :wink:

Vielen Dank für deine Antwort!
Das hab ich schon probiert, ich hab es auch schon mit Pulldown widerstand versucht, aber egal was ich mache, das SIM Modul springt nach einer Weile wieder an. Ich bin da ein wenig ratlos.

Ich hab mal bei learn adafruit vorbei geschaut. So richtig schlau geworden bin ich nicht, ob das nur ein AUS-Impuls sein muss, oder ob der verlangt, das der ständig LOW ist.

Damit muss die Schaltung dann einen Widerstand vom KeyPin nach GND. So 2Kohm vielleicht, damit der stabil aus bleibt.

Dann an den KeyPin den EnOUT des TLP.
Der ist HIGH-Aktiv.
Nicht vergessen, das beide GND miteinander verbunden sein müssen.

Dann noch ne Überlegung, wenn Das Teil eine HIGH-LOW-Flanke mit anschliessendem mindestens xx Sekunden LOW braucht,, wie wird der denn regulär aufgeweckt?
Wenn Dir da was EMV reinspuckt, bist Du natürlich am suchen.
Dazu könnte man versuchen gleichzeitig EN auf GND zu legen, der macht den Spannungsregler aus. Damit wäre zumindest der Atmega erstmal raus aus dem Rennen...

Wow, wirklich vielen Dank für deine Mühe.
Das mit dem 2k Widerstand hab ich auch gerade ausprobiert, dazu hab ich am Ende des Codes auf Key auf High geschalten und nach dem DONE fällt er ja dann wieder auf low und siehe da er geht aus und bleibt aus .... für so 20 Sekunden -.- Dann springt das SIM Modul einfach wieder an, ohne ersichtlichen Grund.

Normal haben sie den KEY Pin immer auf Low. Spricht also doch eher für einen PullUP.

Der ist tatsächlich aus, das hab ich überprüft.

Wenn ich das ganze Händisch ausführe: also dne KEY Pin nicht über einen anderen Pin steuere, sondern halt einfach nach dem mein Code abgelaufen ist, den Key Pin kurz auf VDD halte und dann wieder für 2 Sekunden auf LOW und dann das kabel wegnehme => bleibt er aus.

Das ist WIRKLICH komisches verhalten.

Hier mal mein Code.
der TPL ist ganz normal verbunden => Enable auf Enable. Pin 10 auf DONE Pin.
A4(Pin22) auf Key Pin.
Door Pin ist verbunden mit dem DelayPin des TPLs damit der Mikrokontroller bescheid weiß, das nicht die Zeit ihn aufgeweckt hat sondern das öffnen der Tür. (ist noch ein magnetschalter (NC) dazwischen geschaltet auf HIGH, ist aber im Moment nicht in benutzung)

#include "Adafruit_FONA.h"
#include <ArduinoJson.h>

#define FONA_RX 9
#define FONA_TX 8
#define FONA_RST 4
#define FONA_RI 7

// this is a large buffer for replies
char replybuffer[255];

#include <SoftwareSerial.h>
SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);
SoftwareSerial *fonaSerial = &fonaSS;

Adafruit_FONA fona = Adafruit_FONA(FONA_RST);

uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0);

uint8_t type;

char url[80] = "http://xxxxxx/sensor";
StaticJsonDocument<200> doc;

int donePin = 10;
int doorPin = 11;
int keyPin = 22;
int door = 0;

void shutdown()
{
    digitalWrite(donePin, HIGH);
}

void setup()
{
    pinMode(donePin, OUTPUT);
    pinMode(doorPin, INPUT);
    pinMode(keyPin, OUTPUT);
    pinMode(13, OUTPUT);

    digitalWrite(keyPin, LOW);
    door = digitalRead(doorPin);
    digitalWrite(donePin, LOW);
    digitalWrite(13, HIGH);
    // while (!Serial)
    //     ;

    Serial.begin(115200);
    Serial.println(F("FONA basic test"));
    Serial.println(F("Initializing....(May take 3 seconds)"));

    fonaSerial->begin(4800);
    if (!fona.begin(*fonaSerial))
    {
        Serial.println(F("Couldn't find FONA"));
        shutdown();
        while (1)
            ;
    }
    Serial.println(F("FONA is OK"));
    digitalWrite(13, LOW);

    fona.setGPRSNetworkSettings(F("internet.eplus.de"), F("blau"), F("blau"));

    delay(10000);
    digitalWrite(13, HIGH);
    // turn GPRS on
    if (!fona.enableGPRS(true))
        Serial.println(F("Failed to turn on"));

    Serial.println(F("Setup finished"));
}

void post()
{
    delay(5000);
    //get battery
    uint16_t vbat;
    uint16_t per;
    fona.getBattVoltage(&vbat);
    fona.getBattPercent(&per);

    // Create Json
    char temp[200];
    doc["door"] = door;
    doc["volt"] = vbat;
    doc["per"] = per;
    serializeJson(doc, temp);
    Serial.print("JSON: ");
    Serial.println(temp);

    // Post data to website
    uint16_t statuscode;
    int16_t length;

    Serial.println(F("****"));
    if (!fona.HTTP_POST_start(url, F("application/json"), (uint8_t *)temp, strlen(temp), &statuscode, (uint16_t *)&length))
    {
        Serial.println("Failed!");
        Serial.print("Statuscode: ");
        Serial.println(statuscode);
        return;
    }
    while (length > 0)
    {
        while (fona.available())
        {
            char c = fona.read();

            Serial.write(c);
            length--;
            if (!length)
                break;
        }
    }
    Serial.println(F("\n****"));
    fona.HTTP_POST_end();
    Serial.println(F("send DONE"));

    if (!fona.enableGPRS(false))
    {
        Serial.println(F("Failed to turn GSM off"));
    }
    else
    {
        Serial.println(F("GSM turned off"));
    }
}

void loop()
{
    while (Serial.available())
        Serial.read();
    post();

    digitalWrite(keyPin, HIGH);
    delay(500);
    digitalWrite(keyPin, LOW);
    delay(2000);

    shutdown();

    while (1)
        ;
}