Simple control for ST M5451 LED driver.
Sample usage
#include "mbed.h" #include "M5451.h" M5451 m5451(D8, D7); void toggleOneByOne(){ for(char i = 0; i < m5451.outputs(); i++){ m5451.toggleBit(i); m5451.update(); wait_ms(250); m5451.toggleBit(i); } } int main() { while(1) { m5451.setAllBits(0); toggleOneByOne(); m5451.setAllBits(1); toggleOneByOne(); } }
Diff: M5451.cpp
- Revision:
- 0:b21b3517a1d6
- Child:
- 1:db1e69c22bc6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/M5451.cpp Sun Mar 01 10:20:26 2020 +0000 @@ -0,0 +1,53 @@ +#include "M5451.h" +#include "mbed.h" + +M5451::M5451(PinName dataPin, PinName clockPin): + _dataPin(dataPin), _clockPin(clockPin) { + _state = 0ULL; +} + +int M5451::outputs() { + return JIRRICK_M5451_OUTPUTS; +} + +void M5451::setState(uint64_t state){ + _state = state; +} + +void M5451::setBit(char position, char value){ + if (position < JIRRICK_M5451_OUTPUTS) + { + uint64_t value64 = value; + _state = (_state & ~(1ULL << position)) | (value64 << position); + } +} + +void M5451::setAllBits(char value){ + for(char i = 0; i < JIRRICK_M5451_OUTPUTS; i++){ + setBit(i, value); + } +} + +void M5451::update() { + _send(1); //START BIT + uint64_t input = _state; + for(char i = 0; i < JIRRICK_M5451_OUTPUTS; i++){ + char value = (input & 1ULL); + _send(value); + input = input >> 1; + } +} + +uint64_t M5451::getState() { + return _state; +} + +void M5451::_send(char bit) { + _dataPin = (bit % 2); + wait_us(JIRRICK_M5451_WAIT); + _clockPin = 1; + wait_us(JIRRICK_M5451_WAIT); + _clockPin = 0; + wait_us(JIRRICK_M5451_WAIT); +} +