Forum: Mikrocontroller und Digitale Elektronik intererrupt atmega328p /arduino


von nixwasigenau (Gast)


Lesenswert?

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 ?

von Andreas I. (andy5macht)


Lesenswert?

Ganz ohne Code und Schaltbild?
Nein.

von bayuwaare (Gast)


Lesenswert?

nixwasigenau schrieb:
> nixwasigenau

mirwissnaaaanix

von nixwasigenau (Gast)


Lesenswert?

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);
}

von bayuwaare (Gast)


Lesenswert?

Das ist ja kein Code, das ist ja Arduino.

von bayuwaare (Gast)


Lesenswert?

nixwasigenau schrieb:
> Schaltbild ist ja wohl überflüssig

Nein.

Und nach jetzigen Erkenntnissen ist sogar dein Aufbau
nicht überflüssig.

von Alexander J. (Gast)


Lesenswert?

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.

von Franz. B (Gast)


Lesenswert?

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

von bayuwaare (Gast)


Lesenswert?

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)

von Franz. B (Gast)


Lesenswert?

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

von Nico W. (nico_w)


Lesenswert?

bayuwaare schrieb:
> ... gilt jetz nicht gerade als Zeitverschwender

Alles relativ. Afaik braucht nen digitalWrite in der Arduino-Welt so 70 
bis 80 Takte.

von nixwasigenau (Gast)


Lesenswert?

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.

von Route_66 H. (route_66)


Lesenswert?

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)

von Peter II (Gast)


Lesenswert?

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.

von nixwasigenau (Gast)


Lesenswert?

@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 !

von Jan L. (ranzcopter)


Lesenswert?

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... :)

von bayuwaare (Gast)


Lesenswert?

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.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

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

von bayuwaare (Gast)


Lesenswert?

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.

von Huh (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.