Frequenzen erfassen mit Arduino Mega/Nano

Hallo zusammen

Ich habe ein Problem fabriziert welches ich jetzt lösen muss. Und zwar möchte ich Frequenzen im Bereich von zwischen 600Hz und 3kHz zählen. Soweit noch unproblematisch. Die Frequenzen stammen von Sensoren (Rechteck/5V) und werden über zwei Multiplexer auf zwei Analog Pins eines Arduino Mega geleitet. Die beiden Multiplexer laufen parallel sprich beide sind auf den selben Steuerleitungen. Hier ist nun der Fehler nach meiner Suche bezüglich dieses Themas gehe ich davon aus, dass ich auf einem Analog Pin keine Frequenzen in dem Bereich zählen kann.

Nun mein neuer Lösungsansatz.

Die Frequenzen mit einem (bzw. zwei) Arduino Nano auszuwerten und irgendwie an den Mega dann als Zahlenwert zu übertragen. Die Ansteuerung der Multiplexer würde weiter über den Mega laufen.

Nun stellen sich mir mehrere Fragen.

  1. Wenn ich auf dem Nano die FreqCount Library die ich hier gefunden habe: FreqCount Library, for Measuring Frequencies in the 1 kHz to 5 MHz Range Hab ich dann auf einem Nano den notwendigen Anschluss zur Verfügung? und welcher wäre es dann, oder muss ich einen UNO nehmen? Wenn ich es richtig verstanden habe müsste ich einen nach ausgeführten Timer haben um das so zu machen?

  2. Was ist die schlauste Kommunikationsmethode um von einem Nano/UNO auf einen Mega Zahlenwerte zu übertragen? Da muss ich mich zuerst bilden und falls ich ein Tipp kriegen würde könnte ich das gleich in die vielversprechendste Variante.

  3. Habe ich etwas nicht bedacht? sprich taugt die Idee was?

Gruess Roman

Frage 1 kann ich mir inzwischen beantworten, das teste ich nun mal da der Nano auch den Atmega328 verwendet und mir dieses PinOut http://forum.arduino.cc/index.php?action=dlattach;topic=147582.0;attach=90799 sagt dass der auch auf Pin5 rausgeführt ist denke ich, dass müsste klappen mit Nanos.

Frage 2 hab ich rausgekriegt, dass die meissten I2C oder Serial verwenden, was ist empfehlenswerter?

RomN:
Frage 2 hab ich rausgekriegt, dass die meissten I2C oder Serial verwenden, was ist empfehlenswerter?

Geschmackssache. Geht beides.

Hallo,

was hindert dich die verwendeten Pins als digitale und nicht als analoge zu verwenden? Erst wenn du Interrupt fähige Pins benötigst ist die Auswahl eingeschränkt.

Wieso willst Du analoge Eingänge verwenden. Zu was brauchst Du Multiplexer?
Grüße Uwe

@Doc die Bandbreite hätte ich gedacht... korrigier mich aber nach meinen Recherchen hab ich den Schluss gezogen die Digital Pins sind nicht dafür ausgelgt weshalb die meisten dies über den Timer lösen. Und die Interrupt-Lösungen blockieren das Programm. Da ich noch ein Wifi-Modul und eine SD-Karte einbinden will und noch diverse andere Dinge ansteuern will... dachte ich dass die Interrupt-Lösung nicht das richtige für mich ist... aber ich bin nur am abschätzen und habe die Materie bei weitem noch nicht verstanden ich bin ganz klar noch Anfänger mit analogem Know-How weswegen ich mir auch bereits eine Platine geätzt hab, und nun baue ich darauf auf und versuche ich die gemachten Fehler zu korrigieren und in den nächsten Versuch miteinfliessen zu lassen :slight_smile: mein Weg war sicher nicht der beste aber ich komme Stück für Stück vorwärts :slight_smile: wie würdest du dann auf einem Digitalpin Frequenzen in dieser Grösse bestimmen pulsein ist doch auch zu langsam oder hab ich mich verlesen?

@Uwe Die Analogen Eingänge waren ein Fehler, ich habe da was vertauscht bei meinem ersten Entwurf, bei dieser Variante wo ichdas her hatte mit den Analogen Eingängen wurde die Frequenz nach einem Tiefpass gleichgerichtet und mittels Spannungsmessung ein Wert bestimmt. Deswegen die Analogpins. Aber irgendwie finde ich diese Lösung nicht so schön. Die beiden Tiefpässe die ich benötigen würde um die Frequenz an den beiden Multiplexern exakt gleich sein müssten um vergleichbare Werte zu erhalten.

Den Multiplexer habe ich gewählt da ich im Moment 20 Sensoren auswerten möchte. Die Digital Pins sind auch schon grösstenteils verwendet.

Sprich die Analogen Eingänge hätte ich bereits verworfen, an den Multiplexer bin ich tendenziell gebunden.

@Serenifly Danke das hilft wieder ein Stück weiter. Was bevorzugst du und was ist deiner Meinung nach einfacher?

Hallo,

irgendwas mußt du mit analog und digital verwechseln. Da komme ich jetzt nicht mit.
Mit einem analogen Eingang kann man verschiedene Spannungswerte erfassen.
Mit einem digitalen kann man Impulse zählen.
Wenn du ein Rechtecksignal hast, vereinfacht das die Sache ernorm. Du mußt am digitalen Pin nur die Anzahl der Highpegel/Flanken/Impulse zählen in einem bestimmten Zeitraum und berechnest daraus die Frequenz. Ob du das mit Polling machst oder mit Interrupts kommt auf die maximal zu erwartende Eingangsfrequenz an und was der µC sonst noch macht.

Verschiedene Lösungsansätze gibts dazu hier:

Richtig ich hab beim letzten Entwurf was vertauscht.

Mein nächster Ansatz ist direkt auf dem Analog Pins die Frequenz mit der PulsIn Funktion zu zählen.

PulseIn kann bis zu einer Periodendauer von 10us angewendet werden, sprich bis 100kHz
https://www.arduino.cc/en/Reference/PulseIn

Die Analog Pins müssten auch als DigitalPins einsetzbar sein. Laut der dieser Beschreibung. https://www.arduino.cc/en/Tutorial/AnalogInputPins

Wenn das klappt muss ich nichts an meiner Schaltung abändern.

Danke für die bisherige Unterstützung irgendwie hab ich mich beim Suchen selbst verwirrt...

Gruess Roman

Hallo,

jetzt stimmts. Betrachte alle Pins erstmal als digitale. Das können alle. Und dann können einige Pins eben noch mehr als das. Also zum Bsp. analoger Eingang sein, Interrupt fähig sein, zu einem Timer gehören, zur seriellen, oder I2C oder SPI Schnittstelle werden.

Pulsein kannste natürlich auch probieren. Die minimale Pulsdauer ist jedoch anders zu verstehen. Das ist nicht die Periodendauer. Eben die Pulsdauer. Wenn dein Signal symmetrisch ist, dann wäre damit deine Periodendauer 20µs, wenn der High und Low Impuls jeweils 10µs Minimum beträgt.