📄 adc.c
字号:
/************************************************
* *
* ADC.C: ADC sub-routines *
* *
************************************************/
#include <reg51.h>
#include "mascot.h"
#include "osd.h"
#include "global.h"
unsigned char code ChangeLine[3] = "\x0a\x0d";
#define CLAMP_MAX 0x02
#define CLAMP_MIN 0x01
#define GAIN_MAX 0xFE
#define GAIN_MIN 0xFC //jordan1218
//jordan0222 adcGainTune subroutine
void adcGainTune(void)
{
unsigned char i, cnt1, cnt2;
initCalibration();
hvCalibration(OPTIONCENTER);
eepData.clampR = eepData.clampG = eepData.clampB = DEF_clamp;
eepData.gainR = eepData.gainG = eepData.gainB = DEF_gain;
buff[5] = buff[6] = buff[7] = DEF_clamp;
buff[8] = buff[9] = buff[10] = DEF_gain;
RegByteOut(TDA_RGAIN, eepData.gainR);
RegByteOut(TDA_GGAIN, eepData.gainG);
RegByteOut(TDA_BGAIN, eepData.gainB);
RegByteOut(TDA_RCLAMP, eepData.clampR);
RegByteOut(TDA_GCLAMP, eepData.clampG);
RegByteOut(TDA_BCLAMP, eepData.clampB);
for(i=0;i<3;i++)
{
#if RS232DBG
if(fgRS232){ wr_232_str("***** i="); wr_232_dec(i); wr_232_str(ChangeLine);}
#endif
cnt1 = 30;
while(cnt1>0)
{
cnt1--;
buff[3] = HCALSTART+26; // Cal H End [7:0]
buff[4] = ((HCALSTART>>8)&0x0F); // Cal H Start/End [10:8]
RegDataOut(0xB4, buff+3, 2);
#if RS232DBG
if(fgRS232)
wr_232_str("ADJ clamp -->\x0a\x0d");
#endif
if(cnt1>25) cnt2=43; else cnt2=10;
while(cnt2>0)
{
cnt2--;
readColor();
if ((buff[5+i] > 0x80) && (buff[i] > 0x40))
goto fail;
#if NEW_ADC
if (buff[i] < CLAMP_MIN) buff[5+i]+=6;//eepData.clampR G B
else if (buff[i] > CLAMP_MAX+6) buff[5+i]-=6;
else if (buff[i] > CLAMP_MAX) buff[5+i]-=2;
else break;
RegByteOut(0x12+2*i,buff[5+i]<<1); //set cr12,14,16
#else
if (buff[i] < CLAMP_MIN) buff[5+i]-=4;//eepData.clampR G B
else if (buff[i] > CLAMP_MAX+6) buff[5+i]+=4;
else if (buff[i] > CLAMP_MAX) buff[5+i]+=2;
else break;
RegByteOut(0x12+2*i,buff[5+i]); //set cr12,14,16
#endif
#if RS232DBG
if(fgRS232)
wr_232_str("==> clp="); wr_232_hex(buff[5+i],1);wr_232_hex(buff[i],1); wr_232_hex(cnt2,1);wr_232_str(ChangeLine);
#endif
}
#if RS232DBG
if(fgRS232)
{
wr_232_str("==> clamp="); wr_232_hex(buff[5+i],1);wr_232_hex(buff[i],1); wr_232_str(ChangeLine);
wr_232_str("ADJ gain -->\x0a\x0d");
}
#endif
buff[3] = hTotal; // Cal H End [7:0]
buff[4] = ((hTotal>>4)&0xF0)+((HCALSTART>>8)&0x0F);//Cal H Start/End [10:8]
RegDataOut(0xB4, buff+3, 2);
readColor();
if ((buff[8+i] > 0x40) && (buff[i] < 0x10))
goto fail;
if( (buff[8+i] < 4) || (buff[8+i] > 0x7c) ) break;
else if (buff[i] > GAIN_MAX) buff[8+i]-=3;//buff[i] is maximum color value R,G,B
else if (buff[i] < GAIN_MIN-6) buff[8+i]+=3;//buff[8+i] is one of eepData.gainR G B
else if (buff[i] < GAIN_MIN) buff[8+i]++;
else break;
RegByteOut(0x13+2*i,buff[8+i]);//set cr 13,15,17
#if RS232DBG
if(fgRS232)
wr_232_str("==> gain="); wr_232_hex(buff[8+i],1);wr_232_hex(buff[i],1); wr_232_str(ChangeLine);
#endif
}
#if RS232DBG
if(fgRS232){
wr_232_str("==> final gain="); wr_232_hex(buff[8+i],1);wr_232_hex(buff[i],1); wr_232_str(ChangeLine);
}
#endif
}
eepData.clampR = buff[5];
eepData.clampG = buff[6];
eepData.clampB = buff[7];
eepData.gainR = buff[8];
eepData.gainG = buff[9];
eepData.gainB = buff[10];
eepDataOut(EEPDATASTART+(&eepData.clampR-&eepData),(unsigned char *)&eepData.clampR, 6);
// eepData.blacklevel = DEF_blacklevel;
// eepDataOut(EEPDATASTART+(&eepData.blacklevel-&eepData),(unsigned char *)&eepData.blacklevel, 1);
#if RS232DBG
if(fgRS232){
wr_232_str("adcGainTune(E)..\x0a\x0d");
wr_232_str("gainR="); wr_232_hex(eepData.gainR,1);
wr_232_str(" gainG="); wr_232_hex(eepData.gainG,1);
wr_232_str(" gainB="); wr_232_hex(eepData.gainB,1);
wr_232_str(ChangeLine);
wr_232_str("clampR="); wr_232_hex(eepData.clampR,1);
wr_232_str(" clampG="); wr_232_hex(eepData.clampG,1);
wr_232_str(" clampB="); wr_232_hex(eepData.clampB,1);
wr_232_str(ChangeLine);
}
#endif
return;
fail:
eepDataIn(EEPDATASTART+(&eepData.clampR-&eepData),buff+5, 6);
RegByteOut(TDA_RGAIN, eepData.gainR);
RegByteOut(TDA_GGAIN, eepData.gainG);
RegByteOut(TDA_BGAIN, eepData.gainB);
RegByteOut(TDA_RCLAMP, eepData.clampR);
RegByteOut(TDA_GCLAMP, eepData.clampG);
RegByteOut(TDA_BCLAMP, eepData.clampB);
// eepData.blacklevel = DEF_blacklevel;
// eepDataOut(EEPDATASTART+(&eepData.blacklevel-&eepData),(unsigned char *)&eepData.blacklevel, 1);
#if RS232DBG
if(fgRS232){ wr_232_str("Gain tune fail..\x0a\x0d"); }
#endif
}
void readColor(void)
{
RegByteOut(0xB1, 0x07); // select component R G b
RegByteOut(0xB2, 0xFF);
RegByteOut(0xB0, 0x20); // Enable color calibration
RegByteOut(0x00, 0x00); // Clear the calibration status reg
waitCalibReady(0x40);
#if NEW_ADC
buff[2] = RegByteIn(0xDB);
buff[1] = RegByteIn(0xDC);
buff[0] = RegByteIn(0xDD);
#else
buff[0] = RegByteIn(0xDB);
buff[1] = RegByteIn(0xDC);
buff[2] = RegByteIn(0xDD);
#endif
}
#if AUTO_CLAMP
#define clamp_ok 0x80
#define clamp_Up 0x01
#define clamp_Dn 0x02
#define clamp_U_turn 0x04
#define clamp_more 0x08
// add by jordan0113
void adcClampTune(void)
{
unsigned char i,j=0; //, j
unsigned char Clamp_buff[3] = {0x00, 0x00, 0x00};
#if RS232DBG
if(fgRS232){ wr_232_str("adcClampTune(B)..\x0a\x0d"); }
#endif
initCalibration();
buff[3] = HCALSTART+26; // Cal H End [7:0] 030121-1 by jordan
buff[4] = ((HCALSTART>>8)&0x0F); // Cal H Start/End [10:8]
RegDataOut(0xB4, buff+3, 2);
buff[15] = eepData.clampR;
buff[16] = eepData.clampG;
buff[17] = eepData.clampB;
while(1)
{
next_loop:
if ( modechangeflag ) //by seven 030718
return;
/*if ( RegByteIn(0x01) & 0x35 )
{
modeChangemode = 1;
return;
}*/ // by seven
#if RS232DBG
if(fgRS232){ wr_232_str("adcClampTune readColor..\x0a\x0d"); }
if(fgRS232){
wr_232_str("==> j=");wr_232_hex(j,1); wr_232_str(ChangeLine);
}
#endif
j++;
if(j>50)
goto fail; // 030121-2 by jordan
if ((Clamp_buff[0] & clamp_ok) && (Clamp_buff[1] & clamp_ok) && (Clamp_buff[2] & clamp_ok))
goto a_ok;
readColor();
for(i = 0; i < 3; i++)
{
next_color:
if (Clamp_buff[i] & clamp_ok)
{
if (i == 2)
goto next_loop;
else
{
i++;
goto next_color;
}
}
if ((buff[15+i] > 0xd0) && (buff[0+i] > 0x40))
goto fail;
if (buff[0+i] < 1)
{
if (Clamp_buff[i] & clamp_Up)
{
if (Clamp_buff[i] & clamp_U_turn)
{
Clamp_buff[i] |= clamp_ok;
}
Clamp_buff[i] |= clamp_U_turn;
Clamp_buff[i] &= ~clamp_Up;
}
buff[15+i]-=8;//eepData.clampR G B
Clamp_buff[i] |= clamp_Dn;
}
else if (buff[0+i] > 9)
{
if (Clamp_buff[i] & clamp_Dn)
{
if (Clamp_buff[i] & clamp_U_turn)
{
Clamp_buff[i] |= clamp_ok;
}
Clamp_buff[i] |= clamp_U_turn;
Clamp_buff[i] &= ~clamp_Dn;
}
buff[15+i]+=8;
Clamp_buff[i] |= clamp_Up;
}
else if (buff[0+i] > 2)
{
if (Clamp_buff[i] & clamp_Dn)
{
if (Clamp_buff[i] & clamp_U_turn)
{
Clamp_buff[i] |= clamp_ok;
}
Clamp_buff[i] |= clamp_U_turn;
Clamp_buff[i] &= ~clamp_Dn;
}
buff[15+i]+=2;
Clamp_buff[i] |= clamp_Up;
}
else
{
Clamp_buff[i] |= clamp_ok;
}
RegByteOut(0x12+2*i,buff[15+i]); //set cr12,14,16
#if RS232DBG
if(fgRS232){
wr_232_str("==> clamp=");wr_232_hex(i,1); wr_232_hex(buff[15+i],1);wr_232_hex(buff[0+i],1); wr_232_str(ChangeLine);
}
#endif
}
}
a_ok:
eepData.clampR = buff[15];
eepData.clampG = buff[16];
eepData.clampB = buff[17];
// eepDataOut(EEPDATASTART+(&eepData.clampR-&eepData),(unsigned char *)&eepData.clampR, 6);
return;
fail:
eepDataIn(EEPDATASTART+(&eepData.clampR-&eepData),buff, 3);
eepData.clampR = buff[0];
eepData.clampG = buff[1];
eepData.clampB = buff[2];
// eepDataOut(EEPDATASTART+(&eepData.clampR-&eepData),(unsigned char *)&eepData.clampR, 6);
RegByteOut(TDA_RCLAMP, eepData.clampR);
RegByteOut(TDA_GCLAMP, eepData.clampG);
RegByteOut(TDA_BCLAMP, eepData.clampB);
#if RS232DBG
if(fgRS232){ wr_232_str("fail..\x0a\x0d"); }
#endif
}
#endif //AUTO_CLAMP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -