Code for controlling servos using the TLC5940 pwm led driver.
Revision 0:bdf7a64b89a7, committed 2013-03-24
- Comitter:
- Julepalme
- Date:
- Sun Mar 24 16:23:29 2013 +0000
- Commit message:
- s
Changed in this revision
TLC5940.cpp | Show annotated file Show diff for this revision Revisions of this file |
TLC5940.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r bdf7a64b89a7 TLC5940.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TLC5940.cpp Sun Mar 24 16:23:29 2013 +0000 @@ -0,0 +1,55 @@ +#include "TLC5940.h" + +TLC5940::TLC5940(PinName mosi, PinName miso, PinName sck, PinName xlat, PinName blank, PinName gsclk) +{ + _spi = new SPI(mosi, miso, sck); + _xlat = new DigitalOut(xlat); + _blank = new DigitalOut(blank); + _gsclk = new PwmOut(gsclk); + _t = new Ticker(); + + // Setup SPI + _spi->format(12,0); + _spi->frequency(5000000); + + //Turn off GSCLK + _gsclk->write(0.0f); + _gsclk->period_us(5); + + // Reset to 0 + for(int i = 0; i < 16; i++) + { + gs_data[i] = 4095; + int whoami = _spi->write(4095); + } + + _xlat->write(1); + _xlat->write(0); +} + +void TLC5940::setServo(int ch, int val) +{ + gs_data[15-ch] = val; +} + +void TLC5940::flush() +{ + for(int i = 0; i < 16; i++){ + _spi->write(gs_data[i]); + } + + _xlat->write(1); + _xlat->write(0); +} + +void TLC5940::run() +{ + _gsclk->write(0.5f); + _t->attach_us(this, &TLC5940::refresh, 5*4096); +} + +void TLC5940::refresh() +{ + _blank->write(1); + _blank->write(0); +} \ No newline at end of file
diff -r 000000000000 -r bdf7a64b89a7 TLC5940.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TLC5940.h Sun Mar 24 16:23:29 2013 +0000 @@ -0,0 +1,22 @@ +#ifndef TLC5940_H_ +#define TLC5940_H_ + +#include "mbed.h" + +class TLC5940 { +private: + SPI * _spi; + PwmOut * _gsclk; + DigitalOut * _xlat; + DigitalOut * _blank; + Ticker * _t; + int gs_data[16]; +public: + TLC5940(PinName mosi, PinName miso, PinName sck, PinName xlat, PinName blank, PinName gsclk); + void setServo(int ch, int val); + void flush(); + void run(); + void refresh(); +}; + +#endif /* TLC5940_H_ */ \ No newline at end of file