Hallo,
ich würde gerne die S0-Schnittstelle meines Stromzählers (ein Eltako)
mit einem ESP32 (Sparkfun ESP32Thing) auslesen.
Der Code ist denkbar einfach:
1 | #include <Arduino.h>
|
2 |
|
3 | constexpr uint8_t InterruptPin = 25;
|
4 |
|
5 | uint32_t TotalNumEdges = 0;
|
6 |
|
7 |
|
8 | // S0 interrupt handler
|
9 | void IRAM_ATTR ImpulseDetected()
|
10 | {
|
11 | TotalNumEdges++;
|
12 | }
|
13 |
|
14 | // Arduino setup function (called once on startup)
|
15 | void setup()
|
16 | {
|
17 | Serial.begin(115200);
|
18 |
|
19 | // Attach interrupt to pin
|
20 | pinMode(InterruptPin, INPUT_PULLDOWN);
|
21 | attachInterrupt(InterruptPin, ImpulseDetected, RISING);
|
22 | }
|
23 |
|
24 | // Arduino loop function (called repeatedly after startup)
|
25 | void loop()
|
26 | {
|
27 | delay(3000);
|
28 | Serial.println(TotalNumEdges);
|
29 | }
|
Hardwareseitig ist das ganze auch sehr simpel: ich versorge S0+ mit den
5V vom ESP32-Board (kommt vom USB). S0- hängt am Eingangspin des ESP und
ist mit einem internen Pulldown versehen (siehe Code).
Leider zählt der ESP zu viele Pulse, d.h. pro Puls springt der Zähler um
1, 2 oder auch 3 nach oben.
Mein erster Gedanke war natürlich, dass der Puls nicht sauber ist. Daher
habe ich zuerst meinen Logic Analyzer mit dran gehängt, danach noch mein
Oszi. Beide sind sich darin einig, dass der Puls bildhübsch ist. Da
schwingt nichts, sowohl die steigende als auch die fallende Flanke sehen
sehr ordentlich aus.
Also sollte der ESP eigentlich nicht mehrere Flanken pro Puls sehen
können...
Hat noch Jemand Ideen/Erfahrungswerte? Woran könnte das liegen?
Danke!