A normal LED is used as a light sensitive device.

Dependencies:   mbed

Committer:
mdUJHS
Date:
Sun Nov 02 21:51:43 2014 +0000
Revision:
1:f4abb1d24a76
Parent:
0:bee32ed0a6b4
A normal LED is used as a light sensitive device.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mdUJHS 1:f4abb1d24a76 1 // Module..: Photo_LED
mdUJHS 0:bee32ed0a6b4 2 // Version.: 1.0
mdUJHS 1:f4abb1d24a76 3 // Chip....: STM32F411RE
mdUJHS 0:bee32ed0a6b4 4 // Date....: November 2014
mdUJHS 0:bee32ed0a6b4 5 // Author..: UJ
mdUJHS 0:bee32ed0a6b4 6 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 7
mdUJHS 0:bee32ed0a6b4 8 // This program is a simple demonstration how a normal LED can be used as a
mdUJHS 1:f4abb1d24a76 9 // photo diode. The hardware platform I have used is the NUCLEO F411RE, but
mdUJHS 1:f4abb1d24a76 10 // the principle will run on every modern controller with high-impedance
mdUJHS 1:f4abb1d24a76 11 // Schmitt-trigger inputs.
mdUJHS 0:bee32ed0a6b4 12 //
mdUJHS 0:bee32ed0a6b4 13 // Harware sketch:
mdUJHS 1:f4abb1d24a76 14 // _____________________
mdUJHS 1:f4abb1d24a76 15 // | |
mdUJHS 1:f4abb1d24a76 16 // | __|__
mdUJHS 1:f4abb1d24a76 17 // | \ / LED (20mA, green or red)
mdUJHS 1:f4abb1d24a76 18 // | \ /
mdUJHS 1:f4abb1d24a76 19 // | -------
mdUJHS 1:f4abb1d24a76 20 // | |
mdUJHS 1:f4abb1d24a76 21 // | _|_
mdUJHS 1:f4abb1d24a76 22 // | | |
mdUJHS 1:f4abb1d24a76 23 // | |100| Ohm
mdUJHS 1:f4abb1d24a76 24 // | |_ _|
mdUJHS 1:f4abb1d24a76 25 // | |
mdUJHS 1:f4abb1d24a76 26 // | |
mdUJHS 1:f4abb1d24a76 27 // | |
mdUJHS 1:f4abb1d24a76 28 // Anode Pin (PC10) Cathode Pin (PC11)
mdUJHS 0:bee32ed0a6b4 29 //
mdUJHS 0:bee32ed0a6b4 30 // How it works:
mdUJHS 1:f4abb1d24a76 31 // In the first phase the LED is turned on in it´s normal mode for 50ms.
mdUJHS 1:f4abb1d24a76 32 // In the second phase the LED is driven with a reversed voltage for 5ms
mdUJHS 0:bee32ed0a6b4 33 // (anode negative, cathode positive). This will charge the internal capacity
mdUJHS 0:bee32ed0a6b4 34 // with reverse potential. Then the anode pin is configured as a high-impedance
mdUJHS 0:bee32ed0a6b4 35 // input pin. It takes some time until the voltage at the anode pin will raise
mdUJHS 1:f4abb1d24a76 36 // above the Schmitt-trigger level. This time is depending on the over all
mdUJHS 1:f4abb1d24a76 37 // circuit resistance and the ambient light.
mdUJHS 0:bee32ed0a6b4 38 //
mdUJHS 1:f4abb1d24a76 39 // Hint:
mdUJHS 0:bee32ed0a6b4 40 // The capacity of the LED is very low (5..35pF). Do not place the board
mdUJHS 0:bee32ed0a6b4 41 // to a conductive ground. Even humidity will change the blink frequency.
mdUJHS 0:bee32ed0a6b4 42 // Do not touch the components.
mdUJHS 0:bee32ed0a6b4 43 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 44
mdUJHS 0:bee32ed0a6b4 45 #include "mbed.h"
mdUJHS 0:bee32ed0a6b4 46 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 47
mdUJHS 1:f4abb1d24a76 48 #define IWDG_RESET() (IWDG->KR = 0xAAAA)
mdUJHS 1:f4abb1d24a76 49 //-----------------------------------------------------------------------------
mdUJHS 1:f4abb1d24a76 50
mdUJHS 1:f4abb1d24a76 51 Serial terminal(USBTX, USBRX);
mdUJHS 1:f4abb1d24a76 52
mdUJHS 0:bee32ed0a6b4 53 DigitalInOut anode_pin(PC_10);
mdUJHS 0:bee32ed0a6b4 54 DigitalOut cathode_pin(PC_11);
mdUJHS 0:bee32ed0a6b4 55 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 56
mdUJHS 0:bee32ed0a6b4 57 int main(void)
mdUJHS 0:bee32ed0a6b4 58 {
mdUJHS 1:f4abb1d24a76 59 unsigned char cnt;
mdUJHS 1:f4abb1d24a76 60
mdUJHS 1:f4abb1d24a76 61 terminal.baud(115200);
mdUJHS 1:f4abb1d24a76 62 terminal.printf("Photo LED\r\n");
mdUJHS 0:bee32ed0a6b4 63
mdUJHS 0:bee32ed0a6b4 64 while (1)
mdUJHS 0:bee32ed0a6b4 65 {
mdUJHS 1:f4abb1d24a76 66 IWDG_RESET();
mdUJHS 1:f4abb1d24a76 67
mdUJHS 0:bee32ed0a6b4 68 // Set normal LED operation, turn on LED for 50ms
mdUJHS 0:bee32ed0a6b4 69 // Setup PC10 as output
mdUJHS 0:bee32ed0a6b4 70 anode_pin.output();
mdUJHS 0:bee32ed0a6b4 71
mdUJHS 0:bee32ed0a6b4 72 // Turn on LED for 50ms
mdUJHS 0:bee32ed0a6b4 73 // Set anode (PC10) high and cathode (PC11) low
mdUJHS 0:bee32ed0a6b4 74 anode_pin = 1;
mdUJHS 0:bee32ed0a6b4 75 cathode_pin = 0;
mdUJHS 1:f4abb1d24a76 76
mdUJHS 1:f4abb1d24a76 77 for (cnt = 0; cnt < 10; cnt++)
mdUJHS 1:f4abb1d24a76 78 {
mdUJHS 1:f4abb1d24a76 79 wait(0.005f);
mdUJHS 1:f4abb1d24a76 80 IWDG_RESET();
mdUJHS 1:f4abb1d24a76 81 }
mdUJHS 0:bee32ed0a6b4 82
mdUJHS 0:bee32ed0a6b4 83 // Apply reverse voltage to the LED for reverse charging the LED´s capacity
mdUJHS 0:bee32ed0a6b4 84 // Set anode (PC10) low and cathode (PC11) high
mdUJHS 0:bee32ed0a6b4 85 anode_pin = 0;
mdUJHS 0:bee32ed0a6b4 86 cathode_pin = 1;
mdUJHS 1:f4abb1d24a76 87 wait(0.005f);
mdUJHS 0:bee32ed0a6b4 88
mdUJHS 0:bee32ed0a6b4 89 // Setup anode (PC10) as input
mdUJHS 0:bee32ed0a6b4 90 anode_pin.input();
mdUJHS 0:bee32ed0a6b4 91
mdUJHS 0:bee32ed0a6b4 92 // Wait until the input voltage raises above the Schmitt trigger level
mdUJHS 0:bee32ed0a6b4 93 // This time is strongly ambient light depending
mdUJHS 0:bee32ed0a6b4 94 while (anode_pin.read() == 0)
mdUJHS 0:bee32ed0a6b4 95 {
mdUJHS 1:f4abb1d24a76 96 IWDG_RESET();
mdUJHS 1:f4abb1d24a76 97 wait(0.005f);
mdUJHS 0:bee32ed0a6b4 98 }
mdUJHS 0:bee32ed0a6b4 99 }
mdUJHS 0:bee32ed0a6b4 100 }