Udo Juerss
/
Nucleo_Photo_LED
A normal LED is used as a light sensitive device.
main.cpp@1:f4abb1d24a76, 2014-11-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |