//********************************************************************** /* <DC2DCコンバータ V3> */ //********************************************************************** #define SW_UP PORTA.F2 #define SW_DOWN PORTA.F3 #define SW_HOLD PORTA.F5 //********************************************************************** void Pwm_Change_DutyEx(unsigned int duty_ratio) { CCPR1L = duty_ratio >> 2; CCP1CON.CCP1Y = duty_ratio & 0b00000001; CCP1CON.CCP1X = (duty_ratio & 0b00000010) >> 1; } //********************************************************************** void main() { //変数の設定 static double ad, target; static unsigned char buf[10]; static unsigned short cnt; static unsigned int duty; //ポート関連の設定 TRISA = 0b00111100; TRISB = 0b00000000; OSCCON = 0b01110000; // クロックを8Mhzに設定する。 ANSEL = 0b00010000; // A/D変換を使用する。 //LCDの設定 Lcd_Custom_Config(&PORTA, 1, 0, 7, 6, &PORTB, 5, 6, 7); Lcd_Custom_Cmd(LCD_CURSOR_OFF); Lcd_Custom_Cmd(LCD_CLEAR); // Pwm_Init(10000); //freq=10kHz PR2 = 0xFF; duty = 100; Pwm_Change_DutyEx(duty); //duty=10% Pwm_Start(); // target = 100; // WordToStr(target, buf); Lcd_Custom_Out(1, 1, &buf[2]); Lcd_Custom_Out(1, 4, "V"); Lcd_Custom_Out(2, 4, "V"); Lcd_Custom_Out(2, 6, "duty="); while (1) { ad = 0.0; for (cnt = 0; cnt < 100; cnt++) { ad += Adc_Read(4); } ad = ad / 100.0; ad = ((ad * 4.8828125) * 101.0) / 1000.0; WordToStr(ad, buf); Lcd_Custom_Out(2, 1, &buf[2]); // if (SW_HOLD == 1) { if (ad > target) { duty--; } else { duty++; } } Pwm_Change_DutyEx(duty); WordToStr(duty, buf); Lcd_Custom_Out(2, 11, &buf[1]); // if (SW_UP == 0) { target += 1; WordToStr(target, buf); Lcd_Custom_Out(1, 1, &buf[2]); } if (SW_DOWN == 0) { target -= 1; WordToStr(target, buf); Lcd_Custom_Out(1, 1, &buf[2]); } } } //**********************************************************************