Hallo Community,
hat jemand hier schon Erfahrungen mit den LED Anzeigen machen können?
Ich habe diese Boards vom freundlichen bekommen ->>> LINK <<
Nun versuche ich vergebens mal etwas anzeigen zu lassen. Mal funktioniert es mal funktioniert es nicht richtig..
Das ganze habe ich auf einem ESP32C3 (SuperMini Board) getestet.
Sicherheitshalber habe ich an die I/O´s LED´s angeschlossen um sicher zu gehen das sie auch das tun was ich verlange
Hat jemand eine Idee woran das liegen könnte?
enum _MAX7219_REGS
{
NO_OP,
DIGIT_0,
DIGIT_1,
DIGIT_2,
DIGIT_3,
DIGIT_4,
DIGIT_5,
DIGIT_6,
DIGIT_7,
DECODE_MODE,
INTENSITY,
SCAN_LIMIT,
SHUTDOWN,
DISPLAY_TEST = 0x0F
};
enum _MAX7219_SHUTDOWN
{
SHUTDOWN_MODE,
NORMAL_OPERATION
};
enum _MAX7219_DECODE_MODE
{
MODE_1,
MODE_2,
MODE_3 = 0x0F,
MODE_4 = 0xFF
};
enum _MAX7219_INTENSITY
{
INTENSITY_1_32,
INTENSITY_3_32,
INTENSITY_5_32,
INTENSITY_7_32,
INTENSITY_9_32,
INTENSITY_11_32,
INTENSITY_13_32,
INTENSITY_15_32,
INTENSITY_17_32,
INTENSITY_19_32,
INTENSITY_21_32,
INTENSITY_23_32,
INTENSITY_25_32,
INTENSITY_27_32,
INTENSITY_29_32,
INTENSITY_31_32,
};
enum _MAX7219_SCAN_LIMIT
{
SL_DIGIT_0,
SL_DIGIT_0_1,
SL_DIGIT_0_1_2,
SL_DIGIT_0_1_2_3,
SL_DIGIT_0_1_2_3_4,
SL_DIGIT_0_1_2_3_4_5,
SL_DIGIT_0_1_2_3_4_5_6,
SL_DIGIT_0_1_2_3_4_5_6_7,
};
#define MAX7219_BUILD_WORD(addr, cmd) (uint16_t)( ( addr << 8 ) | cmd )
#define MAX7219_GPIO_DOUT_PIN 0
#define MAX7219_GPIO_CS_PIN 1
#define MAX7219_GPIO_CLK_PIN 2
#define DISPLAY_SIZE 4
struct Digit
{
uint8_t Addr;
uint8_t Data[8];
};
void setup() {
GPIO_FUNC0_OUT_SEL_CFG_REG |= 0x80;
GPIO_FUNC1_OUT_SEL_CFG_REG |= 0x80;
GPIO_FUNC2_OUT_SEL_CFG_REG |= 0x80;
GPIO_FUNC8_OUT_SEL_CFG_REG |= 0x80;
GPIO_ENABLE_REG |= (1<<0 | 1<<1 | 1<<2 | 1<<8);
Max7219_Init();
}
void loop() {
test();
}
void Max7219_CS_High()
{
GPIO_OUT_REG |= 1<<MAX7219_GPIO_CS_PIN;
}
void Max7219_CS_Low()
{
GPIO_OUT_REG &= ~1<<MAX7219_GPIO_CS_PIN;
}
void Max7219_Send( uint16_t Data )
{
for ( uint8_t i = 0 ; i < 16; i++ )
{
GPIO_OUT_REG |= 1<<MAX7219_GPIO_CLK_PIN;
if ( Data & 0x8000 )
{
GPIO_OUT_REG |= 1<<MAX7219_GPIO_DOUT_PIN;
}
else
{
GPIO_OUT_REG &= ~1<<MAX7219_GPIO_DOUT_PIN;
}
GPIO_OUT_REG &= ~1<<MAX7219_GPIO_CLK_PIN;
Data <<= 1;
}
}
void Max7219_Init()
{
struct Digit Cnfg[4];
Cnfg[0].Addr = DECODE_MODE;
Cnfg[0].Data[0] = MODE_1;
Cnfg[1].Addr = INTENSITY;
Cnfg[1].Data[0] = INTENSITY_1_32;
Cnfg[2].Addr = SCAN_LIMIT;
Cnfg[2].Data[0] = SL_DIGIT_0_1_2_3_4_5_6_7;
Cnfg[3].Addr = SHUTDOWN;
Cnfg[3].Data[0] = NORMAL_OPERATION;
Cnfg[4].Addr = DISPLAY_TEST;
Cnfg[4].Data[0] = 0;
for ( uint8_t x = 0 ; x < 4 ; x++ )
{
Max7219_CS_Low();
Max7219_Send( MAX7219_BUILD_WORD( Cnfg[x].Addr , Cnfg[x].Data[0] ) );
Max7219_CS_High();
}
for (uint8_t x = 0 ; x < 8 ; x++ )
{
Cnfg[x].Addr = DIGIT_0 + x;
for (uint8_t y = 0 ; y < 8 ; y++ )
{
Cnfg[x].Data[y] = 0xc3;
Max7219_CS_Low();
Max7219_Send( MAX7219_BUILD_WORD( Cnfg[x].Addr, Cnfg[x].Data[y] ) );
Max7219_CS_High();
}
}
}
void Max7219_Dsp_Test_On()
{
Max7219_CS_Low();
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x01) );
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x01) );
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x01) );
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x01) );
Max7219_CS_High();
}
void Max7219_Dsp_Test_Off()
{
Max7219_CS_Low();
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x00) );
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x00) );
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x00) );
Max7219_Send( MAX7219_BUILD_WORD( DISPLAY_TEST, 0x00) );
Max7219_CS_High();
}
void test()
{
struct Digit Cnfg[4];
for (uint8_t x = 0 ; x < 8 ; x++ )
{
Cnfg[x].Addr = DIGIT_0 + x;
Max7219_CS_Low();
for (uint8_t y = 0 ; y < 8 ; y++ )
{
Cnfg[x].Data[y] = 0x00;
Max7219_Send( MAX7219_BUILD_WORD( Cnfg[x].Addr, Cnfg[x].Data[y] ) );
}
Max7219_CS_High();
}
}