INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zwei Zeitkritische Interrupts gleich verarbeiten
05.01.2014, 13:18 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2014 14:53 von subseven.)
Beitrag #1
Zwei Zeitkritische Interrupts gleich verarbeiten
Hallo Zusammen,
vor gut 4 Wochen habe ich mit der Arduino-Programmierung angefangen.
Mein derzeitiges Projekt ist ursprünglich als digitaler Drehzahlmesser gestartet
und mittlerweile über Lichtsteuerung, Spannungsmessung usw. zu einer Art Boardcomputer fuer ein altes Auto geendet.

Das Problem welches ich jetzt nicht gelöst bekomme ist:

Zum Messen der Drehzahle fange ich mit einem Interrupt das Signal der Zündspule ab und verarbeite es.

Jetzt möchte ich für weitere Aufgaben die Zeit Messen in der Spannung an der Einspritzdüse anliegt (Quasi Einspritzdauer messen).

Dazu wollte ich eine Interruptroutine verwenden die bei einen "Change" des Interrupt-Ports ausgeführt wird, die Zeit zum letzten Change misst und schaut ob der Port HIGH oder LOW ist (um zu wissen, ob es die Zeitspanne fürs Einspritzen oder dazwischen ist).

Wie bekomme ich es jetzt umgesetzt, dass ich weiterhin die Drehzahlmesser und zuverlässig die Einspritzzeiten bestimmen kann?


Benötigen tue ich die um mit einem Tachosignal den Verbrauch auf 100KM zu errechnen.


Für Anregungen oder anderweitige Lösungsvorschläge bin ich dankbar.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2014, 20:06
Beitrag #2
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
(05.01.2014 13:18)subseven schrieb:  Hallo Zusammen,
vor gut 4 Wochen habe ich mit der Arduino-Programmierung angefangen.
Mein derzeitiges Projekt ist ursprünglich als digitaler Drehzahlmesser gestartet
und mittlerweile über Lichtsteuerung, Spannungsmessung usw. zu einer Art Boardcomputer fuer ein altes Auto geendet.

Das Problem welches ich jetzt nicht gelöst bekomme ist:

Zum Messen der Drehzahle fange ich mit einem Interrupt das Signal der Zündspule ab und verarbeite es.

Jetzt möchte ich für weitere Aufgaben die Zeit Messen in der Spannung an der Einspritzdüse anliegt (Quasi Einspritzdauer messen).

Dazu wollte ich eine Interruptroutine verwenden die bei einen "Change" des Interrupt-Ports ausgeführt wird, die Zeit zum letzten Change misst und schaut ob der Port HIGH oder LOW ist (um zu wissen, ob es die Zeitspanne fürs Einspritzen oder dazwischen ist).

Wie bekomme ich es jetzt umgesetzt, dass ich weiterhin die Drehzahlmesser und zuverlässig die Einspritzzeiten bestimmen kann?


Benötigen tue ich die um mit einem Tachosignal den Verbrauch auf 100KM zu errechnen.


Für Anregungen oder anderweitige Lösungsvorschläge bin ich dankbar.

Hallo,
nun den Einspritzimpuls kannst du wohl mit "pulseIn(PinNummer, HIGH);"
erfassen....aber ob die Arduino Umgebung den Zündimpuls per Int schnell
genug mitzählen kann bezweifle ich....
Ein ATmega direkt in Assembler programmiert schafft das aber sicherlich...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2014, 20:38 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2014 20:45 von rkuehle.)
Beitrag #3
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
Hallo subseven,

ich fürchte da wirst du mit zwei timern arbeiten müssen, die dann jeweils die Pins abfragen.
Schau dir dazu das mal an: http://playground.arduino.cc/code/timer
Eine gleichzeitige Überwachung / Abarbeitung zweier Hardware-Interrupts / ISRs mittels attachInterrupt() geht per Konzept nicht.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2014, 21:36 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2014 21:40 von subseven.)
Beitrag #4
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
(05.01.2014 20:06)Bitklopfer schrieb:  Hallo,
nun den Einspritzimpuls kannst du wohl mit "pulseIn(PinNummer, HIGH);"
erfassen....aber ob die Arduino Umgebung den Zündimpuls per Int schnell
genug mitzählen kann bezweifle ich....
Ein ATmega direkt in Assembler programmiert schafft das aber sicherlich...
lg
bk

Wie meinst du das? Das NanoBoard hat doch 16Mhz bei angenommenen 6000rpm
habe ich 24000 Impulse pro Minute (Pro Umdrehung 2 Einspritzvorgänge und zwei Zündimpulse), das muss es doch verarbeiten können, oder nicht?

Vielleicht kann ich auch am Kombiinstrument die Drehzahl direkt abgreifen, so wären es noch 18000 Impulse.


@rkuehle
Die Funktionsweise habe ich in Bezug auf mein Problem irgendwie nicht verstanden.


Als Notlösung könnte ich auch aus den Einspritzvorgängen die Drehzahl ableiten. Was aber beim Rollen, wenn kein Benzin eingespritzt wird, keine brauchbare Werte liefert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2014, 00:28
Beitrag #5
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
Hallo subseven,

wenn ich dein Problem richtig verstanden habe möchtest du letztlich die Zeiten zwischen Pegeländerungen an zwei Ports messen. Das ganze dann noch in recht hohem Tempo. In deinem Post steht, dass du Interrupts(Zündspule) nutzt
Das Problem bei den Interrupts ist, dass wenn ein Interrupt (Zündspule) getriggert wird (also die Pegeländerung erkannt wird) die zugewiesene Interruptroutine abgerarbeitet wird und nichts anderes sonst. Ergo kannst du während dieser Zeit nicht einen zweiten Interrupt (Einspritzdüse) triggern.
Einziger Weg scheint mir hier die Nutzung von Timern die zyklisch die Pegel an den zuständigen Pins holen. Sicher ist das nicht die Ideallösung, wenn man aber die Laufzeiten der Timer klein hält, sollten sich auswertbare Daten ergeben.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2014, 13:37
Beitrag #6
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
Das heisst ich würde für einen vorgegebenen Zeitraum den Port "messen" danach den anderen und anschließend das restliche Programm laufen lassen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2014, 17:22
Beitrag #7
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
Ja, genau so würde es ablaufen. Beim Setzen der Timerzeiten würde ich so vorgehen: Timerzeit in ms = 1 / (max. Impulszahl *2). So würde zwar bestenfalls nur jede zweite Messung eine Pegeländerung sehen, man könnte dies aber besser auswerten. In dem Link sieht man ein paar Beispiele wie man mehrere Timer setzen kann. Du kannst theoretisch zum "messen" ISR's benutzen. Allerdings sollte dann im Loop() nix drinstehen, was serielle Kommunikation oder delay() oä. enthält. Da diese Funktionen selbst mit Timer-Interrupts arbeiten würden deren Werte hinfällig.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2014, 20:40
Beitrag #8
RE: Zwei Zeitkritische Interrupts gleich verarbeiten
Ich muss nochmal einharken.

Die Timer kommen in den Setup Teil, dort definiere ich in welchem Intervall er den Pin abfragen soll.
Er tut das immer im selben Intervall und wirkt somit wie ein Interrupt.

Wie muss ich jetzt deine Rechnung verstehen?
Bei TimerZeit in MS=1/(max.Impuls*2) komme ich ja bei max 12000 Pulsen auf eine Timerzeit von 0,0416 Microsekunden was das Arduino garnicht kann.

Davon abgesehen verstehe ich auch nicht, wieso es nicht tragisch ist max jede zweite Pegeländerung zu sehen. Wie soll ich mit solchen Werten dann rechnen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Statt 1 SMS gleich unendliche bergfrei 7 169 17.10.2016 18:49
Letzter Beitrag: bergfrei
  Daten über USB verarbeiten Felix91 10 319 12.10.2016 13:00
Letzter Beitrag: Tommy56
  Zwei ident Feuchtesensoren an Arduino Uno R4 Karli 5 352 24.07.2016 23:36
Letzter Beitrag: SkobyMobil
Bug Mit zwei Ultraschallsensoren die Drehbewegung eines Servos steuern Poet 5 558 21.02.2016 18:37
Letzter Beitrag: Carlo
  Webserver erzeugt zwei Durchläufe. favicon.ico?!? WOHER??? BERND87 6 1.572 04.02.2016 13:56
Letzter Beitrag: Pit
  Zahlenformat bei Kommunikation mit zwei Arduinos Matthias_Arduino 5 632 07.01.2016 22:40
Letzter Beitrag: Bitklopfer
  Mit dem Pin 8 und 9 vom Yun werden zwei LED wechselseitig blinken über http arduinofan 1 550 08.12.2015 15:03
Letzter Beitrag: arduinofan
  Interrupts mit Arduino Due chhec 34 3.762 16.11.2015 08:42
Letzter Beitrag: chhec
  I2P mit zwei Microcontroller diode1990 2 551 26.10.2015 20:07
Letzter Beitrag: Bitklopfer
Photo Daten verarbeiten binderj1 0 432 13.10.2015 08:40
Letzter Beitrag: binderj1

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste