Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:bee32ed0a6b4, 2014-11-01 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |