подскажите пожалуйста, почему не получается задать яркость светодиодам, работает так если больше 0 то светится нужный светодиод, а если равно 0 то не светится, как использовать шим? что не так в коде?
- Код: Выделить всё • Развернуть
#define MBI_PIN_LATCH PORTC.2
#define MBI_PIN_SDI PORTC.0
#define MBI_PIN_SDO PORTC.3
#define MBI_PIN_SCK PORTC.1
#define MBI_DATA_LATCH 1
#define MBI_GLOBAL_LATCH 3
#define MBI_READ_CONFIG 5
#define MBI_ENABLE_ERR_DETECT 7
#define MBI_READ_ERR_STATUS 9
#define MBI_WRITE_CONFIG 10
void MBI_init() {
PORTC = 0x0000;
}
void MBI_write(unsigned int DATA, unsigned char MODE){
unsigned char i;
unsigned int temp;
for(i=0; i<16; i++) {
temp = DATA&(0x01<<i);
if(temp) MBI_PIN_SDI = 1;
else MBI_PIN_SDI = 0;
if(i>(15 - MODE)) {
MBI_PIN_LATCH = 1;
// delay_us(50);
}
MBI_PIN_SCK = 1;
// delay_us(50);
MBI_PIN_SCK = 0;
}
MBI_PIN_LATCH = 0;
MBI_PIN_SDI = 0;
}
void MBI_WriteGrayScale(unsigned int *ptr, unsigned char len){
unsigned char i;
for(i=0; i<(len-1);i++) {
MBI_write(*(ptr+i),MBI_DATA_LATCH);
}
MBI_write(*(ptr+(len-1)),MBI_GLOBAL_LATCH);
}
void MBI_WriteConfig(unsigned int config, unsigned char len) {
unsigned char i;
for(i=0;i <(len-1);i++) {
MBI_write(config,MBI_DATA_LATCH);
}
MBI_write(config,MBI_WRITE_CONFIG);
}
void MBI_ReadConfig(unsigned int *config, unsigned char len, unsigned char MODE){
unsigned char i, j;
MBI_write(0x0000,MODE);
MBI_PIN_SDI = 0;
for(i=0; i<len;i++){
for(j=0; j<16; j++){
MBI_PIN_SCK = 1;
//delay_us(50);
if(MBI_PIN_SDO) *(config+i)|=(0x0001<<j);
else *(config+i)&=(~(0x0001<<j));
MBI_PIN_SCK = 0;
}
}
}
void main(void)
{
const unsigned int d[16] = {0x000,0x2345,0x3456,0x4567,0x5678,0x6789,0x7890,0x8901,0x9012,0x0123,0x0000,0x1111,0x2222,0x3333,0x4444,0x5555};
unsigned int config_reg[4];
MBI_init();
MBI_WriteConfig(0b0011101010101100, 1);
MBI_WriteGrayScale(&d[0],16);
}