pulseIn(pin, HIGH) liefert 0
|
14.01.2021, 12:53
Beitrag #1
|
|||
|
|||
pulseIn(pin, HIGH) liefert 0
Ich hätte da gerne mal wieder etwas Unterstützung...
Ich lese mit einem ESP8285 in einer Steckdose einen Strommesschip vom Typ BL-0937 aus. Der gibt Strom und Spannung in Form einer Pulslänge an einem Pin aus. Laut Datenblatt (PDF) wird dabei immer ein HIGH-Puls von 38µs und darauf folgend ein LOW-Puls variabler Länge gesendet. Aus der Summe ergibt sich eine Frequenz (1/Zeit), die dann Volt oder Ampere angibt. Ich lese bisher die LOW-Zeit mit 'pulseIn(CF_PIN, LOW, 1000000);', addiere die 38 darauf und arbeite damit weiter. Das klappt eigentlich, nur sind mir dabei Differenzen zwischen verschiedenen BL-0937 aufgefallen, zum Beispiel liegt die Spannung an der selben Leitung bei einem Chip bei 230V, bei einem anderen aber bei 217V, der dritte zeigt 222V usw. Jetzt wollte ich mal messen, ob der HIGH-Puls wirklich bei allen 38µs lang ist und habe mir diese Funktion geschrieben: Code: unsigned long int getHighPulseLength() { Bei 230V ist die Pulslänge laut Specs ca. 690µs inkl. der 38µs. Wenn ich also sogar bis zu 1000000µs beim pulseIn() warte, müsste mindestens ein Puls zu finden sein. Da die Leserei des LOW-Pulses im Prinzip ja funktioniert, MUSS ein HIGH-Puls vorbeigekommen sein, sonst könnte man ihn ja gar nicht bestimmen. Verstehe ich pulseIn() vielleicht nicht richtig? |
|||
14.01.2021, 14:40
Beitrag #2
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0
Bin mir nicht ganz sicher aber vermute, dass du den return-Wert casten muss.
|
|||
14.01.2021, 14:54
Beitrag #3
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0
(14.01.2021 14:40)biologist schrieb: Bin mir nicht ganz sicher aber vermute, dass du den return-Wert casten muss. Bringt leider nichts, habe ich gerade versucht. Ich habe auch mal eine Variante mit Zählen der HIGH-Impulse in einer vogegebenen Zeit versucht, á la Code: volatile unsigned long int tick; |
|||
14.01.2021, 15:10
(Dieser Beitrag wurde zuletzt bearbeitet: 14.01.2021 15:11 von Tommy56.)
Beitrag #4
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0
Die ISR muss in einem speziellen Speicherbereich liegen.
Zumindest für den 8285 kann ich nur vermuten, dass der wie der 8286 angesprochen wird. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
14.01.2021, 15:29
Beitrag #5
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0
(14.01.2021 15:10)Tommy56 schrieb: Die ISR muss in einem speziellen Speicherbereich liegen. Danke! Das lässt zumindest den Interrupt ohne Absturz laufen. Will mal sehen, wohin ich damit komme... |
|||
14.01.2021, 16:04
Beitrag #6
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0
Ich bekomme jetzt die gleichen gestreuten Ergebnisse wie vorher mit pulseIn(), was auf einen Grund in der Beschaltung des BL0937 hindeuten würde. Da sind Spannungsteiler vorgeschaltet, für die Spannungsmessung z.B. (2 * 1MOhm) / 1kOhm. Ich vermute mal, dass die Chinaware, die ich da vor mir habe, keinen besonderen Wert auf Genauigkeit der verwendeten Widerstände legt und es deshalb da Varianz gibt. Isso.
|
|||
14.01.2021, 16:34
(Dieser Beitrag wurde zuletzt bearbeitet: 14.01.2021 16:34 von Tommy56.)
Beitrag #7
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0
Wenn es nur das Widerstandsverhältnis ist, dann ist der Fehler konstant und Du kannst ihn exemplarabhängig rausrechnen.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
14.01.2021, 16:37
Beitrag #8
|
|||
|
|||
RE: pulseIn(pin, HIGH) liefert 0 | |||
|
|
Möglicherweise verwandte Themen... | |||||
Thema: | Verfasser | Antworten: | Ansichten: | Letzter Beitrag | |
Wakeup bei Änderung von LOW zu HIGH? | Jakohoho | 2 | 785 |
14.04.2020 17:29 Letzter Beitrag: Tommy56 |
|
Verständnisproblem - PIN auf HIGH setzen | Gerdchen03 | 5 | 1.363 |
29.01.2020 15:16 Letzter Beitrag: Gerdchen03 |
|
LED=LOW: Led geht an, LED=HIGH: Led geht aus? Warum?? | gutschy | 13 | 3.377 |
10.07.2019 14:24 Letzter Beitrag: Tommy56 |
|
[Info] GPIO-Pins sind HIGH bei Boot und Sketch-Upload | Tommy56 | 0 | 1.773 |
27.06.2017 21:09 Letzter Beitrag: Tommy56 |
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste