Multiplexer lauffähig

Dependencies:   USBDevice mbed

Fork of Multiplexer-Test by H2M Teststand

Committer:
O_Shovah
Date:
Tue Sep 09 10:48:03 2014 +0000
Revision:
8:fd403cfcaa0a
Parent:
0:42c1addaf061
Child:
9:341c831b162b
Snippet Drehzahlmessung l?uft [090920141300]; JS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
O_Shovah 0:42c1addaf061 1 #include "mbed.h"
O_Shovah 0:42c1addaf061 2
O_Shovah 0:42c1addaf061 3
O_Shovah 0:42c1addaf061 4 //Outputs
O_Shovah 0:42c1addaf061 5
O_Shovah 8:fd403cfcaa0a 6 DigitalOut timetest_0 (p30);
O_Shovah 0:42c1addaf061 7
O_Shovah 0:42c1addaf061 8
O_Shovah 0:42c1addaf061 9 BusOut unused(p18);
O_Shovah 0:42c1addaf061 10
O_Shovah 0:42c1addaf061 11
O_Shovah 0:42c1addaf061 12 //Inputs
O_Shovah 0:42c1addaf061 13
O_Shovah 8:fd403cfcaa0a 14 InterruptIn Drehzahl_lichtschranke(p29);
O_Shovah 0:42c1addaf061 15
O_Shovah 0:42c1addaf061 16 Timer Umlaufzeit;
O_Shovah 0:42c1addaf061 17
O_Shovah 0:42c1addaf061 18 //Communication
O_Shovah 0:42c1addaf061 19
O_Shovah 0:42c1addaf061 20 Serial pc(USBTX, USBRX);
O_Shovah 0:42c1addaf061 21
O_Shovah 0:42c1addaf061 22 volatile int Drehzeit_counter = 0;
O_Shovah 0:42c1addaf061 23 #define DREHZEIT_SIZE 3
O_Shovah 0:42c1addaf061 24 volatile int Drehzeit[DREHZEIT_SIZE];
O_Shovah 0:42c1addaf061 25
O_Shovah 0:42c1addaf061 26
O_Shovah 0:42c1addaf061 27 void Motor_drehzahl()
O_Shovah 0:42c1addaf061 28 {
O_Shovah 8:fd403cfcaa0a 29 timetest_0 = 1;
O_Shovah 0:42c1addaf061 30 static bool first_run = true;
O_Shovah 0:42c1addaf061 31 int tmp = Umlaufzeit.read_us();
O_Shovah 8:fd403cfcaa0a 32 if (first_run) {
O_Shovah 8:fd403cfcaa0a 33 Umlaufzeit.start();
O_Shovah 8:fd403cfcaa0a 34 first_run = false;
O_Shovah 8:fd403cfcaa0a 35 return;
O_Shovah 8:fd403cfcaa0a 36 }
O_Shovah 0:42c1addaf061 37 if (tmp < 1000) return;
O_Shovah 8:fd403cfcaa0a 38
O_Shovah 0:42c1addaf061 39 // Cache last 3 values for averaging
O_Shovah 0:42c1addaf061 40 Drehzeit[Drehzeit_counter % DREHZEIT_SIZE] = tmp;
O_Shovah 0:42c1addaf061 41 ++Drehzeit_counter;
O_Shovah 0:42c1addaf061 42 Umlaufzeit.reset();
O_Shovah 8:fd403cfcaa0a 43
O_Shovah 8:fd403cfcaa0a 44 timetest_0 = 0;
O_Shovah 0:42c1addaf061 45 }
O_Shovah 0:42c1addaf061 46
O_Shovah 0:42c1addaf061 47 int main(void)
O_Shovah 0:42c1addaf061 48 {
O_Shovah 8:fd403cfcaa0a 49
O_Shovah 8:fd403cfcaa0a 50
O_Shovah 8:fd403cfcaa0a 51 Drehzahl_lichtschranke.fall(&Motor_drehzahl);
O_Shovah 8:fd403cfcaa0a 52
O_Shovah 0:42c1addaf061 53
O_Shovah 8:fd403cfcaa0a 54 // Time counters
O_Shovah 8:fd403cfcaa0a 55 Timer timer_print;
O_Shovah 8:fd403cfcaa0a 56 timer_print.start();
O_Shovah 0:42c1addaf061 57
O_Shovah 0:42c1addaf061 58
O_Shovah 0:42c1addaf061 59 float motor_n_cur = 0;
O_Shovah 0:42c1addaf061 60
O_Shovah 8:fd403cfcaa0a 61
O_Shovah 0:42c1addaf061 62
O_Shovah 0:42c1addaf061 63 while(true) {
O_Shovah 0:42c1addaf061 64
O_Shovah 0:42c1addaf061 65
O_Shovah 0:42c1addaf061 66
O_Shovah 0:42c1addaf061 67 // Calculate motor_n_cur by averaging
O_Shovah 0:42c1addaf061 68 int drehzeit_sum = 0;
O_Shovah 0:42c1addaf061 69 for (int i=0; i != DREHZEIT_SIZE; ++i)
O_Shovah 0:42c1addaf061 70 drehzeit_sum += Drehzeit[i];
O_Shovah 0:42c1addaf061 71
O_Shovah 8:fd403cfcaa0a 72 motor_n_cur = (drehzeit_sum ? (1.0e6/drehzeit_sum)*DREHZEIT_SIZE : 0.0)*60;
O_Shovah 8:fd403cfcaa0a 73
O_Shovah 8:fd403cfcaa0a 74
O_Shovah 0:42c1addaf061 75 // Set motor_n_cur to 0 if the interrupt wasn't called for a specified time
O_Shovah 0:42c1addaf061 76 if (Umlaufzeit.read_ms() > 200)
O_Shovah 0:42c1addaf061 77 motor_n_cur = 0.0;
O_Shovah 0:42c1addaf061 78
O_Shovah 8:fd403cfcaa0a 79 pc.printf("%f\n\r",motor_n_cur);
O_Shovah 0:42c1addaf061 80
O_Shovah 8:fd403cfcaa0a 81 wait(0.5);
O_Shovah 0:42c1addaf061 82 }
O_Shovah 0:42c1addaf061 83 }