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分前後で周期的に割り込みがかかります。
なるべく配線が交差しないように部品配置してみた例
main.cpp
- Committer:
- strysd
- Date:
- 2013-06-03
- Revision:
- 3:bf0a5effbed2
- Parent:
- 2:c4d4f0f9d77c
- Child:
- 4:64d9c0bed75b
File content as of revision 3:bf0a5effbed2:
#include "mbed.h" //see mbed.org/users/strysd/notebook/measure_humidity_with_hs15p_and_lmc555/ #define ohm_constant 7.2 //if use 0.1 micro F #define in_limit 20 //limit of interrupt times InterruptIn in(p8); DigitalOut vcc555(p9); DigitalOut led(LED1); Timer t1; float t_period = 0;//between interrupts in microseconds float my_freq = 0;//Hz float my_ohm = 0;//ohm for HS15P int in_count = 0;//interrupt times void flip(void) { if(in_count > 0){ if(in_count > 15){ t_period = t1.read_us();// Get time since last interrupt } t1.reset();// Reset timer and wait for next interrupt in_count--; } else { //No use interrupt vcc555 = led = 0; t1.stop(); } } int main() { vcc555 = led = 0; in.mode(PullUp); in.rise(&flip);// Set up the interrupt for rising edge printf("\rStarting measure\n"); while (1) { //Use interrupt t_period = 0; t1.start(); in_count = in_limit; vcc555 = led = 1; wait_ms(200); if (t_period < 20 || t_period > 100000){ //< 20 micro sec (> 50 kHz) //> 0.1 sec (< 10 Hz) printf("\r not ready\n"); wait_ms(5000); } else { my_freq = 1000000/t_period;// Convert to Hz my_ohm = t_period * ohm_constant / 1000;// Convert to kilo ohm printf("\r %d Hz, %d micro sec, %4.1f kilo ohm \n", (int)my_freq, (int)t_period, my_ohm); } wait_ms(4800); } }