Udo Juerss / Mbed 2 deprecated Nucleo_Photo_LED

Dependencies:   mbed

Committer:
mdUJHS
Date:
Sat Nov 01 20:29:33 2014 +0000
Revision:
0:bee32ed0a6b4
Child:
1:f4abb1d24a76
Photo sensitive LED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mdUJHS 0:bee32ed0a6b4 1 // Program.: Photo_LED
mdUJHS 0:bee32ed0a6b4 2 // Version.: 1.0
mdUJHS 0:bee32ed0a6b4 3 // Chip....: STM32F4xx
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 0:bee32ed0a6b4 9 // photo diode. The hardware platform I have used is the NUCLEO 411RE, but
mdUJHS 0:bee32ed0a6b4 10 // the principle can be used with every modern CMOS-controller.
mdUJHS 0:bee32ed0a6b4 11 //
mdUJHS 0:bee32ed0a6b4 12 // Harware sketch:
mdUJHS 0:bee32ed0a6b4 13 // LED (20mA, green or red)
mdUJHS 0:bee32ed0a6b4 14 // |\ |
mdUJHS 0:bee32ed0a6b4 15 // | \ |
mdUJHS 0:bee32ed0a6b4 16 // -----| \|----
mdUJHS 0:bee32ed0a6b4 17 // | | /| _|_
mdUJHS 0:bee32ed0a6b4 18 // | | / | | |
mdUJHS 0:bee32ed0a6b4 19 // | / | | 100 Ohm
mdUJHS 0:bee32ed0a6b4 20 // | |___|
mdUJHS 0:bee32ed0a6b4 21 // | |
mdUJHS 0:bee32ed0a6b4 22 // | |
mdUJHS 0:bee32ed0a6b4 23 // - -
mdUJHS 0:bee32ed0a6b4 24 // |O| |O|
mdUJHS 0:bee32ed0a6b4 25 // - -
mdUJHS 0:bee32ed0a6b4 26 // Anode Pin Cathode Pin
mdUJHS 0:bee32ed0a6b4 27 //
mdUJHS 0:bee32ed0a6b4 28 // How it works:
mdUJHS 0:bee32ed0a6b4 29 // In the first phase the LED is turned on in it´s normal mode for 50ms.
mdUJHS 0:bee32ed0a6b4 30 // In the second phase the LED is driven with a reversed voltage for 10ms
mdUJHS 0:bee32ed0a6b4 31 // (anode negative, cathode positive). This will charge the internal capacity
mdUJHS 0:bee32ed0a6b4 32 // with reverse potential. Then the anode pin is configured as a high-impedance
mdUJHS 0:bee32ed0a6b4 33 // input pin. It takes some time until the voltage at the anode pin will raise
mdUJHS 0:bee32ed0a6b4 34 // above the Schmitt-trigger level. This time is depending on the over all
mdUJHS 0:bee32ed0a6b4 35 // circuit resistance, but also very depending on the ambient light.
mdUJHS 0:bee32ed0a6b4 36 //
mdUJHS 0:bee32ed0a6b4 37 // Warning:
mdUJHS 0:bee32ed0a6b4 38 // The capacity of the LED is very low (5..35pF). Do not place the board
mdUJHS 0:bee32ed0a6b4 39 // to a conductive ground. Even humidity will change the blink frequency.
mdUJHS 0:bee32ed0a6b4 40 // Do not touch the components.
mdUJHS 0:bee32ed0a6b4 41 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 42
mdUJHS 0:bee32ed0a6b4 43 #include "mbed.h"
mdUJHS 0:bee32ed0a6b4 44 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 45
mdUJHS 0:bee32ed0a6b4 46 DigitalInOut anode_pin(PC_10);
mdUJHS 0:bee32ed0a6b4 47 DigitalOut cathode_pin(PC_11);
mdUJHS 0:bee32ed0a6b4 48 //-----------------------------------------------------------------------------
mdUJHS 0:bee32ed0a6b4 49
mdUJHS 0:bee32ed0a6b4 50 int main(void)
mdUJHS 0:bee32ed0a6b4 51 {
mdUJHS 0:bee32ed0a6b4 52 anode_pin.output();
mdUJHS 0:bee32ed0a6b4 53
mdUJHS 0:bee32ed0a6b4 54 while (1)
mdUJHS 0:bee32ed0a6b4 55 {
mdUJHS 0:bee32ed0a6b4 56 // Set normal LED operation, turn on LED for 50ms
mdUJHS 0:bee32ed0a6b4 57 // Setup PC10 as output
mdUJHS 0:bee32ed0a6b4 58 anode_pin.output();
mdUJHS 0:bee32ed0a6b4 59
mdUJHS 0:bee32ed0a6b4 60 // Turn on LED for 50ms
mdUJHS 0:bee32ed0a6b4 61 // Set anode (PC10) high and cathode (PC11) low
mdUJHS 0:bee32ed0a6b4 62 anode_pin = 1;
mdUJHS 0:bee32ed0a6b4 63 cathode_pin = 0;
mdUJHS 0:bee32ed0a6b4 64 wait(0.05f);
mdUJHS 0:bee32ed0a6b4 65
mdUJHS 0:bee32ed0a6b4 66 // Apply reverse voltage to the LED for reverse charging the LED´s capacity
mdUJHS 0:bee32ed0a6b4 67 // Set anode (PC10) low and cathode (PC11) high
mdUJHS 0:bee32ed0a6b4 68 anode_pin = 0;
mdUJHS 0:bee32ed0a6b4 69 cathode_pin = 1;
mdUJHS 0:bee32ed0a6b4 70 wait(0.01f);
mdUJHS 0:bee32ed0a6b4 71
mdUJHS 0:bee32ed0a6b4 72 // Setup anode (PC10) as input
mdUJHS 0:bee32ed0a6b4 73 anode_pin.input();
mdUJHS 0:bee32ed0a6b4 74
mdUJHS 0:bee32ed0a6b4 75 // Wait until the input voltage raises above the Schmitt trigger level
mdUJHS 0:bee32ed0a6b4 76 // This time is strongly ambient light depending
mdUJHS 0:bee32ed0a6b4 77 while (anode_pin.read() == 0)
mdUJHS 0:bee32ed0a6b4 78 {
mdUJHS 0:bee32ed0a6b4 79 }
mdUJHS 0:bee32ed0a6b4 80 }
mdUJHS 0:bee32ed0a6b4 81 }