/Designs/Laboratory_instruments/High_voltage_power_supply/SW/VN/vn.c
0,0 → 1,82
#include "D:\PIC\VN\vn.h"
 
 
//#define MAXDUTY (int16)160 // 50 kHz
#define MAXDUTY (int16)400 // 20 kHz
//#define MAXDUTY (int16)800 // 10 kHz
#define HALFDUTY (int16)MAXDUTY/2
//#define DIVISOR 199 // 10 kHz
#define DIVISOR 99 // 20 kHz
//#define DIVISOR 39 // 50 kHz
 
#define regreseM (2.02)
#define regreseN (-451)
 
void main()
{
 
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_1,DIVISOR,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(HALFDUTY);
set_pwm2_duty(MAXDUTY);
setup_comparator(NC_NC_NC_NC);
setup_oscillator(OSC_8MHZ);
 
set_adc_channel(0);
delay_ms(500);
 
unsigned int16 reg;
float given;
printf("Cvak\r\n");
reg=400;
given=regreseM*reg+regreseN;
 
while(true)
{
unsigned int16 value;
value = read_adc();
if(kbhit())
{
char c;
set_pwm2_duty((int16)MAXDUTY);
c=getc();
 
if(c=='u')
{
if (reg<600) reg++;
printf("up*");
}
 
if(c=='d')
{
if (reg>250) reg--;
printf("down*");
}
 
if((c>='a')&&(c<='z'))
{
given=regreseM*reg+regreseN;
printf("reg: %Lu\r\n",reg);
}
}
 
if (value >= given)
{
set_pwm2_duty((int16)MAXDUTY);
}
else
{
set_pwm2_duty((int16)255);
}
delay_us(200);
}
}