Hi there!
I have the circuit depicted in the diagram below previously discussed here that is driving 6 seven segment displays, everything works fine although I do not like to multiplex via software as it is very prone to interference from other parts of the code which could introduce flickering therefore I would like to drive this circuit or create a new one using a dedicate IC such as MAX7219/7221, TM1637 etc.
Unfortuantely I do not have the datasheet for the displays the only things I know is that they are 3" common cathode and that by testing they seem to have a Vf of 12V.
Basically the circuit works that the digit and segment that need to be turned on need to be both high while there rest needs to stay low therefore I am not sure if a dedicated IC will work for this purpose.
I am open to suggestions, I am also wodering should I keep the current circuit and integrate shit registers or shoud I go with a different approach?
EDIT 1:
I am using is a custom 4809 board with a CS5530 ADC connected to SPI and 14 pins to drive the segments, not delays are used in the code and all the timers are handled by millis.
EDIT 2:
Code I have tried to avoid blocking code, the 4809 has different timers than 328 therefore I have used megaAVR_TimerInterrupt library but without great results.
#define USE_TIMER_0 true
#define TIMER0_INTERVAL_MS 2
#define TIMER0_FREQUENCY (float)(5.0f)
#define TIMER0_DURATION_MS 0 //(10 * TIMER1_INTERVAL_MS)
#define ADJUST_FACTOR ((float)0.99850)
#include "megaAVR_TimerInterrupt.h"
#include <SevSeg.h>
SevSeg display;
byte numDigits = 6;
byte digitPins[] = { 5, 6, 7, 8, 9, 10 };
byte segmentPins[] = { 11, 12, 13, 14, 15, 16, 37, 36 }; // 8, 9, 10, 15, 14, 13, 12, 11
byte hardwareConfig = N_TRANSISTORS;
bool resistorsOnSegments = true;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = false;
void setup() {
ITimer0.init();
ITimer0.attachInterruptInterval(TIMER0_INTERVAL_MS * ADJUST_FACTOR, TimerHandler1, TIMER0_DURATION_MS);
display.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
display.setBrightness(10);
void loop() {
display.setNumber(value);
}
void TimerHandler1() {
display.refreshDisplay();
}



