A normal LED is used as a light sensitive device.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
mdUJHS
Date:
Sun Nov 02 21:51:43 2014 +0000
Parent:
0:bee32ed0a6b4
Commit message:
A normal LED is used as a light sensitive device.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Nov 01 20:29:33 2014 +0000
+++ b/main.cpp	Sun Nov 02 21:51:43 2014 +0000
@@ -1,40 +1,42 @@
-// Program.: Photo_LED
+// Module..: Photo_LED
 // Version.: 1.0
-// Chip....: STM32F4xx
+// Chip....: STM32F411RE
 // Date....: November 2014
 // Author..: UJ
 //-----------------------------------------------------------------------------
 
 // This program is a simple demonstration how a normal LED can be used as a
-// photo diode. The hardware platform I have used is the NUCLEO 411RE, but
-// the principle can be used with every modern CMOS-controller.
+// photo diode. The hardware platform I have used is the NUCLEO F411RE, but
+// the principle will run on every modern controller with high-impedance
+// Schmitt-trigger inputs.
 //
 // Harware sketch:
-//     LED (20mA, green or red)
-//           |\    |
-//           |  \  |
-//      -----|    \|----
-//     |     |    /|   _|_
-//     |     |  /  |  |   |
-//     |      /       |   | 100 Ohm
-//     |              |___|
-//     |                |
-//     |                |
-//     -                -
-//    |O|              |O|
-//     -                -
-//    Anode Pin        Cathode Pin
+//      _____________________
+//     |                     |
+//     |                   __|__
+//     |                   \   / LED (20mA, green or red)
+//     |                    \ /
+//     |                  -------
+//     |                     |
+//     |                    _|_
+//     |                   |   |
+//     |                   |100| Ohm
+//     |                   |_ _|
+//     |                     |
+//     |                     |
+//     |                     |
+//     Anode Pin (PC10)      Cathode Pin (PC11)
 //
 // How it works:
-// In the first phase the LED is turned on in it´s normal mode for 50ms.  
-// In the second phase the LED is driven with a reversed voltage for 10ms
+// In the first phase the LED is turned on in it´s normal mode for 50ms.
+// In the second phase the LED is driven with a reversed voltage for 5ms
 // (anode negative, cathode positive). This will charge the internal capacity
 // with reverse potential. Then the anode pin is configured as a high-impedance
 // input pin. It takes some time until the voltage at the anode pin will raise
-// above the Schmitt-trigger level. This time is depending on the over all 
-// circuit resistance, but also very depending on the ambient light.
+// above the Schmitt-trigger level. This time is depending on the over all
+// circuit resistance and the ambient light.
 //
-// Warning:
+// Hint:
 // The capacity of the LED is very low (5..35pF). Do not place the board
 // to a conductive ground. Even humidity will change the blink frequency.
 // Do not touch the components.
@@ -43,16 +45,26 @@
 #include "mbed.h"
 //-----------------------------------------------------------------------------
 
+#define IWDG_RESET() (IWDG->KR = 0xAAAA)
+//-----------------------------------------------------------------------------
+
+Serial terminal(USBTX, USBRX);
+
 DigitalInOut anode_pin(PC_10);
 DigitalOut cathode_pin(PC_11);
 //-----------------------------------------------------------------------------
 
 int main(void)
 {
-  anode_pin.output();
+  unsigned char cnt;
+
+  terminal.baud(115200);
+  terminal.printf("Photo LED\r\n");
 
   while (1)
   {
+    IWDG_RESET();
+
     // Set normal LED operation, turn on LED for 50ms
     // Setup PC10 as output
     anode_pin.output();
@@ -61,13 +73,18 @@
     // Set anode (PC10) high and cathode (PC11) low
     anode_pin = 1;
     cathode_pin = 0;
-    wait(0.05f);
+
+    for (cnt = 0; cnt < 10; cnt++)
+    {
+      wait(0.005f);
+      IWDG_RESET();
+    }
 
     // Apply reverse voltage to the LED for reverse charging the LED´s capacity
     // Set anode (PC10) low and cathode (PC11) high
     anode_pin = 0;
     cathode_pin = 1;
-    wait(0.01f);
+    wait(0.005f);
 
     // Setup anode (PC10) as input
     anode_pin.input();
@@ -76,6 +93,8 @@
     // This time is strongly ambient light depending
     while (anode_pin.read() == 0)
     {
+      IWDG_RESET();
+      wait(0.005f);
     }
   }
 }