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-11-06
Revision:
7:42e7f18361c8
Parent:
6:7f90a61e1a69
Child:
8:cb966096a916

File content as of revision 7:42e7f18361c8:

//see mbed.org/users/strysd/notebook/measure_humidity_with_hs15p_and_lmc555/
#include "mbed.h"
#include "main.h"

InterruptIn in(p8);   //connect to the Discharge of 555
DigitalOut run555(p9);//connect to the Reset     of 555
DigitalOut led1(LED1);//running 555
DigitalOut led2(LED2);//not ready
Timer t1;

float my_interval = 0;//between interrupts in microseconds
float my_freq = 0;//Hz
float my_ohm  = 0;//ohm for HS15P
int   rest_in = 0;//rest of interrupt times

void flip(void)
{
    if(rest_in < READ_TIMER){
        my_interval = t1.read_us();// Get time since last interrupt
    }

    t1.reset();// Reset timer and wait for next interrupt
    rest_in--;

    if(rest_in <= 0){
        //No use interrupt
        run555 = led1 = 0;
        t1.stop();
    }
}

int main() {
    run555 = led1 = led2 = 0;
    // Set up the interrupt
    in.mode(PullUp);
    in.rise(&flip);

    printf("\rStarting measure\n");

    while (1) {
        //Use interrupt
        my_interval = 0;
        t1.start();
        rest_in = IN_TIMES;
        run555 = led1 = 1;
        led2 = 0;
        wait_ms(WAIT_IN);
        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
            printf("\r %.0f Hz, %.0f micro sec, %.1f kilo ohm \n",
                   my_freq, my_interval, my_ohm);
        }

         wait_ms(WAIT_NEXT);
    }
}