intererrupt atmega328p /arduino

Gast #4926765
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 ?
Gast #4926788
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);
}
Gast #4926815
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.
Gast #4927025
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
Gast #4927052
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
Gast #4927183
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.
Gast #4927198
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.
Gast #4927223
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 !
#4927229
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... :)
#4927490
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
Gast #4927529
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren