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();
    }
}
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?

UserRevisionLine numberNew 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