Add 800x480p30 mode

this requires less OC than 800x480p60 and is verified to work with
https://www.adafruit.com/product/2232
This commit is contained in:
Jeff Epler 2023-05-26 10:28:28 -05:00 committed by ladyada
parent 27edec7280
commit c93f1fc417
5 changed files with 31 additions and 0 deletions

View file

@ -18,6 +18,10 @@ DVItext1 display(DVI_RES_640x240p60, adafruit_feather_dvi_cfg);
// Here's how a 100x60 char display might be declared: // Here's how a 100x60 char display might be declared:
//DVItext1 display(DVI_RES_800x480p60, adafruit_feather_dvi_cfg); //DVItext1 display(DVI_RES_800x480p60, adafruit_feather_dvi_cfg);
// A reduced refresh rate display doesn't as aggressive an over-clock
// This timing is verified to work on https://www.adafruit.com/product/2232
//DVItext1 display(DVI_RES_800x240p30, adafruit_feather_dvi_cfg);
void setup() { // Runs once on startup void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT); pinMode(LED_BUILTIN, OUTPUT);

View file

@ -23,10 +23,13 @@ static struct {
} dvispec[] = { } dvispec[] = {
{dvi_timing_640x480p_60hz, VREG_VOLTAGE_1_20, 320, 240, 2}, {dvi_timing_640x480p_60hz, VREG_VOLTAGE_1_20, 320, 240, 2},
{dvi_timing_800x480p_60hz, VREG_VOLTAGE_1_20, 400, 240, 2}, {dvi_timing_800x480p_60hz, VREG_VOLTAGE_1_20, 400, 240, 2},
{dvi_timing_800x480p_30hz, VREG_VOLTAGE_1_20, 400, 240, 2},
{dvi_timing_640x480p_60hz, VREG_VOLTAGE_1_20, 640, 480, 1}, {dvi_timing_640x480p_60hz, VREG_VOLTAGE_1_20, 640, 480, 1},
{dvi_timing_800x480p_60hz, VREG_VOLTAGE_1_20, 800, 480, 1}, {dvi_timing_800x480p_60hz, VREG_VOLTAGE_1_20, 800, 480, 1},
{dvi_timing_800x480p_30hz, VREG_VOLTAGE_1_20, 800, 480, 1},
{dvi_timing_640x480p_60hz, VREG_VOLTAGE_1_20, 640, 240, 2}, {dvi_timing_640x480p_60hz, VREG_VOLTAGE_1_20, 640, 240, 2},
{dvi_timing_800x480p_60hz, VREG_VOLTAGE_1_20, 800, 240, 2}, {dvi_timing_800x480p_60hz, VREG_VOLTAGE_1_20, 800, 240, 2},
{dvi_timing_800x480p_30hz, VREG_VOLTAGE_1_20, 800, 240, 2},
// Additional resolutions might get added here if the overclock issue can // Additional resolutions might get added here if the overclock issue can
// be sorted out. Regardless, always keep this list 1:1 in sync with the // be sorted out. Regardless, always keep this list 1:1 in sync with the
// DVIresolution enum in PicoDVI.h. // DVIresolution enum in PicoDVI.h.

View file

@ -21,10 +21,13 @@
enum DVIresolution { enum DVIresolution {
DVI_RES_320x240p60 = 0, DVI_RES_320x240p60 = 0,
DVI_RES_400x240p60, DVI_RES_400x240p60,
DVI_RES_400x240p30, // Reduced refresh rate, less overclock required
DVI_RES_640x480p60, DVI_RES_640x480p60,
DVI_RES_800x480p60, DVI_RES_800x480p60,
DVI_RES_800x480p30, // Reduced refresh rate, less overclock required
DVI_RES_640x240p60, // "Tall" pixels, e.g. for 80-column text mode DVI_RES_640x240p60, // "Tall" pixels, e.g. for 80-column text mode
DVI_RES_800x240p60, // Same, 100-column DVI_RES_800x240p60, // Same, 100-column
DVI_RES_800x240p30, // Reduced refresh rate, less overclock required
DVI_RES_1280x720p30 // Experimenting, not working, plz don't use DVI_RES_1280x720p30 // Experimenting, not working, plz don't use
}; };

View file

@ -65,6 +65,26 @@ const struct dvi_timing __dvi_const(dvi_timing_800x480p_60hz) = {
.bit_clk_khz = 295200 .bit_clk_khz = 295200
}; };
// 800x480p 30 Hz, 148 MHz bit clock. This is not a CEA mode either , but needs
// lower overclock compared to dvi_timing_800x480p_60hz and the timing is
// verified to work on https://www.adafruit.com/product/2232
const struct dvi_timing __dvi_const(dvi_timing_800x480p_30hz) = {
.h_sync_polarity = false,
.h_front_porch = 24,
.h_sync_width = 72,
.h_back_porch = 96,
.h_active_pixels = 800,
.v_sync_polarity = true,
.v_front_porch = 3,
.v_sync_width = 10,
.v_back_porch = 4,
.v_active_lines = 480,
.bit_clk_khz = 147600
};
// SVGA reduced blanking (355 MHz bit clock) -- valid CVT mode, less common // SVGA reduced blanking (355 MHz bit clock) -- valid CVT mode, less common
// than fully-blanked SVGA, but doesn't require such a high system clock // than fully-blanked SVGA, but doesn't require such a high system clock
const struct dvi_timing __dvi_const(dvi_timing_800x600p_reduced_60hz) = { const struct dvi_timing __dvi_const(dvi_timing_800x600p_reduced_60hz) = {

View file

@ -75,6 +75,7 @@ extern const uint32_t dvi_ctrl_syms[4];
extern const struct dvi_timing dvi_timing_640x480p_60hz; extern const struct dvi_timing dvi_timing_640x480p_60hz;
extern const struct dvi_timing dvi_timing_800x480p_60hz; extern const struct dvi_timing dvi_timing_800x480p_60hz;
extern const struct dvi_timing dvi_timing_800x480p_30hz;
extern const struct dvi_timing dvi_timing_800x600p_60hz; extern const struct dvi_timing dvi_timing_800x600p_60hz;
extern const struct dvi_timing dvi_timing_960x540p_60hz; extern const struct dvi_timing dvi_timing_960x540p_60hz;
extern const struct dvi_timing dvi_timing_1280x720p_30hz; extern const struct dvi_timing dvi_timing_1280x720p_30hz;