Go Down

Topic: Zeitdifferenz der Digitaleingänge messen (Read 720 times) previous topic - next topic

ScrewShield

Dec 09, 2011, 03:48 pm Last Edit: Dec 09, 2011, 03:50 pm by ScrewShield Reason: 1
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: [Select]

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

uwefed

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

ScrewShield

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

uwefed

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

derjochen

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.

Go Up