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(); } }
M5451.cpp
- Committer:
- jirrick
- Date:
- 2020-03-01
- Revision:
- 0:b21b3517a1d6
- Child:
- 1:db1e69c22bc6
File content as of revision 0:b21b3517a1d6:
#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); }