ich möchte mit einem Durchflußmesser arbeiten und dieser gibt je nach Durchfluß unterschiedlich schell Impulse zurück. Um diese zu zählen gibt es die PulseIn oder die Interrupt Methode. Welche von diesen 2 Wegen würdet Ihr empfehlen? Oder gibt es eine exterene Methode mit einem "Zähler IC"?
Pippsen:
ich möchte mit einem Durchflußmesser arbeiten und dieser gibt je nach Durchfluß unterschiedlich schell Impulse zurück. Um diese zu zählen gibt es die PulseIn oder die Interrupt Methode. Welche von diesen 2 Wegen würdet Ihr empfehlen?
Wenn Dein Programm nur Impulse zählen und sonst nichts weiter machen soll, kannst Du pulseIn verwenden. Allerdings blockiert die Funktion pulseIn die Programmausführung, so dass diese Funktion für Programme, die noch andere Dinge tun sollen, vollkommen ungeeignet ist.
Hardware-Interrupts kannst Du verwenden, dies sollten bis 40 kHz hoch problemlos machbar sein.
Pippsen:
Oder gibt es eine exterene Methode mit einem "Zähler IC"?
Was soll das sein?
Die dritte Möglichkeit, die noch in Frage kommt, wäre einen der Zähler des Arduino auf "externen Takt" zu programmieren, und die Impulse auf den externen Zählpin des verwendeten Counters zu geben. Bei allen Arduino-Boards ist mindestens ein Zähler-Pin extern herausgeführt, der sich dafür nutzen läßt. Bei den UNO-Boards wäre das Pin-5, für den man TIMER1 auf externe Taktzählung umprogrammieren könnte. Allerdings gibt es dafür keine Arduino-Komfortbefehle, das müßte vollkommen zu Fuß direkt über die Counterregister programmiert werden.
Pippsen:
Oder gibt es eine exterene Methode mit einem "Zähler IC"?
Was soll das sein?
War nur eine Idee ob es ggf. was externes gibt und einfach nur ein Datenaustausch über eine Schnittstelle statt findet, ähnlich einen Temperatursensor.
Da mein Programm am Ende mehr machen soll als Pulse zählen bleibt dann nur der Hardware-Interrupts und der exterene Takt übrig. Schaue mal was da passt.
Ein externen Zähler wäre schon möglich. Ist aber unnötig da es die internen Timer/Counter gibt. Und das ist auch noch ziemlich einfach
Schau dir dazu mal das Datenblatt an:
Auf Seite 137 siehst du die 3 Clock Select Bits im TCCR1B Register. Wenn die alle auf 1 stehen triggerst du auf die steigende Flanke am T1 Pin. Das ist Pin 5 am UNO.
Also so:
TCCR1A = 0; //wichtig um den Arduino PWM Initalisierungs Code zu überschreiben!!
TCCR1B = _BV(CS12) | _BV(CS11) | _BV(CS10);
Den Zählerstand kannst du dann im TCNT1 Register auslesen. Das ist ein 16 Bit Register. Das wird dir also nicht so schnell überlaufen. Wenn doch müsstest du noch den Timer Overflow Interrupt in TIMSK1 aktivieren und das auswerten
Wenn du mal nicht zählen willst setzt du einfach TCCR1B auf 0.
Wenn du dann die Anzahl der Impulse in einer bestimmten Zeit willst, kann man da einfach eine Tor-Schaltung mit millis() außen rum bauen.