Moinsen, hab hier ein Durchflusssensor der mir 12000 Impulse / Liter gibt (Bei jedem Impuls wechselt eine LED ihren Zustand (Toggeling) (High Low High Low High Low.. ihr wisst schon) Natürlich will ich die Durchflussmenge kontinuirlich berechnen und ausgeben, ist da PulseIn das richtige Command für, und schnell genug? Es gibt ja auch noch den pinchange interrupt, allerdings will ich in meinem Programm keinen Interrupt haben, da ich nebenbei auch noch andere Messwerte auswerten will. Aber wenn ich richtig verstanden hab was ein interrupt macht, dann würde dieser ja mein Programm unterbrechen und ich würde andere Messwerte verpassen. Paule.
Brauch halt eigentlich nicht die Dauer des Zustandes sondern mir würde reichen, wenn ich sagen wir mal alle 10ms weiß, wieviele Impulse ich bekommen hab.
Paul schrieb: > Aber wenn ich richtig verstanden hab was ein > interrupt macht, dann würde dieser ja mein Programm unterbrechen und ich > würde andere Messwerte verpassen. Ja das große Problem. Interrupts sind einfach nicht zu gebrauchen wenn man mehere Dinge tun will. Die wurden nur erfunden um das Programm (welches eh nichts anderes nebenher tut als zu warten) zu unterbrechen wenn was passiert. Mehrere Dinge schreibt man am besten einfach alle untereinander in eine große main(), dann wird auch nix unterbrochen und man bekommt alles mit. Leider sind die meisten Leute nicht so schlau, und verwenden dafür glatt Interrupts. Zum Glück hast du das Problem richtig erkannt. gruß cyblord
Schau mal dieses Thema, Beitrag "ca. 40 - 60 kHz mit "Pin Change Interrupt" (ATtiny48) zählen?!" Hier wird 40-60 kHz gezählt. Die meisten Antworten sagen, dass es bei 8 MHz knapp wird, aber doch möglich sein könnte. Deine Frequenz ist mit 12000 Imps/liter geringer. Wie groß ist der Durchfluss? 0,01 - 10 Liter pro Minute?, dann kast Du zwischen 120-120000 Impulse pro Minute, also 2 - 2 kHz. Damit bist Du weit von 50 kHz entfernt und damit hast Du genügeng Zeit um per ISR zur zählen. Poste mal den Code, dieser sollte "schnell" sein in der ISR. Hast Du Dir die Signal mal mit einem Oszi angeschaut? Viele Grüße MBr
Paul schrieb: > Brauch halt eigentlich nicht die Dauer des Zustandes sondern mir würde > reichen, wenn ich sagen wir mal alle 10ms weiß, wieviele Impulse ich > bekommen hab. Mann, das sollte ein Witz werden. Du musst schon ein paar Eckdaten nennen. Platform, Taktfrequenz etc... cyblord ---- schrieb: > Interrupts sind einfach nicht zu gebrauchen wenn > man mehere Dinge tun will. Aua, manchmal tun die Post richtig Weh und ich schäme mich für die menschliche Rasse. Ja klar, interrupts sind voll überflüssig. Die hat man sich ausgedacht, damit die Doofen Fehler machen. cyblord ---- schrieb: > Mehrere Dinge schreibt man am besten einfach alle untereinander in eine > große main(), dann wird auch nix unterbrochen und man bekommt alles mit. > Leider sind die meisten Leute nicht so schlau, und verwenden dafür glatt > Interrupts. Zum Glück hast du das Problem richtig erkannt. Mupitz! Wer so blöd ist und hundert Zeilen Code in den Interrupt packt der ist selber schuld. Stichwort: Ringbuffer, DMA, vielleicht solltest Du Dich mal damit auseinander setzen.
@ cyblord ---- (cyblord) >> Aber wenn ich richtig verstanden hab was ein >> interrupt macht, dann würde dieser ja mein Programm unterbrechen und ich >> würde andere Messwerte verpassen. >Ja das große Problem. Interrupts sind einfach nicht zu gebrauchen wenn >man mehere Dinge tun will. Selten so einen Käse gehört. Naja, wir wissen ja von wem es kommt.
@ Paul (Gast) >hab hier ein Durchflusssensor der mir 12000 Impulse / Liter gibt (Bei >jedem Impuls wechselt eine LED ihren Zustand (Toggeling) (High Low High >Low High Low.. ihr wisst schon) Und wie hoch ist die maximale Durchflußmenge und damit die maximale Pulsfrequenz? >Natürlich will ich die Durchflussmenge kontinuirlich berechnen und >ausgeben, ist da PulseIn das richtige Command für, und schnell genug? Klingt nach Arduino, richtig? >Es gibt ja auch noch den pinchange interrupt, allerdings will ich in >meinem Programm keinen Interrupt haben, da ich nebenbei auch noch andere >Messwerte auswerten will. Nö, weil du das Thema Interrupt noch nie richtig verstanden hast und Angst davor hast. > Aber wenn ich richtig verstanden hab was ein >interrupt macht, dann würde dieser ja mein Programm unterbrechen und ich >würde andere Messwerte verpassen. Nicht, wenn man es richtig macht.
Hahahaha, ich glaub ein weiteres Problem ist, das manche Leute Ironie in hohen Dosen nicht erkennen. Zumindest kann ich mir net vorstellen, das Cyblord seinen Beitrag ernst gemeint hat.... aber evtl liegt das natürlich nur daran, das ich ihn nicht wirklich kenne ~mit den Schultern zuck..... MfG Chaos
@cyblord ---- (cyblord) Erst nächst Woche beginnt der Fasching. Nur deswegen warten wir noch bis wir richtig loslachen über deinen Text.
j. t. schrieb: > Hahahaha, ich glaub ein weiteres Problem ist, das manche Leute Ironie in > hohen Dosen nicht erkennen. Ist weit verbreitet. @Klaus: Bin leider kein Jeck, darum bedeutet mir der 11.11 leider nichts.
:
Bearbeitet durch User
Is nen Arduino Mega 2560 den ich da hab. Code kann ich leider nicht posten, bin gerade nicht zuhause. Ich denke das werden maximal 10 l / min also müsste das schon klappen. In dem Interrupt müsste ja auch eigentlich nur ne Variable geändert werden, mit der ich dann draußen rechnen kann, aber wenn das Programm ständig Interrupted wird weiß ich ja nicht inwiefern das Einfluss auf den Rest hat? Die Lösung hier sieht doch eigentlich ganz gut aus, oder? : http://forum.arduino.cc/index.php?topic=165716.0
Paul hat uns leider nicht gesagt um welche Durchflussmenge es geht. 2..5..100 m^3 pro sekunde oder was.
Wie gesagt Durchflussmenge sind so um die 10l/min maximal .. also müsste das ja mit nem PinChangeInterrupt wahrscheinlich auch gehen. Wird schon klappen.
Paul schrieb: > Ich denke das werden maximal 10 l / > min also müsste das schon klappen. ^^ sacht er doch.... bei 12K-Impulsen/l macht das also 120K-Impulse/min ---> 120K/60 = 2K Du hast also um die 2KHz und das ist geradezu lächerlich langsam für son klein Mikroprofessor =) Und überleg dir, dich evtl doch mal Interrupts zu befassen. Sooooo doof sind die nun auch wieder nicht =)
:
Bearbeitet durch User
Warum nimmst du eigentlich nicht einen der vier eingebauten 16-Bit-Zähler des ATmega2560? Der zählt die Impulse an Pin ICP1 (oder ICP3/4/5) ganz alleine.
Kompetenteste Antwort des Tages Markus, danke. Gibs auch irgendwo nen Forum wo man nicht gleich für Unwissenheit oder zu wenig Ahnung ausgelacht wird? Irgendwo muss man ja auch die Anfängerfragen stellen dürfen ;)
@ Paul (Gast) >Kompetenteste Antwort des Tages Markus, danke. Gibs auch irgendwo nen >Forum wo man nicht gleich für Unwissenheit oder zu wenig Ahnung >ausgelacht wird? Den OP hat keiner ausgelacht, einen anderen Poster schon. Ob das nun wirklich Ironie war oder nicht, wer weiß. Zweckdienlich war die Antwort nicht wirklich. >Irgendwo muss man ja auch die Anfängerfragen stellen dürfen ;) Auch hier.
Markus Weber schrieb: > Warum nimmst du eigentlich nicht einen der vier eingebauten > 16-Bit-Zähler des ATmega2560? > > Der zählt die Impulse an Pin ICP1 (oder ICP3/4/5) ganz alleine. Wenn man es umständlich machen möchte, geht es natürlich auch damit. Aber zum Zählen nimmt man eigentlich T1 usw. mfg.
cyblord ---- schrieb: > j. t. schrieb: >> Hahahaha, ich glaub ein weiteres Problem ist, das manche Leute Ironie in >> hohen Dosen nicht erkennen. > > Ist weit verbreitet. So ist das bei den Pappnasen. Ohne "Däädää Däädää Däädää" schnallen die das einfach nicht. > @Klaus: > Bin leider kein Jeck, darum bedeutet mir der 11.11 leider nichts. Nicht leider sondern Gott sei Dank. mfg. PS: http://www.ndr.de/ndr2/programm/sendungen/der_ndr2_morgen/gruenkohl305.html
:
Bearbeitet durch User
Thomas Eckmann schrieb: > Wenn man es umständlich machen möchte, geht es natürlich auch damit. > Aber zum Zählen nimmt man eigentlich T1 usw. Stimmt, T1 ist hier sinnvoller. Danke für den Einwurf!
Thomas Eckmann schrieb: > Wenn man es umständlich machen möchte, geht es natürlich auch damit. > Aber zum Zählen nimmt man eigentlich T1 usw. Markus Weber schrieb: > Stimmt, T1 ist hier sinnvoller. Danke für den Einwurf! Sehr schön, was für "neue" Ideen man als Arduino-Programmierer in diesem Forum erhält. Allerdings dürfte es typische Arduino-Programmierer ohne detaillierte Hardwarekenntnisse leicht bis mittelschwer überfordern, das hier mitgeteilte in lauffähigen Code umzusetzen. Erst recht blutige Anfänger, die nach der für sämtliche Zwecke völlig unbrauchbaren Arduino-Funktion "pulseIn()" fragen, über die man eigentlich nur wissen muss, dass man so eine Drecksfunktion niemals ernsthaft in seinen Programmen verwenden sollte. Für Paul hier also ein kleiner Arduino-Sketch zum Testen, für die Zählung von Impulsen an Pin D5 mit einem Arduino UNO Board:
1 | /* |
2 | * Arduino UNO Impulse Counter on digital pin D5 |
3 | * |
4 | * Compatible with: Atmega328 and Atmega168 |
5 | * Uses pin D5 and timer 1 on Arduino UNO |
6 | * So do not use with any library that uses timer 1 for itself! |
7 | * Do not use on other boards except UNO without proper modifications! |
8 | */ |
9 | |
10 | void setup() |
11 | { |
12 | Serial.begin(9600); |
13 | startCounting(); |
14 | } |
15 | |
16 | void startCounting() |
17 | { // sets hardware timer 1 as a hardware impulse counter |
18 | noInterrupts(); |
19 | TCCR1A=0; // reset timer/counter control register A |
20 | bitSet(TCCR1B ,CS12); // Counter Clock source is external pin |
21 | bitSet(TCCR1B ,CS11); // Clock on rising edge |
22 | TCNT1 = 0; // reset the hardware counter |
23 | interrupts(); |
24 | } |
25 | |
26 | void loop() |
27 | { |
28 | static unsigned long lastSampleMillis; |
29 | if (millis()-lastSampleMillis>=1000) |
30 | { |
31 | lastSampleMillis=millis(); |
32 | noInterrupts(); |
33 | int count = TCNT1; // read hardware counter |
34 | TCNT1 = 0; // reset the hardware counter |
35 | interrupts(); |
36 | Serial.println(count); |
37 | } |
38 | } |
Vielleicht hilft's ja.
Falk Brunner schrieb: > @ cyblord ---- (cyblord) > >>> Aber wenn ich richtig verstanden hab was ein >>> interrupt macht, dann würde dieser ja mein Programm unterbrechen und ich >>> würde andere Messwerte verpassen. > >>Ja das große Problem. Interrupts sind einfach nicht zu gebrauchen wenn >>man mehere Dinge tun will. > > Selten so einen Käse gehört. Naja, wir wissen ja von wem es kommt. zum Verständnis von Ironie bedarf es einer gewissen Höhe von Intelligenz.
Paul schrieb: > Natürlich will ich die Durchflussmenge kontinuirlich berechnen und > ausgeben, ist da PulseIn das richtige Command für, und schnell genug? Wenn du aus deinen Pulsen den Volumenstrom, also Volumen pro Zeit ableiten möchtest, wäre ein zweiter Timer sehr praktisch, der per Timerinterrupt einen festen Zeittakt zum Ablesen des Pulszähltimers erzeugt. In der ISR wird dann der Zählerstand des Volumenzählers abgelesen. Das Hauptprogramm kann dann in aller Ruhe die Differenz zur vorherigen Ablesung bestimmen und den in physikalieschen Einheiten skalierten Volumenstrom berechnen. @Franz Dieser Beitrag enthält KEINE Ironie Franz schrieb:
Beitrag #6944509 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.