Merge pull request #139 from mrfaptastic/donnersm
Fix noise if brightness too high.
This commit is contained in:
commit
d02eaa7ea5
1 changed files with 7 additions and 6 deletions
|
@ -637,6 +637,7 @@ void MatrixPanel_I2S_DMA::clearFrameBuffer(bool _buff_id){
|
||||||
|
|
||||||
// drive latch while shifting out last bit of RGB data
|
// drive latch while shifting out last bit of RGB data
|
||||||
row[dma_buff.rowBits[row_idx]->width - 2] |= BIT_LAT; // -1 pixel to compensate array index starting at 0
|
row[dma_buff.rowBits[row_idx]->width - 2] |= BIT_LAT; // -1 pixel to compensate array index starting at 0
|
||||||
|
row[dma_buff.rowBits[row_idx]->width - 1] |= BIT_LAT; // -1 pixel to compensate array index starting at 0
|
||||||
|
|
||||||
// need to disable OE before/after latch to hide row transition
|
// need to disable OE before/after latch to hide row transition
|
||||||
// Should be one clock or more before latch, otherwise can get ghosting
|
// Should be one clock or more before latch, otherwise can get ghosting
|
||||||
|
@ -661,8 +662,8 @@ void MatrixPanel_I2S_DMA::brtCtrlOE(int brt, const bool _buff_id){
|
||||||
if (!initialized)
|
if (!initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (brt > PIXELS_PER_ROW - m_cfg.latch_blanking) // can't control values larger than (row_width - latch_blanking) to avoid ongoing issues being raised about brightness and ghosting.
|
if (brt > PIXELS_PER_ROW - (MAX_LAT_BLANKING + 2)) // can't control values larger than (row_width - latch_blanking) to avoid ongoing issues being raised about brightness and ghosting.
|
||||||
brt = PIXELS_PER_ROW - m_cfg.latch_blanking;
|
brt = PIXELS_PER_ROW - (MAX_LAT_BLANKING + 2); // +2 for a bit of buffer...
|
||||||
|
|
||||||
if (brt < 0)
|
if (brt < 0)
|
||||||
brt = 0;
|
brt = 0;
|
||||||
|
@ -686,15 +687,15 @@ void MatrixPanel_I2S_DMA::brtCtrlOE(int brt, const bool _buff_id){
|
||||||
|
|
||||||
// Brightness control via OE toggle - disable matrix output at specified x_coord
|
// Brightness control via OE toggle - disable matrix output at specified x_coord
|
||||||
if((coloridx > lsbMsbTransitionBit || !coloridx) && ((x_coord) >= brt)){
|
if((coloridx > lsbMsbTransitionBit || !coloridx) && ((x_coord) >= brt)){
|
||||||
row[x_coord] |= BIT_OE; continue; // For Brightness control
|
row[x_coord] |= BIT_OE; // Disable output after this point.
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
// special case for the bits *after* LSB through (lsbMsbTransitionBit) - OE is output after data is shifted, so need to set OE to fractional brightness
|
// special case for the bits *after* LSB through (lsbMsbTransitionBit) - OE is output after data is shifted, so need to set OE to fractional brightness
|
||||||
if(coloridx && coloridx <= lsbMsbTransitionBit) {
|
if(coloridx && coloridx <= lsbMsbTransitionBit) {
|
||||||
// divide brightness in half for each bit below lsbMsbTransitionBit
|
// divide brightness in half for each bit below lsbMsbTransitionBit
|
||||||
int lsbBrightness = brt >> (lsbMsbTransitionBit - coloridx + 1);
|
int lsbBrightness = brt >> (lsbMsbTransitionBit - coloridx + 1);
|
||||||
if((x_coord) >= lsbBrightness)
|
if((x_coord) >= lsbBrightness)
|
||||||
row[x_coord] |= BIT_OE; // For Brightness
|
row[x_coord] |= BIT_OE; // Disable output after this point.
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue