test interruptIn feature with 555 timer

Dependencies:   ClockControl PowerControl mbed

Fork of Frequency_counter by Satoru Yoshida

Test interruptIn function with using LMC555 timer IC

LPC 1768 自身が持つタイマー割り込み機能を使わずに、 あえて外部のタイマー IC 555 からの信号で周期的に割り込みするテスト。

下記の回路例では、555 の output 端子が 約 10 秒周期のうち、0.3 秒間 Low になるはず。 ただし、コンデンサーおよび抵抗の誤差の影響があり、実測値は約7秒周期

C を 47μ から 330 μ に変えると約1分前後で周期的に割り込みがかかります。

/media/uploads/strysd/int555_10s.png

なるべく配線が交差しないように部品配置してみた例

/media/uploads/strysd/555test.jpg

main.cpp

Committer:
strysd
Date:
2013-06-01
Revision:
2:c4d4f0f9d77c
Parent:
1:e2034bcdb101
Child:
3:bf0a5effbed2

File content as of revision 2:c4d4f0f9d77c:

#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

Serial pc(USBTX, USBRX);
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_limit  = 10;
int   in_count = 0;

void flip(void)
{
    if(in_count > 0){
        t_period = t1.read_us();// Get time since last interrupt
        in_count--;
        t1.reset();// Reset timer and wait for next interrupt
    } 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

    pc.printf("\rStarting measure\n");
      
    while (1) {
        //Use interrupt
        t1.start();
        in_count = in_limit;
        vcc555 = led = 1;
        wait_ms(200);
        
        if (t_period > 0){
            my_freq = (1000/t_period)*1000;  // Convert to Hz
            my_ohm = t_period * ohm_constant;// Convert to ohm
    
            pc.printf("\r %d Hz, %d micro sec, %d ohm \n",
                      (int)my_freq, (int)t_period, (int)my_ohm);
        } else {
            pc.printf("\r not ready\n");
        }
        wait_ms(1800);
    }
}