test interruptIn feature with 555 timer
Dependencies: ClockControl PowerControl mbed
Fork of Frequency_counter by
Test interruptIn function with using LMC555 timer IC
LPC 1768 自身が持つタイマー割り込み機能を使わずに、 あえて外部のタイマー IC 555 からの信号で周期的に割り込みするテスト。
下記の回路例では、555 の output 端子が 約 10 秒周期のうち、0.3 秒間 Low になるはず。 ただし、コンデンサーおよび抵抗の誤差の影響があり、実測値は約7秒周期
C を 47μ から 330 μ に変えると約1分前後で周期的に割り込みがかかります。
なるべく配線が交差しないように部品配置してみた例
Diff: main.cpp
- Revision:
- 7:42e7f18361c8
- Parent:
- 6:7f90a61e1a69
- Child:
- 8:cb966096a916
--- a/main.cpp Sun Aug 11 08:34:00 2013 +0000 +++ b/main.cpp Wed Nov 06 07:38:20 2013 +0000 @@ -4,7 +4,8 @@ InterruptIn in(p8); //connect to the Discharge of 555 DigitalOut run555(p9);//connect to the Reset of 555 -DigitalOut led(LED1); +DigitalOut led1(LED1);//running 555 +DigitalOut led2(LED2);//not ready Timer t1; float my_interval = 0;//between interrupts in microseconds @@ -23,13 +24,13 @@ if(rest_in <= 0){ //No use interrupt - run555 = led = 0; + run555 = led1 = 0; t1.stop(); } } int main() { - run555 = led = 0; + run555 = led1 = led2 = 0; // Set up the interrupt in.mode(PullUp); in.rise(&flip); @@ -41,12 +42,14 @@ my_interval = 0; t1.start(); rest_in = IN_TIMES; - run555 = led = 1; + run555 = led1 = 1; + led2 = 0; wait_ms(WAIT_IN); - run555 = led = 0;//force stop + run555 = led1 = 0;//force stop if (my_interval < MIN_INTERVAL || my_interval > MAX_INTERVAL){ printf("\r not ready\n"); + led2 = 1; } else { my_freq = ONESEC_BY_MICRO / my_interval; // Convert to Hz my_ohm = my_interval * CONV_KILO_OHM;// Convert to kilo ohm