Show Posts
Pages: 1 [2] 3
16  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 25, 2013, 03:09:42 pm
Quote
Also erstmal zum Sketch: Der weist einige extrem merkwürdige Fehler auf.
Das ständige attachInterrupt in der loop hat rudirabbit bereits angesprochen.

Das "attachInterrupt(0,Interrupt,RISING);" habe ich im loop, weil ich ein Stück davor im loop ein "detachInterrupt(0);" eingebaut habe, damit meine Ausgabe, welche jede Sekunde einmal statt findet, nicht von einem Interrupt zerschossen wird.

Die Interrupt-Routine und die Variablenbezeichnung "volatile unsigned long i = 0;" habe ich abgeändert smiley.

Quote
Ja, die Beschreibung klingt schwer nach Störungen.
Der PullDown-Widerstand ist wirklich korrekt angeschlossen?
Das Netzteil ist wohl ein sogenanntes "Schaltnetzteil"?
Hat das irgendwelche Prüfzeichen drauf, TÜV, GS, VDE, oder ist das Chinaware ohne alles?

Das Netzteil das ich verwende ist ein Festspannungs-Schaltnetzteil von Conrad Elektronik. Hier der Link dazu:

http://www.conrad.de/ce/de/product/514209/VOLTCRAFT-FPPS-9-6W-Steckernetzteil-Steckernetzgeraet-Festspannungs-Schaltnetzteil-9V-660mA-6-Watt

Quote
Koaxkabel haben heute oft sogar eine zweifache Abschirmung und kosten ganz gut Geld.
Aber selbst einfaches Telefon-Verlegekabel ist mit so einer Art hauchfeiner Alufolie abgeschirmt. Kann man aber nicht Löten, die Folien-Abschirmung muss wohl per Schraubanschluss angeschlossen werden.

Mal ne doofe Frage, aber...ich will Kabelkanäle verwenden, durch die ich mein Y-Kabel ziehe. Was ist, wenn ich um das Y-Kabel Alufolie Wickel (1-2 Lagen, Klebestreifen dran und fertig. Das wär doch dann auch ne Abschirmung und vor allem günstiger als nen Koax-Kabel, oder?

Das mit dem Widerstand wird morgen ausprobiert smiley.

Gruß
17  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 25, 2013, 12:52:32 pm
Hey Leute,

momentan verwende ich folgenden Sketch:

Code:
#include <SPI.h>
#include <SD.h>

const int chipSelect = 4; // Chip Select, Signal SS (Slave Select)
unsigned long kimpuls = 0;
unsigned long limpuls = 0;
unsigned long periode = 0;
unsigned long Zeitscheibe = 0;
unsigned long i = 0;
unsigned long j = 0;
unsigned long abstand = 0;
int Sekunden = 00;
int Minuten = 54;
int Stunden = 16;
float wind = 0;
float frequenz = 0;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //-------------------------------------------------SD-Card - Anfang
  Serial.print("Initialisierung SD-Card...");
  pinMode(10, OUTPUT); // SPI Chip Select als Ausgang setzen, auch wenn nicht genutzt
  if (!SD.begin(chipSelect)) { // Prüfen, ob SD-Card bereit für Initialisierung
    Serial.println("SD-Card nicht bereit oder fehlend");
    return; // nichts weiter zu tun
  }
  Serial.println("SD-Card initialisiert");
//-------------------------------------------------SD-Card - Ende
//  Serial.println("hh:mm:ss;   Windgeschwindigkeit");
 
 
  attachInterrupt(0,Interrupt,RISING);
}

void Interrupt()
{
  noInterrupts(); 
  i = micros();
  interrupts();
}

void loop()
{
  abstand = i-j;
  j=i;
  if (abstand >= 1000)
  {
   limpuls=abstand;
  }
  else
  {
   kimpuls=abstand;
  }
  periode = kimpuls + limpuls;
  frequenz = 1000000.0 / periode;
  wind = 2.58 * (pow(frequenz,0.8927));
 
  if (millis() > Zeitscheibe )   
  {
    detachInterrupt(0);
    Zeitscheibe  = millis()+1000;
    Sekunden++;
//-------------------------------------------------Zeit Berechnung - Anfang 
  if (Sekunden==60){
   Minuten++;
   Sekunden=0;
  }
  if (Minuten==60){
    Stunden++;
    Minuten=0;
  }
  if (Stunden==24){
    Stunden = 0;
  }
//-------------------------------------------------Zeit Berechnung - Ende   
    if (micros()-i > 4311965 )
    {
     wind = 0;
    }
    if (periode == 0){
      wind = 0;
    }
   
//-------------------------------------------------Speicherung auf SD-Karte - Anfang   
 File dataFile = SD.open("wind.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.print(Stunden);
    dataFile.print(" ; ");
    dataFile.print(Minuten);
    dataFile.print(" ; ");
    dataFile.print(Sekunden);
    dataFile.print(" ;   ");
    dataFile.print(wind);
    dataFile.print(" ; m/s;   ");
    dataFile.print(i);
    dataFile.println(" ;   Zeitpunkt des Interrupts in Mikrosekunden");
    dataFile.close();
    } 
  // kann die Datei auf der SD-Karte nicht geöffnet werden, wird folgende Fehlermeldung angezeigt
  else {
    Serial.println("error opening wind.csv");
  }
//-------------------------------------------------Speicherung auf SD-Karte - Ende
// Ausgabe der Werte auch auf dem Serialmonitor:

    Serial.print(Stunden);
    Serial.print(" ; ");
    Serial.print(Minuten);
    Serial.print(" ; ");
    Serial.print(Sekunden);
    Serial.print(" ;   ");
    Serial.print(wind);
    Serial.println(" ; m/s;   ");
//    Serial.print(i);
//  Serial.println(" ;   Zeitpunkt des Interrupts in Mikrosekunden");

    attachInterrupt(0,Interrupt,RISING);
  }
}

Ich habe, auch wenn das Windrad stand, beim Gewitter, aber auch wenn ich ein Netzteil an den Arduino angeschlossen habe, sehr große Werte bekommen. Ich tippe da dann doch eher auf die Störsignal-Variante.

Ich würde auch gern zur festen Installation des Windmessers ein Koaxialkabel verwenden, welches ja abgeschirmt sein müsste, oder?

Mir stellt sich da nun jedoch die Frage, wie ich es an den Arduino anschließen kann. Der Innenleiter ist ja easy, aber wie mach ich es mit dem Außenleiter? Ich Stück vom Kabel zurückschneiden und den Außenleiter verdrillen zum anschließen?

Werd das ganze mal mit nem kleineren Widerstand ausprobieren smiley.
18  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 25, 2013, 11:43:20 am
Das mit den Funkwellen dacht ich mir schon fast. Wenn früher bei nem alten Radio die Antenne ab war, haben wir auch nen Stück blanken Kupferdraht genommen und den zu ner Antenne gebogen smiley.

Ich hab da momentan nen 12K Widerstand dran.

Wieso würde denn ein kleinerer Widerstand hier helfen?
19  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 25, 2013, 11:12:19 am
Hi Leute,

nachdem mein Windmesser unter "Laborbedingungen  smiley-lol" super funktioniert und gute Werte angezeigt hat, dachte ich mir als ein Gewitter aufzog, dass ich ihn mal in "freier Wildbahn" testen werde. Ich habe ihn also auf dem Geländer meines Balkons installiert, Y-Draht in die Wohnung gezogen, alles angeschlossen und los gings. Am Anfang kamen super Werte, dann zog das Gewitter über uns hinweg und ich bekam Windgeschwindigkeiten die jenseits von Gut und Böse lagen (über 1000 m/s) und als das Gewitter wieder weg war, waren die Werte wieder okay.

Desweiteren habe ich versucht, den Arduino per Netzteil zu betreiben, wobei ich dabei auch teilweise sehr sehr wilde Werte angezeigt bekam. Ohne Netzteil war dies jedoch nicht der Fall.

Kann es sein das dies daran liegt, weil der Y-Draht nicht abgeschirmt ist?

Oder hat jemand noch eine bessere Idee dazu?

Gruß
20  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 05, 2013, 12:02:16 am
Mein ganzer Fehler lag wohl darin, in der Rechnung frequenz = 1000000 / periode zu schreiben: frequenz = 1000000.0 / periode smiley-grin.

Gibt es denn eine Möglichkeit festzulegen, wie viele Nachkommastellen man angezeigt bekommen möchte, wenn man solch eine Float-Division durchführt?
21  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 04, 2013, 03:47:12 pm
Ich habe bei der Variable Frequenz schon die Variablentypen unsigned long, float, double usw. ausprobiert. Leider mit keinem guten Ergebnis.

Ist es an dieser Stelle möglich mit dem Arduino folgende Rechenschritte durchzuführen?

Bsp.:

periode = 357016

frequenz = 1000000 / periode = 1000000 / 357016 = 2,8009949133932372778811033679163 Hz

Welchen Variablentyp muss in diesem Fall die Variable Frequenz haben?

Wenn ich für die Frequenz den Variablentyp "float" verwende, erhalte ich folgende Ausgaben: 1.00, 2.00 usw. (immer mit .00).

Wenn ich für die Frequenz den Variablentyp "unsigned long" verwende, erhalte ich folgende Ausgaben: 1, 2 usw..

Wär toll wenn ihr mir da weiter helfen könntet!

Gruß

22  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 04, 2013, 11:55:07 am
Hey Leute,

ich habe jetzt die Berechnung des ganzen aus der Interrupt in die Loop-Routine überführt. guntherb's Vorschlag mit der Berechnung der Frequenz habe ich ebenso umgesetzt.

Wenn ich mir nun die Periode in Mikrosekunden jede Sekunde anzeigen lasse, funktioniert das wunderbar. Lass ich mir hingegen die Periode anzeigen, dann hakt das ganze und ich seh nur folgende Werte:

1
1
2
2
1
4
1
usw...

Was mache ich hierbei falsch? Muss ich für die Frequenz einen anderen Variablentyp verwenden oder woran kann das ganze liegen?


Hier noch mein aktueller Code:
Code:
unsigned long i,abstand,kimpuls,limpuls, periode, Zeitscheibe, frequenz, wind;
unsigned long j=0;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0,Interrupt,RISING);
}

void Interrupt()
{
  noInterrupts(); 
  i = micros();
  interrupts();
}

void loop()
{
  abstand = i-j;

  j=i;
 
  if (abstand >= 1000)
  {
   limpuls=abstand;
  }
  else
  {
   kimpuls=abstand;
  }

  periode = kimpuls + limpuls;
 
  frequenz = 1000000 / periode;
 
  wind = 2.58 * (pow(frequenz,0.8927));
 
  if (millis() > Zeitscheibe )   
  {
    detachInterrupt(0);
   
    Zeitscheibe  = millis()+1000;
   
    Serial.print("Windgeschwindigkeit = ");
    Serial.println(wind);
   
    attachInterrupt(0,Interrupt,RISING);
  }
}
23  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 04, 2013, 08:56:28 am
Die ganze Berechnung werde ich denke ich noch aus der Interrupt Routine herausnehmen.

Das Problem an dem ich momentan nicht weiter komme ist, dass wenn ch den von aus der Variable Periode umrechne, also durch 1000000 teile, ich dann in der Ausgabe der Variable periodes sehr merkwürdige Werte erhalte.

Habe ich hier den falschen Variablentyp gewählt?

Das Problem habe ich in meinem letzten Post noch genauer erklärt.

Wär toll wenn ihr mir da helfen könntet smiley!
24  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 04, 2013, 12:33:33 am
Stimmt. Es ist ganz egal wie rum ich die Werte aufsummiere.

Wenn ich das Programm mit folgendem Code nun durchlaufen lasse, bekomme ich aber kaum bzw. keine Werte.

Ich habe nun angefangen mir die Werte der einzelnen Variablen auszugeben. Hierbei ist mir aufgefallen, dass bis zur Variable "periode" die Werte auch richtig ausgegeben werden.

Hierbei tritt nun folgendes Problem auf:

Bsp.: periode = 1354464

Ab "periodes" (Umrechnung der Mikrosekunden in Sekunden), bekomm ich anstatt bspw. periodes = 1354464 / 1000000 = 1,354464 nur folgende Werte:

0
0
1
1
usw. (periodes als unsigned long)

0..00
0.00
1.00
usw. (periodes als float)

Welchen Variablentyp müsste "periodes" haben, damit die Zahl bspw. "1,354464" richtig dargestellt wird?

Sind die nachfolgenden Variablen frequenz und wind mit den richtigen variablentypen float und double ausgestattet?

Vielen Dank für eure hilfreichen Antworten!

Anbei noch mein aktueller Code:
Code:
unsigned long i,abstand,kimpuls,limpuls, periode;
float frequenz, periodes;
double wind;
unsigned long j=0;



void setup()
{
  Serial.begin(9600);

  attachInterrupt(0,Interrupt,RISING);
}

void Interrupt()
{

  noInterrupts();
 
  i = micros();
 
  abstand = i-j;
 
  j=i;
 
  if (abstand >= 1000)
  {
   limpuls=abstand;
  }
  else
  {
   kimpuls=abstand;
  }
  periode = kimpuls + limpuls;
  periodes= periode / 1000000;
  frequenz = 1 / periodes;
  wind = 2.58 * (pow(frequenz,0.8927));
  interrupts();


}


void loop()
{

}
25  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 03, 2013, 03:25:47 pm
@ jurs

Du hast da vollkommen Recht. Ich hab das ganze nochmal getestet. Es werden genau 2 Signale durch den Reedkontakt pro Umdrehung erzeugt, wobei ein kurzer und ein langer Impuls entsteht.

Sorry nochmal für meine Beratungsresistens smiley-grin.

Momentan bin ich soweit, dass ich mir die Werte (die Abstände zwischen den einzelnen Schaltungen) im Serial Monitor ausgeben lasse.

Hierbei sieht man, dass zuerst ein kurzer und dann ein langer Impuls entsteht.

In der Interrupt Routine frage ich nun ab, ob meine Variable "Abstand" größer ist als 1000 (es hat sich gezeigt das der kurze Impuls max. 640 Mikrosekunden groß ist). Dann wird der Abstandswert in die Variable limpuls gespeichert (langer Impuls)...ansonten wird der Wert in der Variable kimpuls gespeichert (kurzer Impuls).

Hier der Code:
Code:
unsigned long i,abstand,kimpuls,limpuls;
unsigned long j=0;



void setup()
{
  Serial.begin(9600);

  attachInterrupt(0,Interrupt,RISING);
}

void Interrupt()
{

  noInterrupts();
 
  i = micros();
 
  abstand = i-j;
 
  j=i;
 
  if (abstand >= 1000)
  {
   limpuls=abstand;
  Serial.print("langer Impuls: ");
  Serial.println(limpuls);
  }
  else
  {
   kimpuls=abstand;
  Serial.print("kurzer Impuls: ");
  Serial.println(kimpuls);
  }

  interrupts();


}


void loop()
{

}

Mein vorrangiges Ziel besteht momentan darin, aus den Abständen (kurzer + langer Impuls) eine Periode zu bekommen, anhand derer ich direkt nach jeder Periode die ich gemessen habe, die Windgeschwindigkeit zu berechnen.

Hierzu habe ich anhand der Werte des Herstellers zu Frequenz und Windgeschwindigkeit in Excel eine Formel erstellt, die den Werten des Herstellers des Anemometers gleicht.

Nun meine Frage:

Wie kann ich es programmiertechnisch elegant lösen, das genau ein kurzer und ein langer Impuls addiert werden (die beide zusammen gehören) und dann erst wieder der nächste kurze und der nächste lange Impuls aufsummiert werden, nicht aber schon der bereits benutze lange und dann der nächste kurze Impuls?

Vielen Dank für eure Antworten!

Hier noch eine kurze Ausgabe meine Serial-Monitors:
langer Impuls: 1288736
kurzer Impuls: 548
langer Impuls: 1373776
kurzer Impuls: 552
langer Impuls: 940952
kurzer Impuls: 500
langer Impuls: 891320
kurzer Impuls: 496
langer Impuls: 571136
kurzer Impuls: 496
langer Impuls: 454896
kurzer Impuls: 496
langer Impuls: 422892

usw...
26  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: June 03, 2013, 03:26:25 am
Hey Leute,

nachdem hier bisher sehr wenig weiter passiert ist, weil ich leider keine Zeit für das Projekt gefunden hab, nun ein neuer Anlauf.

Irgendwie bekomm ich das Kontaktprellen nicht weg, egal wie hoch in den delay pack.

Jetzt hab ich nochmal ganz rudimentär angefangen und mir direkt die Werte in der Interrupt Routine ausgeben lassen.

Hierbei sieht man, dass mein "RISING" immer genau 2 Werte kommen.

Ich habe dafür folgenden Code verwendet:

Code:
int i = 0;
unsigned long j;


void setup()
{
  Serial.begin(9600);

  attachInterrupt(0,Interrupt,RISING);
}

void Interrupt()
{

  noInterrupts();
  j = micros();
  delay(100);
  Serial.print("Wert Nr. ");
  Serial.print(i++);
  Serial.print(";");
  Serial.println(j);
  interrupts();


}


void loop()
{
  }

Dabei bekomm ich folgende Ausgabe im Serial Monitor:

Wert Nr. 0;2402216
Wert Nr. 1;2402996
Wert Nr. 2;3884176
Wert Nr. 3;3885744
Wert Nr. 4;5123992
Wert Nr. 5;5124788
Wert Nr. 6;6213224
Wert Nr. 7;6214328
Wert Nr. 8;7237460
Wert Nr. 9;7238324
Wert Nr. 10;8308352
Wert Nr. 11;8309476
Wert Nr. 12;9405480
Wert Nr. 13;9407204
Wert Nr. 14;10376576
Wert Nr. 15;10378008
Wert Nr. 16;11555068
Wert Nr. 17;11556632
Wert Nr. 18;12729400
Wert Nr. 19;12731160
Wert Nr. 20;13625240
Wert Nr. 21;13626140
Wert Nr. 22;14694512
Wert Nr. 23;14696212
Wert Nr. 24;15819660
Wert Nr. 25;15820572
Wert Nr. 26;16833956
Wert Nr. 27;16835348
Wert Nr. 28;18306752
Wert Nr. 29;18307868
usw...

Dabei beträgt der Mittelwert über alle Abstände, die sich bei 2 aufeinander direkt folgenden Impulsen ergeben: 1249,.. Mikrosekunden
Der Maximalwert beträgt: 1760 Mikrosekunden.
Der Minimalwert beträgt: 780 Mikrosekunden.

Nun habe ich auch schon versucht ein delayMicroseconds() das etwas über dem maximalwert liegt einzuführen, damit das kontaktprellen aufhört. leider ohne erfolg.

könnt ihr mir da weiterhelfen? habt ihr vielleicht noch ideen?

danke schonmal für eure antworten!
27  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: April 15, 2013, 03:55:17 pm
Hallo Gunther und alle anderen,

ich habe den Inhalt des Arrays ausgelesen und die Daten, die innerhalb einer Sekunde in das Array durch die Interrupt-Routine geschrieben werden, auf dem Serial Monitor anzeigen lassen.

Hierbei ist mir aufgefallen, dass wenn ich das Anemometer sehr langsam drehe (1 Umdrehung pro Sekunde) und somit auch ein Interrupt pro Sekunde auftreten müsste, ich folgende Werte im Array stehen habe:

Beispiel 1:
m[0] = 2685008
m[1] = 2685064
m[2] = 2685108
m[3] = 0

Beispiel 2:
m[0] = 6961784
m[1] = 6961840
m[2] = 5152580

Beispiel 3:
m[0] = 8527264
m[1] = 8527320
m[2] = 8527356
m[3] = 0


Irgendwas kann doch hier beim speichern der Werte ins Array in der Interrupt-Routine nicht hinhauen, oder?

Ich werd ehrlich gesagt nicht schlau draus, wie ich es abstellen kann, dass mehrere, zum Teil auch falsche Werte in das Array geschrieben werden. Ich hatte auch schon versucht, durch ein erstes delay in der Interrupt-Routine das "Schwingen" vom Reed-Kontakt zu mindern, damit dann nur ein Wert gespeichert wird. Dies hat allerdings absolut nix gebracht.

Habt ihr Ideen, wie man das Problem lösen könnte?

Vielen Dank für eure Hilfe!

Gruß Alex

28  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: April 14, 2013, 05:11:32 pm
Hallo Leute,

ich hab meinen Quellcode modifiziert, mir mittels Excel ne näherungsweise Gleichung zu den Frequenz - Windgeschwindigkeits-Werten erzeugt, welche ich in meinem Quellcode nutze, sowie die einzelnen Schritte per "Serial.println..." angesehen um genau zu verstehen, was an welcher Stelle meines Programms geschieht.

Hier mal mein bisheriger Quellcode:
Code:
unsigned long Zeitscheibe;
unsigned long m[99];
int i = 0;
float Periodendauer = 0;
float Umrechnung = 1000000;
float Frequenz = 0;
float Windgeschwindigkeit;

void setup()
{
  Serial.begin(9600);

  attachInterrupt(0,Interrupt,RISING);
}

void Interrupt()
{

  m[i++] = micros();

  Serial.println(m[i]);


}


void loop()
{
 if (millis() > Zeitscheibe )   
  {
    detachInterrupt(0);
   
    Zeitscheibe  = millis()+1000;

    Periodendauer = (m[i] - m[0]) / i;
   
    Frequenz = Umrechnung / (Periodendauer);
   
    Windgeschwindigkeit = 2.58 * (pow(Frequenz,0.8927));         
   
/*    Serial.print("Windgeschwindigkeit:  ");
     
    Serial.println(Windgeschwindigkeit);
*/   
    Periodendauer = 0;
   
    i = 0;
   
    attachInterrupt(0,Interrupt,RISING);
  }

}

Ich lasse mir momentan die Werte des Interrupts direkt im Interrupt ausgeben, sodass ich sehen kann, welche Werte im Array abgespeichert werden. Hierbei ist mir aufgefallen, dass immer der aktuelle micros() Wert und danach der Wert 0 abgespeichert wird.
Hat einer von euch eine Idee, wieso das passiert?

Hier mal ein Ausschnitt aus meinem Serial Monitor:


Vielen Dank schonmal für eure Hilfe smiley!
29  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: April 09, 2013, 03:54:43 pm
Hallo Leute,

ich hab das bisher hier von euch gelernte nun in folgendem Code umgesetzt:

Code:
int Zeitscheibe;
int i = 0;
int j = 0;
float Periodendauer = 0;
float SummePeriodendauer = 0;
float Umrechnung = 0.000001;
float Frequenz = 0;
volatile float m[100];

void setup()
{
  Serial.begin(9600); //starten der seriellen Kommunikation
  attachInterrupt(0,Interrupt,RISING); //wenn ein Signal von LOW nach HIGH an digital Pin 2 eingeht, wird die Interrupt-Routine "Interrupt" gestartet
}

void Interrupt() //Interrupt-Routine
{
  m[i++] = micros(); //in das Array wird, wenn der Interrupt ausgelöst wird, die jeweilige Zeit seitdem das Programm gestartet wurde, in Mikrosekunden, gespeichert
}

void loop() //loop-Routine
{
 if (millis() > Zeitscheibe )      // wird jede Sekunde aufgerufen
  {
   detachInterrupt(0); //Interrupt wird zur Auswertung des Arrays vorübergehend außer Kraft gesetzt
    Zeitscheibe  = millis()+1000;  //Berechnung der neuen Größe der Zeitscheibe
    for (j=0; j==i; j++)
    {
      SummePeriodendauer = SummePeriodendauer + (m[i+1]-m[i]); //Aufsummierung der Periodendauern zwischen den Interrupts
     
      Periodendauer = SummePeriodendauer / i; //gemittelte Periodendauer innerhalb einer Sekunde in Mikrosekunden
     
      Frequenz = 1 / (Periodendauer * Umrechnung); //Frequenzberechnung
     
      Serial.print("Frequenz:  "); //Ausgabe der gemittelten
     
      Serial.println(Frequenz);//Frequenz pro Sekunde auf dem Serial Monitor
     
    }
      j = 0; //Zuruecksetzen der
     
      i = 0; //Zaehlvariablen
   
   
    attachInterrupt(0,Interrupt,RISING); //Interrupt kann wieder ausgeführt werden
  }
}

Der Serial Monitor zeigt mir als Ausgabe wenn der Windmesser steht als Frequenz brav 0.00 an. Sobald ich ihn jedoch in Bewegung versetze, wird mir nix mehr ausgegeben, obwohl ich doch in der Auswertungsroutine (loop) extra den Interrupt während der Auswertung und der Ausgabe unterbinde.

Woran kann es liegen, dass mir nur "richtige" Werte ausgegeben werden, wenn der Windmesser steht?

P.S. Starte ich nur den Serial Monitor, bewege den Windmesser aber noch nicht, wird mir folgendes ausgegeben: Frequenz:  nan

Woran kann das liegen?

Gruß Alex
30  International / Deutsch / Re: Auswertung Impulse Volkswindmesser on: April 08, 2013, 01:34:16 pm
das habe ich verstanden smiley.

es funktioniert dann ja auch nicht mit einer while-routine, weil ich ja theoretisch nix mache, in der sekunde, außer das ich immer wieder durch die interrupts unterbrochen werde.

müsste ich dann in der loop-routine mit nem delay (1000) arbeiten, um jede sekunde diese routine zu starten, welche dann die zeiten der interrupts (das array) auswertet und dann gemittelt als periodendauer bzw. frequenz ausgibt, oder wie wär es am geschicktesten, die ausgabe pro sekunde zu erstellen?

dort häng ich momentan. vllt. ist es ja auch ganz trivial, nur irgendwie will ich von dem schlauch nicht runter, auf dem ich stehe smiley-grin.

vielen vielen dank aber schonmal für eure tollen antworten und die super unterstützung die ich hier bisher erlebt habe!!
Pages: 1 [2] 3