Академический Документы
Профессиональный Документы
Культура Документы
h>
unsigned int Temp;
unsigned int adc_sample_1, adc_sample_2;
unsigned int adc_sample_3, adc_sample;
int scale_coeff = 2932;
void main() {
WDTCON = 0x0018;
PWM1_Init(19530);
t resolution)
ADC_Init();
ADCON0 = 0x1F;
TRISIO.B2 = 0;
TRISIO.B0 = 1;
while(1){
//ADC Read at ANO
adc_sample_1 = ADC_Read(0);
Delay_ms(1000);
adc_sample_2 = ADC_Read(0);
Delay_ms(1000);
adc_sample_3 = ADC_Read(0);
Delay_ms(1000);
adc_sample = (adc_sample_1 + adc_sample_2 + adc_sample_3)/3; //Take 3 sample f
rom ADC and take the average
//Read ADC Channel 1
Temp = (adc_sample*scale_coeff)/10000; //Using Integer calculation
//PWM formular for 10 bit resolution: (Percent*1023)/100
if(Temp > 82 && Temp < 84)
{
PWM1_Set_Duty(102); //Set PWM to 10%
PWM1_Start();
}
if(Temp > 84 && Temp < 86)
{
PWM1_Set_Duty(205); //Set PWM to 20%
PWM1_Start();
}
if(Temp > 86 && Temp < 88)
{
PWM1_Set_Duty(307); //Set PWM to 30%
PWM1_Start();
}
if(Temp > 88 && Temp < 90)
{
PWM1_Set_Duty(409); //Set PWM to 40%
PWM1_Start();
}
if(Temp > 90 && Temp < 92)
{
PWM1_Set_Duty(512); //Set PWM to 50%
PWM1_Start();
}
if(Temp > 92 && Temp < 94)
{
PWM1_Set_Duty(614); //Set PWM to 60%
PWM1_Start();
}
if(Temp > 94 && Temp < 96)
{
PWM1_Set_Duty(716); //Set PWM to 70%
PWM1_Start();
}
if(Temp > 96 && Temp <98 )
{
PWM1_Set_Duty(818); //Set PWM to 80%
PWM1_Start();
}
if(Temp > 98 && Temp < 100)
{
PWM1_Set_Duty(921); //Set PWM to 90%
PWM1_Start();
}
if(Temp >= 100)
{
PWM1_Set_Duty(1023);
//Set PWM to 100%
PWM1_Start();
}
else if(Temp < 82)
{
PWM1_Set_Duty(0); //Trun off PWM
PWM1_Stop();
break;
//Breaks program out of the while loop and causes it to re-i
nitialize all the registers/start over the process.
}
}
}