Zählung von Impulsen

Mahlzeit,

kann mir jemand mit dem Uno weiterhelfen?
Ich versuche vergeblich eine Funktion zu finden, die mir erlaubt innerhalb von ca. 10 ms an einem Eingang High bzw. Low Signal zu messen.
Aufgabe ist wie folgt:

Ich habe einen NE555 als astabile Kippstufe geschalten. Sprich ich bekomme am Ausgang vom NE555 einen High-Low Pegel. Ich will jetzt messen, wieviel ich von den High_Low Pegeln in diesen 10 ms habe. Das soll also in eine Schleife. Hintergrund: Ich baue einen Füllstandmesser der eben kontinuierlich messen tut.

Für hilfe wäre ich sehr dankbar...

Schau mal hier --> http://arduino.cc/it/Reference/AttachInterrupt

und dann kannste ja über millis() noch die Zeit abfangen und Bedingungen Knüpfen...

Du kannst aber auch die Periodendauer (oder wenn das Signal es zuläßt) die Zeit das Impulses oder der Pause messen anstatt wieviele Impulse pro Zeiteinheit kommen.
Die Zeitdauer eines Impulses oder Die Zeitdauer eine Pause kann man mit pulseIn() messen http://arduino.cc/en/Reference/PulseIn.

De 555 müßte ein Signal produzieren mit konstanter Pulsdauer aber variabler Pausenlänge.

Grüße Uwe

Die Dauer von High bzw. Low- Signal kann ich anhand der Widerstände verändern.

Ich muss halt zum Schluss ne Größe haben, welche ich auch verarbeiten kann.

Falls mir da jemand genau helfen kann ^^... bitte melden.
Mein English ist leider nicht so gut... weshalb ich mir da schon recht schwer tu etwas zu verstehen.

Ich glaub die Periodendauer bringt mir nicht viel. Der Sensor für die Flüssigkeit ist ja selbstgebaut (kapazitiver Sensor ... )
Somit je nach größe der Kapazität Taktet der NE555 häufiger bzw. seltener in sagen wir 10ms.

kawa-racer:
Ich glaub die Periodendauer bringt mir nicht viel. Der Sensor für die Flüssigkeit ist ja selbstgebaut (kapazitiver Sensor ... )
Somit je nach größe der Kapazität Taktet der NE555 häufiger bzw. seltener in sagen wir 10ms.

Wenn der NE555 häufiger taktet dann ist das eine höhere Frequenz und somit kürzere Periodendauer.
Grüße Uwe

Um deine Idee nochmal aufzugreifen... für die Möglichkeit derMessung der Impulsdauer... da müsste dann die High Phase genauso lang sein wie die Low-Phase oder?

also momentan hat der Sensor bei vollem Füllstand eine kapazität von ca. 99 pF ... die Widerstände haben 1Megeohm und 2,5 Megaohm...
bei leeren Behälter hat der Kondensator eine Kapa von 20pF ...
Jetzt muss ich das Ganze halt in 10ms so messen und anhand von LEDs ausgeben...
also 100 % sind die 99pF ... und dann eben in 10ner Schritten runter ...

Bin mir halt noch sehr unsicher wie das jetzt am Besten zu schreibne ist ... also wie das Programm aussehen soll ...

So, die Schaltung wurde heut komplett vermessen.
Hab jetzt bei einem vollen Behälter ne Frequenz von fast 2kHz bei ca. 500?s (also 2000 Impulse in 1 sekunde) und bei einem leeren sinds 4 kHz bei 260?s (also 4000 Impulse in 1 Sekunde)

Deswegen brauch ich ein Zeitfenster in dem ich die Impulse messe... kann mir vll. jetzt jemand helfen ;-D

Anstatt zu messen wieviele Impulse in einem Zeitfenster kommen messe die Periodendauer und rechne daraus die Frequenz/Kapaziät/füllstand.
Das Signal hat ein festes Puls-Pausenverhältnis oder wird nur die Länge der Pause oder des Impulses verändert?

ZeitHIGH = pulseIn(pin, HIGH, 1000); zur Messung der Impulslänge und
ZeitLOW = pulseIn(pin, LOW, 1000); zur messung der Pausenlänge

Du kannst auch beides messen und dann summieren.

Grüße Uwe

hi also die Kapazität verändert mir die Frequenz... wenn die Kapazität größer wird, wird die Frequenz kleiner ... somit ändere ich die ganze Periodendauer...
wofür steht die 1000 bei pulsIn ?

Ich will mit 10 LEDs den Füllstand anzeigen... für die 10 Fülstände hab ich die jeweiligen Kapazitäten...
meinst du, mit deiner Möglichkeit funktioniert es besser?

kawa-racer:
hi also die Kapazität verändert mir die Frequenz... wenn die Kapazität größer wird, wird die Frequenz kleiner ... somit ändere ich die ganze Periodendauer...
wofür steht die 1000 bei pulsIn ?

... und die Periodendauer wird größer.
Die 1000 steht für Timout Zeit. Die Messung bricht nach 1000µSekunden ab.
http://arduino.cc/en/Reference/PulseIn

kawa-racer:
Ich will mit 10 LEDs den Füllstand anzeigen... für die 10 Fülstände hab ich die jeweiligen Kapazitäten...
meinst du, mit deiner Möglichkeit funktioniert es besser?

Ja, sonst hätte ich sie Dir nicht vorgeschlagen. Der Vorteil ist Du brauchst keine Interruptprogrammierung und eine Messung dauert nur 1-2 Periodendauern, also maximal 1mSekunde. Die LEDanzeige kannst Du auch direkt mit den gemessenen Zeiten errechnen zB mit einem einfachen map().
http://arduino.cc/en/Reference/Map

Grüße Uwe

ok ... sorry für die Fragen ^^... bin aber sehr interessiert an den ganzen Sachen.
Ist die Auswertung dann genauer oder eher ungenauer als die Messung der Impulse pro Zeitfenster?

Die Genauigkeit hängt von 2 Faktoren ab:

  1. Der Genauigkeit des Taktgenerators des Microcontrollers. Mit Quarz ist der Fehler in der Größenordnung von maximal 100ppm oder 0,01%; selbst mit ungenaueren Resonator ist die Genauigkeit um 0,1%.
  2. von der Länge der Meßzeit bzw dem Verhältnis Taktfrequenz zur Meßfrequenz. Bei 16Mhz zu 4kHz ist dieser Fehler vernachlässigbar.
    Also der Vorteil meines Lösungsansatzes ist daß die Messung weniger Zeit braucht und daß keine Interruptroutine notwendig ist. Der Code ist einige Zeilen lang. Bei einer erwünschten Auflösung von 10 Schritten sind beide Lösungen eigentlich viel zu genau.

Grüße Uwe

Klingt super ^^... bräuchte dann halt nur hilfe beim erstellen des Programmes... hoffe Du/Sie können mir da doch etwas helfen.
Aber schon mal besten Dank für den Lösungsvorschlag... das Fertige Projekt werde ich dann hier vorstellen.

MfG

Sie? wer? ah ich; besser Du!
Wir helfen Dir gerne. Einige wichtige Funktionen hatte ich Dir ja berets gegeben. Ansonsten einfach Kode einfügen und fragen
Grüße Uwe

Hab im Forum zwar einige Sachen gefunden nur werd ich nicht daraus ganz schlau... gibts es eine Möglichkeit das Arduino Uno Rev3 mit AVR Studio zu programmieren?

MfG

ja, aber IDE macht das auch und einfacher. Wieso möchtest Du AVR-Studio verwenden?

Was widersetzt sich Deinem Verständnis?

Grüße Uwe

das liegt einfach daran, dass wir schon in der Schule mit AVR Studio und C arbeiten ... somit nochmal ne Programmiersprache raussuchen is net so mein Ding ^^...

Wieso neue Programmiersprache?
IDE wird in C/C++ programmiert und für die arduinospezifischen bzw hardwarespezifischen Funktionen existieren Funktionen und Biblitheken.
Grüße Uwe

hmm ... mich irritiert halt z.b. pinmode statt das man DDRD= 0xff (für Ausgänge) schreibt ^^...

Funktioniert beides; IDE versteht alle Register direkt anzusprechen.
Es wird wenig gemacht da Arduino für nicht eingefleischte low lewel Programmierer mit profunden Kenntnissen der ATmega-Architektur bzw Innenleben gedacht ist. Es wird aber gemacht:
zB: Arduino Reference - Arduino Reference

Grüße Uwe