Skip to content

Commit

Permalink
added x scaling to the hub75e panels
Browse files Browse the repository at this point in the history
  • Loading branch information
CamelCaseName committed Feb 27, 2024
1 parent 9947e54 commit f60fb02
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 127 deletions.
9 changes: 9 additions & 0 deletions src/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
// #define PANEL_SMALL_BRIGHT // gets the image muuuuch brighter on the hub75e 1 bit buffer at the cost of some slight ghosting
// #define PANEL_HIGH_RES // changes the size from effective 64x32 on the hub7e 128x64 panels to a full 64x64
// #define PANEL_GPIO_NON_INTRUSIVE // this saves the other pins on GPIOB on the nano and other smaller boards in hub75e mode
// #define PANEL_HUB75E_SIZE //tells the library that the given panel size is meant for hub75e panels, else the given size is simulated
// ######## THE FOLLOWING WORK REGARDLESS OF PANEL TYPE
// #define PANEL_3_PIN_ROWS // swaps the row addressing in from 5(binary) pin to 3 pin(shift register)
// #define PANEL_BIG // use 2 bit rgb image buffer
Expand Down Expand Up @@ -50,6 +51,14 @@
#else
#define PANEL_3_PIN_ROWS
#endif
#ifdef PANEL_HUB75E_SIZE
#define PANEL_E_X PANEL_X
#define PANEL_E_Y PANEL_Y
#else
// default size for a hub75e panel, usually
#define PANEL_E_X 128
#define PANEL_E_Y 64
#endif
#endif

#endif // PANEL_SETTINGS_H
3 changes: 3 additions & 0 deletions src/boards/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
// check we are on uno or nano, get pinout and how we access them
#ifdef ARDUINO_AVR_NANO // nano avr 328p
#include "boards/nano/nano.h"
#if PANEL_X * PANEL_Y > 4096
#pragma GCC warning "this panel size may be too large for the mighty nano ram, please choose a smaller size and let the library simulate bigger pixels"
#endif
#else
#ifdef ARDUINO_AVR_UNO
#include "boards/uno/uno.h"
Expand Down
195 changes: 68 additions & 127 deletions src/output/hub75e/1bit_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
void _displaySmallBuffer()
{
LED *index = (LED *)&buffer;
for (uint8_t y = 0; y < PANEL_Y / 2; y++) // 32 rows
for (uint8_t y = 0; y < PANEL_E_Y / 2; y++) // 32 rows
{
#ifndef PANEL_SMALL_BRIGHT
_stepRow();
Expand All @@ -19,224 +19,162 @@ void _displaySmallBuffer()

// chip 0
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 1

++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 2
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 3
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 4
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 5
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 6
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;

// chip 7
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
++index;
_set_color(*(uint8_t *)(index) << (uint8_t)2);
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(index)) >> (uint8_t)4)));
DCLK_GCLK;
DCLK_GCLK;
DCLK_GCLK_SCALED;
_set_color((uint8_t)((*((uint16_t *)(((uint8_t *)(index) + sizeof(uint8_t))))) >> (uint8_t)2));
DCLK_GCLK;
DCLK_GCLK_SCALED;

#ifdef PANEL_SMALL_BRIGHT

Expand All @@ -246,10 +184,13 @@ void _displaySmallBuffer()
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));

#else
DCLK_GCLK;
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
DCLK_GCLK;

#if PANEL_X > 64
_set_color((*(((uint8_t *)(index)) + (sizeof(uint8_t) * 2))));
#endif

// latch data from shift registers to latch register, "buffer" for global release to pwm
HIGH_LAT;
LATCH_GCLK;
Expand Down
31 changes: 31 additions & 0 deletions src/output/hub75e/hub75e_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,37 @@
DCLK_GCLK; \
DCLK_GCLK

#if PANEL_X == 128
#define DCLK_GCLK_SCALED \
DCLK_GCLK
#else
#if PANEL_X == 64
#define DCLK_GCLK_SCALED \
DCLK_GCLK; \
DCLK_GCLK
#else
#if PANEL_X == 32
#define DCLK_GCLK_SCALED \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK
#else
#if PANEL_X == 16
#define DCLK_GCLK_SCALED \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK; \
DCLK_GCLK
#endif
#endif
#endif
#endif

#define LSB_FAKE \
_set_color(0); \
DCLK_GCLK16X; \
Expand Down

0 comments on commit f60fb02

Please sign in to comment.