Pages: [1]   Go Down
Author Topic: Zeitdifferenz der Digitaleingänge messen  (Read 695 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich hab ein kleines Problem, ich nutze das Arduino Mega 2560 Board.
Das Problem ist das ich das Board nutzen möchte um eine Zeitdifferenz anzeigen zu können mit Hilfe von 2 verschiedenen Digitaleingängen zb. Buttons, die Zeiten halten sich in Millisekunden bereiche auf.
Nur leider erfasst das Programm die Zeit nicht richtig, daher auch meine Frage ob eine abfrage der Buttons noch ein zusätzliches delay mit sich bringt?
Ich hoffe ihr könnt mir helfen.

Code:
#include <SerialLCD.h>
#include <NewSoftSerial.h>


SerialLCD slcd(11,12);
const int buttonPin2 = 2;    
const int buttonPin3 = 3;  

int buttonState2 = 0;    
int buttonState3 = 0;    
const int Pin13 =  13;    
const int Pin8 =  8;    
int delayadd=0;

void setup() {
  slcd.begin();
  slcd.print("..");
  pinMode(Pin13, OUTPUT);  
  digitalWrite(Pin13, HIGH);
  pinMode(Pin8, OUTPUT);  
  digitalWrite(Pin8, HIGH);
}

void loop() {
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
 
 if (digitalRead(buttonPin2) == HIGH) {    
    delayadd=0;
    digitalWrite(Pin13, LOW);
    delaystart();
  }

}
void delaystart(){
  int stopp=0;
  while(stopp<1){
    delay(1);
    delayadd++;
    if (digitalRead(3) == HIGH) {
      slcd.clear();
      slcd.print(delayadd,DEC);
      digitalWrite(Pin8, LOW);
      stopp=1;
    }
  }
}
« Last Edit: December 09, 2011, 09:50:13 am by ScrewShield » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21650
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie genau muß es ein?
im µSec Bereich dann beide Signale zuerst Hardware-Entprellen und dann auf 2 Interrupteingänge.
Im mSec Bereich dann dauernd die Eingänge abfragen.
Noch genauer: ein RS-FlipFlop durch die 2 Taster triggern und die Länge des Impulses mit pulseIn() messen. So entfällt die Notwendigkeit des Entprellen.
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
danke guter Tipp, aber später würd ich gern die Signale über die Analogen Ports laufen lassen.
Es soll dann so aussehen:
Wenn Port A0 einen bestimmten Messwert erreicht hat soll Messung beginnen wenn A1 der Wert erreicht ist dann Messung beenden, und das in ms ausgeben.
Meist liegt der Wert dann bei 1-5ms kann aber auch 20-40 werden
Gruß zurück
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21650
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mißt Du jetzt an Digitaleingängen oder an Analogeingängen?
Vergiß das mit analogen Signalen dazu ist die Konvesion und die kontrolle langsam. Wenn Du umbedingt Analoge signele triggern willst dann rate ich dies mit pro Kanal einen Komparator ( mit einem Operationsverstärker) zu machen.
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Textausgabe auf das LCD dauert "ewig". Sobald die Messung begonnen hat, solltest Du nichts mehr auf dem LCD ausgeben, bis die Messung fertig ist.
Logged

Pages: [1]   Go Up
Jump to: