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@1:db1e69c22bc6, 2020-03-01 (annotated)
- Committer:
- jirrick
- Date:
- Sun Mar 01 11:41:57 2020 +0000
- Revision:
- 1:db1e69c22bc6
- Parent:
- 0:b21b3517a1d6
add toggleBit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jirrick | 0:b21b3517a1d6 | 1 | #include "M5451.h" |
jirrick | 0:b21b3517a1d6 | 2 | #include "mbed.h" |
jirrick | 0:b21b3517a1d6 | 3 | |
jirrick | 0:b21b3517a1d6 | 4 | M5451::M5451(PinName dataPin, PinName clockPin): |
jirrick | 0:b21b3517a1d6 | 5 | _dataPin(dataPin), _clockPin(clockPin) { |
jirrick | 0:b21b3517a1d6 | 6 | _state = 0ULL; |
jirrick | 0:b21b3517a1d6 | 7 | } |
jirrick | 0:b21b3517a1d6 | 8 | |
jirrick | 1:db1e69c22bc6 | 9 | short M5451::outputs() { |
jirrick | 0:b21b3517a1d6 | 10 | return JIRRICK_M5451_OUTPUTS; |
jirrick | 0:b21b3517a1d6 | 11 | } |
jirrick | 0:b21b3517a1d6 | 12 | |
jirrick | 0:b21b3517a1d6 | 13 | void M5451::setState(uint64_t state){ |
jirrick | 0:b21b3517a1d6 | 14 | _state = state; |
jirrick | 0:b21b3517a1d6 | 15 | } |
jirrick | 0:b21b3517a1d6 | 16 | |
jirrick | 1:db1e69c22bc6 | 17 | void M5451::setBit(short position, short value){ |
jirrick | 1:db1e69c22bc6 | 18 | if (position >= 0 && position < JIRRICK_M5451_OUTPUTS) |
jirrick | 0:b21b3517a1d6 | 19 | { |
jirrick | 0:b21b3517a1d6 | 20 | uint64_t value64 = value; |
jirrick | 0:b21b3517a1d6 | 21 | _state = (_state & ~(1ULL << position)) | (value64 << position); |
jirrick | 0:b21b3517a1d6 | 22 | } |
jirrick | 0:b21b3517a1d6 | 23 | } |
jirrick | 0:b21b3517a1d6 | 24 | |
jirrick | 1:db1e69c22bc6 | 25 | void M5451::toggleBit(short position){ |
jirrick | 1:db1e69c22bc6 | 26 | if (position >= 0 && position < JIRRICK_M5451_OUTPUTS) |
jirrick | 1:db1e69c22bc6 | 27 | { |
jirrick | 1:db1e69c22bc6 | 28 | _state ^= 1ULL << position; |
jirrick | 1:db1e69c22bc6 | 29 | } |
jirrick | 1:db1e69c22bc6 | 30 | } |
jirrick | 1:db1e69c22bc6 | 31 | |
jirrick | 1:db1e69c22bc6 | 32 | void M5451::setAllBits(short value){ |
jirrick | 1:db1e69c22bc6 | 33 | for(short i = 0; i < JIRRICK_M5451_OUTPUTS; i++){ |
jirrick | 0:b21b3517a1d6 | 34 | setBit(i, value); |
jirrick | 0:b21b3517a1d6 | 35 | } |
jirrick | 0:b21b3517a1d6 | 36 | } |
jirrick | 0:b21b3517a1d6 | 37 | |
jirrick | 0:b21b3517a1d6 | 38 | void M5451::update() { |
jirrick | 0:b21b3517a1d6 | 39 | _send(1); //START BIT |
jirrick | 0:b21b3517a1d6 | 40 | uint64_t input = _state; |
jirrick | 1:db1e69c22bc6 | 41 | for(short i = 0; i < JIRRICK_M5451_OUTPUTS; i++){ |
jirrick | 1:db1e69c22bc6 | 42 | short value = (input & 1ULL); |
jirrick | 0:b21b3517a1d6 | 43 | _send(value); |
jirrick | 0:b21b3517a1d6 | 44 | input = input >> 1; |
jirrick | 0:b21b3517a1d6 | 45 | } |
jirrick | 0:b21b3517a1d6 | 46 | } |
jirrick | 0:b21b3517a1d6 | 47 | |
jirrick | 0:b21b3517a1d6 | 48 | uint64_t M5451::getState() { |
jirrick | 0:b21b3517a1d6 | 49 | return _state; |
jirrick | 0:b21b3517a1d6 | 50 | } |
jirrick | 0:b21b3517a1d6 | 51 | |
jirrick | 1:db1e69c22bc6 | 52 | void M5451::_send(short bit) { |
jirrick | 0:b21b3517a1d6 | 53 | _dataPin = (bit % 2); |
jirrick | 0:b21b3517a1d6 | 54 | wait_us(JIRRICK_M5451_WAIT); |
jirrick | 0:b21b3517a1d6 | 55 | _clockPin = 1; |
jirrick | 0:b21b3517a1d6 | 56 | wait_us(JIRRICK_M5451_WAIT); |
jirrick | 0:b21b3517a1d6 | 57 | _clockPin = 0; |
jirrick | 0:b21b3517a1d6 | 58 | wait_us(JIRRICK_M5451_WAIT); |
jirrick | 0:b21b3517a1d6 | 59 | } |
jirrick | 0:b21b3517a1d6 | 60 |