Interrupt zählt ohne Grund

Gast #3698474
Lesenswert?

Ohne weitere Informationen, kann man nur vermuten, das die Leitung vom 
Sensor zum Controller, Störimpulse aus der Umgebung einfängt. Dagegen 
könnte ein kleiner Kondensator vom µC-Eingang nach Masse (Tiefpass) 
helfen. Der Wert nängt natürlich von der genauen Beschaltung ab...
Gast #3698485
Lesenswert?

Ingo Wendler schrieb:
> Dagegen könnte ein kleiner Kondensator vom µC-Eingang nach Masse
> (Tiefpass) helfen.
Ein einzelner Kondensator würde bei Störimpulse mit zu kleiner 
Ladungsmenge dafür sorgen, dass die Schaltschwelle nicht überschritten 
wird. Für einen echten Tiefpass müßte noch ein Widerstand in die 
Leitung.
Der Eingang sollte in beiden Fällen Schmitt-Trigger Charakteristik 
besitzen.
Gast #3698657
Lesenswert?

Also der Code ist im Anhang. Ich habe bewusst den Regensensor genommen, 
da der noch etwas einfacher als der Windsensor ist.

Ich verwende die Bridge Library zum Auslesen der Daten.

Der Regensensor stammt aus der Wetterstation von Sparkfun. Ein Kontakt 
des Regensensors ist auf D8 (HIGH) und INT3 (Pin1) der andere an GND.

Damit sollte GND D8 runterziehen und einmal zählen. Stattdessen zählt er 
pro Sekunde ca 40 hoch. Egal ob da etwas angeschlossen sit oder nicht.
Angehängte Dateien:
Gast #3698671
Lesenswert?

Berger schrieb:
> Stattdessen zählt er
> pro Sekunde ca 40 hoch. Egal ob da etwas angeschlossen sit oder nicht.

Dann vergiß erstmal den Regensensor und häng an den Eingang nur einen 
zusätzlichen Pull-Up, z.B. 4k7. Dann muss Ruhe herrschen.

Als nächstes könntest du einen Rechteckgenerator mit bekannter Frequenz 
anschließen ...

Warum fragst du in deiner Interrupt-Routine eigenlich deinen Zeitzähler 
bis zu 3 Mal ab (und bekommst jedesmal ein anderes Ergebnis)?
Und wenn du rain_last auch bei ungültigen Impulsen aktualisierst, trägt 
das nicht gerade zur Genauigkeit des Zeitwertes bei.
Gast #3698691
Lesenswert?

Eigentlich wollte ich endlich mal den Schaltplan sehen. War wohl nix. 
Mit "Windsensor" Datenblatt is auch nix. Nach was soll man da suchen. Is 
ja auch nicht verlinkt. Schei... Programm öffnen ... Mit Notepad kriegt 
man nur Textmüll. Andere Programme probiere ich nicht mehr. Arduino 
Spezialisten werden ihn wohl lesen können ... ob es was bringt? Keinen 
Bock mehr, gehe an die frische Luft - bringt mehr als ein Danke.
Gast #3698731
Lesenswert?

ciao schrieb:
> Mit Notepad kriegt man nur Textmüll. Andere Programme probiere ich nicht
> mehr. Arduino Spezialisten werden ihn wohl lesen können ...

Das sind ganz normale Textdateien. Nur weil die File Extension "INO" 
ist, mußt du nicht gleich beleidigt sein.

Peinlich genug ist es für Notepad. Das Schei.ding aus den Anfängen der 
PC-Zeit kommt einfach mit einem einfache Linefeed am Zeilenende nicht 
zurecht.

Nimm Notepad++, dann hast du das Problem vom Tisch
http://notepad-plus-plus.org/
#3698752
Lesenswert?

Berger schrieb:
> Ich habe einen Sketch bei dem ich einen Windsensor auslese. Der
> interrupt zählt mir allerdings hoch ohne dass das Rad dreht. Was könnte
> das sein?

Du verwendest den internen PullUp-Widerstand am Reedkontakt:
1
pinMode(PIN_RAINMETER, INPUT);
2
  digitalWrite(PIN_RAINMETER, HIGH);

Die internen PullUps der Atmega-Controller haben einen Wert von ca. 20K 
bis 50K und pullen die Leitung sehr schwach.

Sobald Du zwischen Controller und Schalter eine "lange Leitung" hast, 
reichen diese schwachen PullUps nicht mehr.

Verwende einen externen PullUp-Widerstand, Standardwert 4.7K.
Gast #3698755
Lesenswert?

Jürgen S. schrieb:
> Sobald Du zwischen Controller und Schalter eine "lange Leitung" hast,
> reichen diese schwachen PullUps nicht mehr.

Berger schrieb:
> Stattdessen zählt er pro Sekunde ca 40 hoch. Egal ob da etwas
> angeschlossen sit oder nicht.

Unter "nichts angeschlossen" hätte ich verstanden, dass da auch keine 
"lange Leitung" angeschlossen ist. But who knows ...
Gast #3698796
Lesenswert?

Moin schrieb:
> Das sind ganz normale Textdateien. Nur weil die File Extension "INO"
> ist, mußt du nicht gleich beleidigt sein.
>
> Peinlich genug ist es für Notepad. Das Schei.ding aus den Anfängen der
> PC-Zeit kommt einfach mit einem einfache Linefeed am Zeilenende nicht
> zurecht.
>
> Nimm Notepad++, dann hast du das Problem vom Tisch
> http://notepad-plus-plus.org/

Was sind denn "normale" Textdateien in deinen Augen? Ich probiere 
jedenfalls nicht lange rum, besonders dann nicht, wenn man auch noch 
hinter anderen Angaben herlaufen muß, die auch schon genügend 
nachgefragt wurden.
#3698800
Lesenswert?

Hallo Berger,

Du schreibst:
1
#define PIN_RAINMETER   8     // Digital 8
2
  pinMode(PIN_RAINMETER, INPUT);
3
  digitalWrite(PIN_RAINMETER, HIGH);
4
  attachInterrupt(3, countRainmeter, FALLING);

Laut http://arduino.cc/en/Main/ArduinoBoardYun: "External Interrupts: 3 
(interrupt 0), 2 (interrupt 1), 0 (interrupt 2), 1 (interrupt 3) and 7 
(interrupt 4). These pins can be configured to trigger an interrupt on a 
low value, a rising or falling edge, or a change in value. See the 
attachInterrupt() function for details. Is not recommended to use pins 0 
and 1 as interrupts because they are the also the hardware serial port 
used to talk with the Linux processor."


Du benutzt Arduino Interrupt 3? Der triggert doch auf Arduino Pin 1, 
nicht auf Arduino Pin 8? Wie soll das dann gehen? Mal ganz abgesehen 
davon, dass Arduino Pin 1 für die Bridge-Kommunikation benötigt wird ...

LG, Sebastian
Gast #3698881
Lesenswert?

ciao schrieb:
> Schei... Programm öffnen ... Mit Notepad kriegt
> man nur Textmüll
Nö, kein Textmüll, weder mit dem normalen windows notepad noch mit 
notepad++, mit dem windows notepad fehlen nur die zeilen umbrüche so das 
alles in 2 zeilen steht. Sogar Wordpad und M$-Word kann die Datei 
problemlos öffnen (gerade ausprobiert). Da liegt das Problem, beim 
öffnen und anschauen der Datei, ganz klar nicht an der Datei oder dem 
Editor...

ciao schrieb:
> Was sind denn "normale" Textdateien in deinen Augen?
alles das, wo klartext drin steht. auch eine .c .cpp .hpp .make .lss 
.map datei ist nichts anderes als eine normale textdatei. Selbst eine 
.hex-Datei würde ich noch fast dazu zählen, weil die hex-Werte als 
klartext drin stehen. .bin oder .elf dateien sind für mich z.B. keine 
"normalen" Textdateien mehr, weil dort kein klartext drin steht.

ciao schrieb:
> Ich probiere jedenfalls nicht lange rum
Brauch man ja auch nicht... rechts klick --> öffnen mit... und den 
Editor deiner Wahl aussuchen. Alterantiv, wenn man den Total Commander 
hat, einfach F3 drücken.

Aber für alle die das nicht hin bekommen:
1
#include <Bridge.h>
2
#include <YunServer.h>
3
#include <YunClient.h>
4

5
#define uint  unsigned int
6
#define ulong unsigned long
7

8
#define PIN_RAINMETER   8     // Digital 8
9

10
long rain_last = 0;
11
volatile int RegenCounter = 0;
12

13

14
YunServer server;
15

16
void setup() {
17
  pinMode(13,OUTPUT);
18
  digitalWrite(13, LOW);
19
  Bridge.begin();
20
  digitalWrite(13, HIGH);
21
  server.listenOnLocalhost();
22
  server.begin();
23
  
24
  
25
  pinMode(PIN_RAINMETER, INPUT);
26
  digitalWrite(PIN_RAINMETER, HIGH);
27
  attachInterrupt(3, countRainmeter, FALLING);
28
}
29

30

31
void loop() {
32
  YunClient client = server.accept();
33
  if (client) {
34
    process(client);
35
    client.stop();
36
  }
37

38
  delay(50);
39
}
40

41
void process(YunClient client) {
42
  String command = client.readStringUntil('/');
43
  if (command == "regen") {
44
    getRegenMenge(client);
45
  }
46
}
47

48
void countRainmeter()
49
{
50
  long thisTime = micros() - rain_last;
51
  rain_last = micros();
52
  if (thisTime > 500)
53
  {
54
    RegenCounter++;
55
    rain_last = micros(); //verhindert Prellen
56
  }
57
}
58

59
void getRegenMenge(YunClient client) {
60
  double Menge = 0.2794;
61
  double Regenmenge = Menge * RegenCounter;
62
  client.print(F(" X Counter Regen "));
63
  client.println(RegenCounter);
64
  client.print(F(" X Regenmenge "));
65
  client.println(Regenmenge);
66

67
  RegenCounter = 0;        // Reset Zähler
68
}

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