Netzfrequenz messen (Hilfe)

OP #5154260
Lesenswert?

Hi,

mein Programm ist soweit fertig ich habe leider nur ein kleines Problem.
Die Zahl bzw. die Frequenz, die angezeigt wird startet bei ca 357,00 und 
fällt dann auf die 7,0000
und wird zurück auf die 357 gesetzt.( Je kleiner die Zahl desto 
langsamer wirds.)

Hier das Programm:

---------------------------------------------------------------------
1
int freq = 7;               //Frequenz Eingang (D4)
2
int a = 0;
3
int b = 0;
4
int FQv = 0;
5
float Frequenz = 0.000;
6
float Zeit = 0.000;
7
unsigned int START_Messung = 0;
8
unsigned int STOP_Messung = 0;
9

10
#include <LiquidCrystal.h>
11
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
12

13
void setup() {
14
  pinMode(freq, INPUT);
15
  lcd.begin(20, 2);
16
}
17

18

19
void loop()
20
{
21
  FQv = digitalRead (freq);
22
  if ((FQv == HIGH) && (a == 0))
23
  {
24
    START_Messung = millis();
25
    a = 1;
26
  }
27

28
  FQv = digitalRead (freq);
29
  if ((FQv == HIGH) && (a == 1) && (b == 0))
30
  {
31
    STOP_Messung = millis();
32
    b = 1;
33
  }
34

35
  if (( a == 1) && (b == 1))
36
  {
37
    Zeit = STOP_Messung;
38
    Zeit = Zeit / 1000;
39
    Frequenz = 1.0 / Zeit;
40
    Frequenz = Frequenz * 500;
41
    lcd.clear();
42
    lcd.begin(20, 2);
43
    lcd.setCursor(14, 0);
44
    lcd.println(Frequenz, 4);
45
    delay(200);
46
    a = 0;
47
    b = 0;
48
  }
49
}
---------------------------------------------------------------------

Wäre super wenn ihr mir helfen könntet.
Gast #5154272
Lesenswert?

Hallo Erik,

ist das ein Arduino Framework Programm?

Warum wird da mit so vielen Int Variablen gearbeitet?

Dann denke ich, dass Du mit den Variable a und b einen Zustandsautomaten 
aufbauen möchtest, aber dafür nutzt man i.a. eine Switch - Case 
Konstruktion.

Z.B.
1) Messung Starten --> 2)
2) Frequenzmessen - Stopp Zustand erreicht ? --> 3)
3) Messergebnis berechnen und anzeigen. --> 1⁾

Sollte das so bei Dir aussehen ?
Gast #5154412
Lesenswert?

Danke für die schnellen Antworten.
Ja habe das ausrechnen der Differenz vergessen.
Sieht jetzt so aus:
1
Zeit = STOP_Messung - START_Messung;
Jetzt wird bei mir "inf" angezeigt.


>Wir haben auch ein Problem. Was hast Du denn für eine Hardware?
mfg klaus

Ich nutze einen Arduino Nano v3.0 mit dem Atmega328 chip
#5154460
Lesenswert?

Patrick J. schrieb:
> Das 'inf' erschließt sich mir nicht, auf dem Display?
> Von wo soll dieses 'inf' kommen?

inf kommt daher,
dass 1/0=unendlich (infinity) ist (float).
Und das kommt daher, dass start und stopp den gleichen wert haben.
nachdem start gemessen wurde wird a=1 und damit wird auch gleich darauf 
(in der gleichen millisekunde) die stopp zeit genommen.
vermutlich soll auf FQv==LOW gewartet werden um die stopp zeit zu 
nehmen.

du solltest auch nach der ausgabe aufs display noch darauf warten dass 
der input pin low ist. sonst misst du eine zu kurze periode (da der pin 
zum zeitpunkt der nächsten start messung bereits eine weile high gewesen 
sein kann).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren