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.
Dependencies: USBDevice mbed FastAnalogIn FastIO FastPWM SimpleDMA
Diff: tsl410r.cpp
- Revision:
- 1:d913e0afb2ac
- Parent:
- 0:5acbbe3f4cf4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsl410r.cpp Wed Jul 16 23:33:12 2014 +0000
@@ -0,0 +1,74 @@
+#include "mbed.h"
+#include "tsl1410r.h"
+
+TSL1410R::TSL1410R(PinName siPort, PinName clockPort, PinName aoPort)
+ : si(siPort), clock(clockPort), ao(aoPort)
+{
+ // clear out power-on noise by clocking through all pixels twice
+ clear();
+ clear();
+}
+
+void TSL1410R::clear()
+{
+ // clock in an SI pulse
+ si = 1;
+ clock = 1;
+ clock = 0;
+ si = 0;
+
+ // clock out all pixels
+ for (int i = 0 ; i < nPix+1 ; ++i) {
+ clock = 1;
+ clock = 0;
+ }
+}
+
+void TSL1410R::read(uint16_t *pix, int n, int integrate_us)
+{
+ // Start an integration cycle - pulse SI, then clock all pixels. The
+ // CCD will integrate light starting 18 clocks after the SI pulse, and
+ // continues integrating until the next SI pulse, which cannot occur
+ // until all pixels have been clocked.
+ si = 1;
+ clock = 1;
+ clock = 0;
+ si = 0;
+ for (int i = 0 ; i < nPix+1 ; ++i) {
+ clock = 1;
+ clock = 0;
+ }
+
+ // delay by the specified additional integration time
+ wait_us(integrate_us);
+
+ // end the current integration cycle and hold the integrated values
+ si = 1;
+ clock = 1;
+ clock = 0;
+ si = 0;
+
+ // figure how many pixels to skip on each read
+ int skip = nPix/n - 1;
+
+ // read the pixels
+ for (int src = 0, dst = 0 ; src < nPix ; ++src)
+ {
+ // read this pixel
+ pix[dst++] = ao.read_u16();
+
+ // clock in the next pixel
+ clock = 1;
+ clock = 0;
+
+ // clock skipped pixels
+ for (int i = 0 ; i < skip ; ++i, ++src) {
+ clock = 1;
+ clock = 0;
+ }
+ }
+
+ // clock out one extra pixel to make sure the device is ready for another go
+ clock = 1;
+ clock = 0;
+}