Guten Abend,
Ich habe mich erst heute hier angemeldet, und muss euch gleich mit einer
Frage nerven.
Ich habe vor meine selbst gebaute Frässpindel über den Computer
anzusteuern, komme aber mit dem Programm einfach nicht auf eine Lösung
meines Problems. Im Anhang ist ein Bild ("kurzpuls") mit dem
Eingangssignal, von dem ich den Abstand zwischen den Hochpunkten wissen
will. ( die Länge des Hochpunktes sind 4us, die länge zwischen den
Punkten ca. 5ms.)
Normalerweise würde das ja mit pulseIn() funktionieren (damit werden die
Pulse in der Tat korrekt ausgemessen), aber der Rest meines Programms
wird blockiert und die Spindel läuft nicht an. Nebenbei: das
Ausgangssignal ist gleich wie das eines Servos.
Später wir das Programm dann auf einem Attiny 44 laufen, das schränkt
mich leider doch etwas ein.
Dieser Code, den ich geschrieben habe ist leider etwas träge und kann
nur Pulse ab einer länge von ca. 2ms verarbeiten (siehe Bild "Langpuls"
im Anhang, da ist die Pulslänge ca. 2ms) :
1 | int steppin = 11;
|
2 | unsigned long start = 0;
|
3 | unsigned long interval = 0;
|
4 | int b = 0;
|
5 |
|
6 | void setup()
|
7 | {
|
8 | Serial.begin(9600);
|
9 | pinMode(steppin,INPUT);
|
10 | }
|
11 |
|
12 | void loop()
|
13 | {
|
14 | if((digitalRead(steppin) == LOW)&&(b == 0))
|
15 | {
|
16 | start = micros(); //Startpunkt setzen
|
17 | b = 1; //weitere Ausführung der ersten if funktion unterbinden
|
18 | }
|
19 |
|
20 | if((digitalRead(steppin) == HIGH) && (b == 1))
|
21 | {
|
22 | interval = micros() - start; //Hier wird die gefragte Pulslänge berechnet
|
23 | b = 0; //weitere Ausführung der zweiten if funktion unterbinden
|
24 | Serial.println(interval);
|
25 | }
|
26 |
|
27 | }
|
Kann da jemand weiterhelfen?
MfG Bassblaster