NetFritz Posted December 23, 2013 Share Posted December 23, 2013 Hallo Ich habe mir die Wetterstation vor ein paar Wochen auf der Interradio in Hannover gekauft. Die Sensoren lese ich mit meinem RPi und PHP-CLI aus. Die Daten schreibe ich dann ich eine RRD-DB. Ich habe eine Windgeschwindigkeitssensor von Theodor Friedrichs den ich mit dem "Industrial Digital In 4" Briklet auslesen will. Der Flankenzähler wird mit "setEdgeCountConfig(int $selection_mask, int $edge_type, int $debounce)" konfiguriert. Wie frage ich den Flankenzähler ab und wie ist sicher gestellt das die Flanken immer in einer bestimmten Zeit gezählt werden? Über ein kleine Script würde ich mich freuen. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
NetFritz Posted December 23, 2013 Author Share Posted December 23, 2013 Hallo Wie man den Flankenzähler auslesen kann habe ich inzwischen gefunden. "getEdgeCount(int $pin, bool $reset_counter)" Kann man den auch die Torzeit festlegen? Ein kleines Beispiel Script währe hilfreich. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
NetFritz Posted December 28, 2013 Author Share Posted December 28, 2013 Hallo Der Flankenzähler wird mit "setEdgeCountConfig(int $selection_mask, int $edge_type, int $debounce)" konfiguriert. Ich möchte nun den Flankenzäher auf Eingang "0" einstellen. Was muss in "int $selection_mask" denn rein? Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
thunderbird Posted December 28, 2013 Share Posted December 28, 2013 Hallo NetFritz, eigentlich sollte eine 0 ausreichen. So ist es zu mindestens in Java. Ich nutze das IO4 zum auslesen eines Davis Windmessers http://www.davisnet.com/weather/products/weather_product.asp?pnum=06410 Hier mal die setEdgeCountConfig aus Java io4.setEdgeCountConfig((short)0, BrickletIO4.EDGE_TYPE_FALLING, (short)20); Das (short) kannst du einfach weg lassen. Quote Link to comment Share on other sites More sharing options...
borg Posted December 28, 2013 Share Posted December 28, 2013 Die "Selection Mask" ist eine Binärmaske. D.h. wenn du den Flankenzähler nur für Pin 1 aktivieren möchtest musst du eine 1 setzen. Pin 0 = 1 = 20 Pin 1 = 2 = 21 Pin 2 = 4 = 22 Pin 3 = 8 = 23 Pin 1+3 = 10 = 21 + 23 usw. Quote Link to comment Share on other sites More sharing options...
thunderbird Posted December 29, 2013 Share Posted December 29, 2013 Hallo Borg, könntet Ihr das bitte noch mit in die Doku aufnehmen? Mir ist jetzt erst aufgefallen, dass es mit einer 0 wirklich nicht geht Bin immer davon ausgegangen, dass es die Pinnummer ist. Quote Link to comment Share on other sites More sharing options...
NetFritz Posted December 30, 2013 Author Share Posted December 30, 2013 Hallo Vielen Dank, besonders an borg. Hallo thunderbird. Das Dir das nicht aufgefallen ist, liegt wohl daran das die Eingänge schon vorbelegt sind. Siehe hier eine abfrage von Eingang 3, den ich nicht gesetzt habe. $CountConfig = $idi4->getEdgeCountConfig(3); # Pin 3 var_dump($CountConfig); array(2) { ["edge_type"]=> int(0) ["debounce"]=> int(100) } Ich hatte "debounce" auf 20 gesetzt und eine Abfrage lieferte immer 100. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
thunderbird Posted December 30, 2013 Share Posted December 30, 2013 Hallo NetFritz, ja ganz genau ich habe mich nur gewundert warum ich immer nur maximal 25 Events in 5 Sekunden bekommen habe... Aber ich bin nie auf die Idee gekommen das hier was nicht richtig gesetzt worden ist. Schön wäre hier natürlich eine Exception wenn die Angabe(0) außerhalb des Bereichs ist. Quote Link to comment Share on other sites More sharing options...
NetFritz Posted February 11, 2014 Author Share Posted February 11, 2014 Hallo Ich frage den Zähler z.Z. alle 60sec ab. Wie viele Flanken kann der Zähler den zählen bis er voll ist. Der Windmesser liefert bei 10m/sec 100Hz. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
photron Posted February 12, 2014 Share Posted February 12, 2014 Der Flankenzähler kann bis 4294967295 zählen. Quote Link to comment Share on other sites More sharing options...
NetFritz Posted February 12, 2014 Author Share Posted February 12, 2014 Hallo Vielen Dank. Dann kann es ja daran nicht liegen. Er zählt mir z.Z ungefähr bis 1200 Impule/Minute. Das mussten etwa 20Hz sein, er kann doch bis 600Hz. Dann muss ich nochmal mit dem Ozi. Die H und L Spannungen kontrollieren. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
NetFritz Posted February 13, 2014 Author Share Posted February 13, 2014 Hallo Habe heute mal mit dem Ozi. die H/L Levels angeschaut. Bei L zeigt er ca.1,7 Volt und bei H 5Volt an. Das Signal zeit ein gleichmäßiges Rechtecksignal. Ich habe unten den "Step-Down Power Supply" und darauf 2 Master Bricks. In welchen Master Brick steckt mann dann am besten den "Industrial Digital In 4" wenn er die Flanken zählen soll? Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
photron Posted February 14, 2014 Share Posted February 14, 2014 Wie hast du denn das Bricklet jetzt konfiguriert? Kannst du mal den Code zeigen? An welchem Master Brick im Stack du das Bricklet anschließt spielt normalerweise keine Rolle. Welchen anderen Bricklets hast du denn noch angeschlossen? Quote Link to comment Share on other sites More sharing options...
NetFritz Posted February 14, 2014 Author Share Posted February 14, 2014 Hallo Hier der Code vom Industrial Digital In 4. #PHP-CLI # wird jede Minute von cron aufgerufen require_once('Tinkerforge/IPConnection.php'); require_once('Tinkerforge/BrickletIndustrialDigitalIn4.php'); $host = 'localhost'; $port = 4223; use Tinkerforge\IPConnection; $ipcon = new IPConnection(); // Create IP connection $ipcon->connect($host, $port); // Connect to brickd # ----------- Windstärke -------------- $uid_DIn = 'hwx'; // BrickletIndustrialDigitalIn4 UID use Tinkerforge\BrickletIndustrialDigitalIn4; $idi4 = new BrickletIndustrialDigitalIn4($uid_DIn, $ipcon); // Create device object $CountConfig = $idi4->getEdgeCountConfig(0); # Pin 0 # var_dump($CountConfig); $selection_mask = 1; # Pin 0 = 1 = 2Hoch0 $edge_type = 0; $debounce = 1; if($CountConfig["edge_type"] == $edge_type AND $CountConfig["debounce"] == $debounce){ # echo "setEdgeCountConfig i.o. \n"; }else{ $idi4->setEdgeCountConfig($selection_mask,$edge_type,$debounce); } #$test1 = $idi4->getEdgeCountConfig(0); # Pin 0 $digi1 = $idi4->getEdgeCount(0,1); $CountConfig = $idi4->getEdgeCountConfig(1); # Pin 1 # var_dump($CountConfig); $selection_mask = 2; # Pin 0 = 1 = 2Hoch0 $edge_type = 2; $debounce = 100; if($CountConfig["edge_type"] == $edge_type AND $CountConfig["debounce"] == $debounce){ # echo "setEdgeCountConfig i.o. \n"; }else{ $idi4->setEdgeCountConfig($selection_mask,$edge_type,$debounce); } $digi2 = $idi4->getEdgeCount(1,0); # auslesen nicht zurueksetzen Aufstellung der Bricks: Ich habe unten den "Step-Down Power Supply" und darauf 2 Master Bricks. An den unteren Masterbrick habe ich den Raspberry Pi per mini USB angeschlossen. An den Masterbricks habe ich 2x Analog In, 1x Industrial Digital In 4, 1x Ambient Light Bricklet,1x Barometer Bricklet und 1x Humidity Bricklet angesteckt. Ich weis jetzt aber nicht aus den Kopf welcher Sensor an welches Masterbrick angeschlossen ist. Heute Mittag habe ich mal Debounce auf 1 gesetzt, da hat er bis zu 2200 Impulse/Minute angezeigt. Wir erwarten heute Nacht einen Sturm, wollen mal sehen ob er an eine Grenze ankommt. Der Windsensor hat ein Hallgenerator eingebaut. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
photron Posted February 18, 2014 Share Posted February 18, 2014 Dein Programm sieht gut aus. Was mir aber auffällt, ist dass für setEdgeCountConfig() nicht dokumentiert ist, dass dies den Zähler zurücksetzt. Dies ist aber nicht dein Problem, da du ja setEdgeCountConfig() nur aufruft wenn die Konfiguration nicht so ist wie sie sein sollte. Daher sollte setEdgeCountConfig() nur einmal aufgerufen werden. Bedingt durch die Art und Weise wie unser System arbeitet ist die maximale Abtastrate beschränkt. Ich habe hier gerade nochmal mit einem 250Hz Rechtecksignal mit 50% Dutycycle getestet und da verliert der Flankenzähler keine Flanke. Debounce war auf 1 gestellt. Du solltest also grundsätzlich deutlich mehr als 2200 Impulse/Minute (ca. 36Hz) erkennen können mit dem IDI4 Bricklet. Was aber ein Problem sein könnte ist die Länge des High-Pegels des Hallsensors im Windmesser. Wenn dieser zu kurz ist, dann kann das Bricklet ihn im Zweifelsfall nicht mehr erkennen. Wenn dein Windmesser jetzt am Rad nur an einer Stelle einen Magneten hat dann kann dies durchaus dein Problem hier sein. Um diese Problem zu beheben, falls es wirklich das Problem ist, dann müsstest du die Länge der High-Pegels verlängern. Eine Möglichkeit wäre mehr Magneten anzubringen, falls das der Windmesser zulässt. Das Ziel ist dann das Verhältnis von Magnet-Über-Sensor zu Kein-Magnet-Über-Sensor pro Umdrehung mehr in Richtung 50:50 zu verschieben und so die Länge des High-Pegels pro Umdrehung zu verlängern. Quote Link to comment Share on other sites More sharing options...
NetFritz Posted February 19, 2014 Author Share Posted February 19, 2014 Hallo Vielen Dank für die Antwort. Das Signal was vom Windgeber kommt ist ein gleichförmiges Rechteck Signal mit 50:50. Bei 250Hz würde ich fast 100km/h Windgeschwindigkeit messen können, das sollte reichen. Mit Debounce "1" läuft es jetzt ja auch. Gruß NetFritz Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.