Liebe Leute ! Ich hätte gern eure Hilfe um folgendes Problem zu lösen bzw. zu erklären. Ein "WATER FLOW SENSOR" hängt mit Pin 2 am Arduino-board -:) Eine interrupt-routine zählt die Impulse. Funktioniert auch - aber es werden immer wieder einzelne Impulse gezählt welche nicht vom Sensor kommen (das Oszi am Eingangspin 2 kann keine Impulse erkennen)! Ein in der Nähe (0,5 Meter) schaltendes Relais löst aber einige Impuls aus ?! Gibts dafür eine Erklärung bzw. Lösung ?
Schaltbild ist ja wohl überflüssig (Sensor: +5V GND DATA) Hier der Code: -------------------------------------------------- const byte FlowPin = 2; unsigned long Impule=0; volatile byte ImpulsLedState = LOW; // Led status const byte LedImpuls = 13; // onboard-led //################## interruptroutine ##################### // impulse zaehlen und Led status toogeln void FlowAct() { ImpulsLedState = !ImpulsLedState; digitalWrite(LedImpuls,ImpulsLedState); Impule++; } void setup() { Serial.begin(9600); // open the serial port at 9600 bps pinMode(LedImpuls, OUTPUT); // ImpulseLed // interrupt Flowmeter pinMode(FlowPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(FlowPin), FlowAct, CHANGE); } void loop() { Serial.print("SUMME Impule: "); Serial.println(Impule); delay(5000); }
nixwasigenau schrieb: > Schaltbild ist ja wohl überflüssig Nein. Und nach jetzigen Erkenntnissen ist sogar dein Aufbau nicht überflüssig.
nixwasigenau schrieb: > unsigned long Impule=0; Warum nicht auch volatile? >digitalWrite(LedImpuls,ImpulsLedState); Waum dieses im Interrupt? bayuwaare schrieb: > Das ist ja kein Code, das ist ja Arduino. Sehr konstruktiver Beitrag, echt jetzt. Es soll tatsächlich Leute da draußen geben, die die Arduino IDE, z.B. u.a. ich, nutzen und gut mit zurechtkommen. Für kleine Projekte zum Vortesten ohne sich über die Tiefen der Fuses und Dude's gedanken machen zu müssen, ideal. Wenn dann eine Projekt über Q&D hinaus kommen sollte (90% meiner Spielereien werden nie älter als 24h) dann wechsel ich die Umgebung.
bayuwaare schrieb: > Das ist ja kein Code, das ist ja Arduino. Qualitativer Beitrag, hauptsache man schreibt mal irgendeinen Müll. Natürlich ist das Code aber eben in der Arduino IDE. Muss nicht alles in C, Assembler oder sonstiges programmiert sein. Alexander J. schrieb: > nixwasigenau schrieb: >> unsigned long Impule=0; > > Warum nicht auch volatile? Muss ich dem Vorredner zustimmen. Variablen welche global definiert sind definiere ich meist volatile aus dem einfachen Grund, dass diese Variable IMMER den aktuellen Wert erhält, auch bei einer Funktionsübergabe, wobei ich dennoch auf Zeiger verweise. > >>digitalWrite(LedImpuls,ImpulsLedState); > > Waum dieses im Interrupt? Ist auch richtig. Interrupt immer so schnell wie möglich verlassen. Lieber ein Statusbit setzen und in der Main z.B. abfragen Liebe Grüße
Franz. B schrieb: > Interrupt immer so schnell wie möglich verlassen. > Lieber ein Statusbit setzen und in der Main z.B. abfragen Franz. B schrieb: >>>digitalWrite(LedImpuls,ImpulsLedState); ... gilt jetz nicht gerade als Zeitverschwender, daher in der ISR durchaus "zulässig" .... (you mileage may vary)
bayuwaare schrieb: > ... gilt jetz nicht gerade als Zeitverschwender, daher in > der ISR durchaus "zulässig" .... (you mileage may vary) Mag sein dass es das nicht ist, allerdings scheint es so als sei der TE Anfänger in Programmierung. Lieber gleich einen guten Programmierstil erlernen als nachträglich umstellen. Früher oder später kommt es auf solche Zeiten an
bayuwaare schrieb: > ... gilt jetz nicht gerade als Zeitverschwender Alles relativ. Afaik braucht nen digitalWrite in der Arduino-Welt so 70 bis 80 Takte.
ALSO - Diese Diskussion ist von meinen eigentlichen Problem weit weg und hilft mir überhaupt nicht weiter. Das Programm (Sketch) ist ein Schnelltest um dem Problem der willkürlich gezählten Impulse auf die Spur zu kommen. Da ist es sicher wurscht ob in der Interruptroutine eine Led geschalten wird oder nicht (ist im Orginal sowieso nicht so). Schade - hatte auf Tipps gehofft, trotzdem Danke.
nixwasigenau schrieb: > Schade - hatte auf Tipps gehofft, trotzdem Danke. Du wolltest doch gar keine Hilfe, denn du hattest geantwortet: nixwasigenau schrieb: > Schaltbild ist ja wohl überflüssig (Sensor: +5V GND DATA)
Franz. B schrieb: > Muss ich dem Vorredner zustimmen. Variablen welche global definiert sind > definiere ich meist volatile aus dem einfachen Grund, dass diese > Variable IMMER den aktuellen Wert erhält, auch bei einer > Funktionsübergabe, wobei ich dennoch auf Zeiger verweise. das ist Unsinn. volatile macht nur sinn in Kombination mit Threads oder Interrupts. Zu viele volatile verhindert nur zuverlässig eine sinnvolle Optimierung vom Compiler. Da kannst du auch gleich die Optimierung abschalten.
@Route 66 / @bayuwaare
> Schaltbild ist ja wohl überflüssig (Sensor: +5V GND DATA)
Also wenn ihr für den Anschluß von 3 Drähten auf ein Arduino Board einen
Schaltplan braucht .... - dann lasst es einfach !
nixwasigenau schrieb: > @Route 66 / @bayuwaare >> Schaltbild ist ja wohl überflüssig (Sensor: +5V GND DATA) > > Also wenn ihr für den Anschluß von 3 Drähten auf ein Arduino Board einen > Schaltplan braucht .... - dann lasst es einfach ! möglicherweise ging's den Leuten ja nur darum zu sehen, wie gross dein Pullup an Pin2 und ggf. die Abblock-Cs sind... Sind ja sicher vorhanden... :)
Jan L. schrieb: > möglicherweise ging's den Leuten ja nur darum zu sehen, wie gross dein > Pullup an Pin2 und ggf. die Abblock-Cs sind... Sind ja sicher > vorhanden... :) bayuwaare schrieb: > Und nach jetzigen Erkenntnissen ist sogar dein Aufbau > nicht überflüssig.
Eingangspost: nixwasigenau schrieb: > mit Pin 2 am Arduino-board -:) Erste Antwort: bayuwaare schrieb: > Das ist ja kein Code, das ist ja Arduino. Herrlich ;) Jan L. schrieb: > möglicherweise ging's den Leuten ja nur darum zu sehen, wie gross dein > Pullup an Pin2 und ggf. die Abblock-Cs sind... Sind ja sicher > vorhanden... :) In der Hoffnung, daß die Arduino-Götter auf den Bords solche Kleinigkeiten drauf gebäppt haben ... zumindest an der Versorgung. So wie sich Das hier liest, koppeln hier Störungen von einem Relais ein - da könnte vll. sogar schon der erwähnte Keramik-Kondensator zwischen Sensor und GND helfen, Diese nach GND abfließen zu lassen. Ein Oszi wird wohl nicht vorhanden sein? MfG
Patrick J. schrieb: > So wie sich Das hier liest, koppeln hier Störungen von einem Relais ein > - da könnte vll. sogar schon der erwähnte Keramik-Kondensator zwischen > Sensor und GND helfen, Diese nach GND abfließen zu lassen. Ja genau, einen Kondensator irgendwo in die unbekannte Schaltung und schon ist alles geheilt. Patrick J. schrieb: > Diese nach GND abfließen zu lassen. Übrigens können über einen Kondensator (auch wenn es ein Keramik- Kondensator ist) keine "Störungen abfließen". Über zwei gegen- überstehende Platten fliesst nix. Patrick J. schrieb: > Ein Oszi wird wohl nicht vorhanden sein? Selbst wenn es da wäre würde es nix helfen.
bayuwaare schrieb: > Über zwei gegenüberstehende Platten fliesst nix. Du bist ja ein ganz schlauer, oder? Schon mal davon gehört, daß Störungen nicht nur aus DC bestehen?
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.