PinMode Wann?

Hallo Leute,
folgendes Problem:
Ich habe eine Klingelschaltung mit dem ESP8266 gebaut.
Der klingt sich in mein WLAN ein und klingelt die Telefone an.
Das ist das Programm von J.Liegner aus 2018.
Eigentlich funktioniert das auch gut.
Es gibt nur einen "Haken", wo ich nicht weiter weiss.

Die Schaltung wird über einen Reed-Relais mit "Selbsthaltung" aus dem ESP gesteuert.
Läuft also so:
1.Klingeltaster wird gedrückt,
2. Das reicht für kurze Zeit zum Start des ESP..
3. Das Programm läuft an und hält das Reed Relais.
4. Jetzt "klingelt" das Programm meine Telefone an.
5. Nach einer Zeit (bei mir 2 Minuten) fällt nach Inaktivität das Relais ab.

Jetzt zum Problem:
Es werden etwa 500 Zeilen mit Definitionen des Programms etc. Verbracht, bis das eigentliche Setup kommt, wo ich den Ausgang sinnvoll setzen kann (die Selbsthaltung).
Das ist oft zu lang, wenn nur kurz der Klingelknopf gedrückt wird.
Wenn ich ganz vorne einen Loop (z.b. Start) einfüge wo ich das mache, fällt das Relais beim Verlassen des loops sofort ab ;(

Hat jemand eine Idee?
LG Manfred

ManfredStieneker:
Es werden etwa 500 Zeilen mit Definitionen des Programms etc. Verbracht, bis das eigentliche Setup kommt, wo ich den Ausgang sinnvoll setzen kann (die Selbsthaltung).
Das ist oft zu lang, wenn nur kurz der Klingelknopf gedrückt wird.
Wenn ich ganz vorne einen Loop (z.b. Start) einfüge wo ich das mache, fällt das Relais beim Verlassen des loops sofort ab ;(

Diese 500 Zeilen (Sind das wirklich so viele?) werden nicht vom Controller abgearbeitet sondern sind vereinfacht gesagt nur Beschreibungen für den Compiler, damit der weiß, welche Libraries er einbinden und wie er das eigentliche Programm compilieren soll.

Erst das, was in Setup und Loop steht, wird wirklich später vom Controller abgearbeitet.

Setup wird genau einmal abgearbeitet und Loop wird immer wieder von oben nach unten abgearbeitet und nie verlassen

Frank501:
Erst das, was in Setup und Loop steht, wird wirklich später vom Controller abgearbeitet.

Das ist so nicht richtig. Der gesamte Controller muss nach Reset erstmal eingerichtet werden, HW muss initiiert werden. Auch die Definitionen, die vor dem Setup stehen führen u.U. zu ausführbarem Code. Variablen werden initiiert, bein Instanziieren von Objekten wird der Konstruktor durchlaufen. Erst danach wird setup() gestartet.
500 Zeilen erscheinen mir da auch ziemlich heftig. Zeig doch mal, was da alles gemacht wird.

@Manfred
Du solltest deine Schaltung überdenken.
Der ESP braucht eine gewisse Zeit zum booten.
Wenn dir das zu lange ist, lass ihn ständig laufen und schalte nur beim Klingen das Wlan an.

Könntest Du uns bitte den Schaltplan zeigen?

Re: PinMode Wann?

Sobald als möglich, auf alle Fälle vor digitalWrite(relaispin, Xxx);
Grüße Uwe

Hi

uwefed:
Sobald als möglich, auf alle Fälle vor digitalWrite(relaispin, Xxx);
Grüße Uwe

Einspruch :wink:
Wenn man weiß, was man macht - die umgekehrte Reihenfolge kann von Vorteil sein.
Beispiel:
Low-Aktive Relais (die 8-fach Relais in blau)
Wenn Du hier erst per pinMode auf Ausgang schaltest, und die Zeile darunter den Ausgang auf HIGH (=Aus), 'zucken' die Relais zumindest.
Wenn Du zuerst den Ausgang auf HIGH schaltest (digitalWrite), wird 'nur' der PullUP zugeschaltet (zumindest bei den AVR basierten Arduino).
Solange der Pin ein INPUT ist, ist's egal, ob Dieser auf HIGH gezogen wird oder offen ist - Es ist nihct LOW und damit bleibt das Relais aus.
Wenn Du nun auf OUTPUT umschaltest, wird der Pin aktiv auf HIGH gesetzt - zuvor per mehreren 10kΩ nach Vcc gezogen, jetzt niederohmig mit Vcc verbunden.
Für das LowAktive Relais macht Das keinen Unterschied - Beides ist nicht LOW, Es zieht NICHT an - es Zuckt nicht!

Aber im Groben hast Du Recht: Vor der Benutzung wird der Pin in der Regel auf IN/OUT/IN_PULLUP gestellt und danach, normaler weise, nicht mehr verändert.
Ausnahmen können hier Taster darstellen, Die in einer Matrix angeordnet sind und man sich so 'durchkämpfen' muß, welche Strompfade offen sind und daraus schließen, welche Taster nun gedrückt sind.
Das kann man aber auch einem PortExpander übergeben - zumindest die 4x4er Folien-Tastaturen mit 8 Anschlüssen gehen an einem 8er PortExpander.

So, genug der heutigen Lesung :wink:

MfG

Edit
Eigentlich sollte man sämtliche Pins, Die man NICHT benutzt, entweder auf INPUT_PULLUP oder auf OUTPUT setzen - und Das möglichst früh.
Dadurch hat dieser Pin einen sicheren Pegel und empfängt keine Störungen - auf Die die innere Beschaltung des Pin heftig reagieren kann.
Pins, Die irgendwo angeschlossen sind, werden von dieser Beschaltung 'auf ordentlichem Pegel' gehalten oder sind eben Ausgänge.

Einspruch abgewiesen.
Meine Antwort bezog sich nicht allgemein auf jede erdenkliche und mögliche Situation sondern bezogen auf die beschriebene Situation des TO.

Zu Deiner allgeinen Abhandlung stimme ich zu und ergänze sie:
Beim I2C Bus wird der Pin dauernd zwischen Eingang-Pullup und Ausgang LOW hin und hergeschaltet (Eingang mit Pullup Widerstand und Open Collektor Ausgang) also bei jedem Statusänderung eine pinMode-Änderung.
Grüße Uwe

Welches Problem möchtest du gelöst haben?
Irgendwas mit einer Zeit. Nur wann, ab welchen Zeitpunkt, bei welcher Aktion ...

Doc_Arduino:
Wo möchtest du dein Problem gelöst haben?

Bestimmt da, wo er den kompletten, funktionierenden Sketch nur abtippen oden kopieren kann.

Mit antworten oder Rückmeldungen hat er es nicht so.

Schade, sonst könnten wir ihm helfen.

Eigentlich sollte man sämtliche Pins, Die man NICHT benutzt, entweder auf INPUT_PULLUP oder auf OUTPUT setzen - und Das möglichst früh.
Dadurch hat dieser Pin einen sicheren Pegel und empfängt keine Störungen - auf Die die innere Beschaltung des Pin heftig reagieren kann.

Das stimmt so für neue Mikrocontroller nicht mehr generell. Immer im Datenblatt nachschauen. Einfach "unconnected" suchen.

z.B. SAMD21

42.6 Unused or Unconnected Pins
For unused pins, the default state of the pins for the will provide the lowest current leakage. There is no need to do any configuration of the unused pins in order to lower the power consumption.

HotSystems:
Bestimmt da, wo er den kompletten, funktionierenden Sketch nur abtippen oden kopieren kann.
Mit antworten oder Rückmeldungen hat er es nicht so.
Schade, sonst könnten wir ihm helfen.

Es sitzt nicht jeder den ganzen Tag vorm Internet zudem Wochenende ist. Ich empfehle dir auch etwas runterzufahren und nicht immer gleich nach 5min ohne Antwort wilde Vermutungen zu äußern. Wenn ein TO etwas möchte muss er zwangsweise antworten. Wenn er es nicht tut hat sich das sowieso erledigt.

Edit:
Text angepasst, weil sich "jemand" nicht zusammenreißen konnte und noch im anderen Forum unbedingt stänkern mußte. Was dir der TO getan?

Doc_Arduino:
Es sitzt nicht jeder den ganzen Tag vorm Internet zudem Wochenende ist. Ich empfehle dir auch etwas runterzufahren und nicht immer gleich nach 5min ohne Antwort wilde Vermutungen zu äußern. Wenn ein TO etwas möchte muss er zwangsweise antworten. Wenn er es nicht tut hat sich das sowieso erledigt.

Edit:
Text angepasst, weil sich "jemand" nicht zusammenreißen konnte und noch im anderen Forum unbedingt stänkern mußte. Was dir der TO getan?

Du solltest dich doch ein wenig zurück halten.
Was sollen deine Abschuldigungen hier ?

Wer hat denn den Link des Doppelpostings hier gepostet ?
Da tippe ich doch eher auf den !

Hallo,

auf Grund deines Textbaus ist das eindeutig. Wäre ich es gewesen würde ich mich hier wohl kaum dazu äußern. Mehr muss ich dazu nicht sagen. Den Rest spare ich mir.

Doc_Arduino:
auf Grund deines Textbaus ist das eindeutig. Wäre ich es gewesen würde ich mich hier wohl kaum dazu äußern. Mehr muss ich dazu nicht sagen. Den Rest spare ich mir.

Und das weißt du so genau ?
Echt....das grenzt schon massiv an eine Verleumdung.
Aber egal, ich muss mich dir nicht rechtfertigen.

Ich wundere mich nur, warum du den Link wieder entfernt hast, wo du doch so unschuldig bist.

Der Link zum Miktrkontroller.net war in Posting #8. Ich hatte mich schon gewundert, weil Doc_Arduino sonst nicht so sehr mit Crosspostingmeldungen in Erscheinung tritt.

Das er jetzt nicht mal mehr den Ar... in der Hose hat, um zu seinem Beitrag zu stehen, finde ich sehr bedauerlich. Ich hatte ihn als ehrlicher eingeschätzt.

Gruß Tommy

Hi

Jungs - seid doch bitte wieder lieb zueinander - hätte nun nicht erwartet, daß ein Cross-Post uns hier so aufwühlt …

MfG

Der Crosspost weniger, eher die Unehrlichkeit, diesen Hinweis zu Löschen.

Gruß Tommy

postmaster-ino:
Jungs - seid doch bitte wieder lieb zueinander - hätte nun nicht erwartet, daß ein Cross-Post uns hier so aufwühlt …

Wem sagst du das.

Anfeindungen und Verleumdungen gehören hier tatsächlich nicht her und finde ich äuserst widerlich.

... davon ab - wenn der TO nicht mehrfach ge-cross-postet hat, dann ist im Nachbar-Universum von Rumstänkern nicht mehr viel zu sehen - wenn doch, habe ich noch einen weiteren Post gefunden.
(man suche bei mikrocontroller.net nach dem Nick)

MfG