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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.