Dependencies:   mbed

Committer:
takeuchi
Date:
Wed Sep 01 05:31:11 2010 +0000
Revision:
0:ee8e9c93e76d
Child:
1:db2254d3a5a5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 0:ee8e9c93e76d 1 // PWM2
takeuchi 0:ee8e9c93e76d 2 #include "mbed.h"
takeuchi 0:ee8e9c93e76d 3 #include "TextLCD.h"
takeuchi 0:ee8e9c93e76d 4
takeuchi 0:ee8e9c93e76d 5 #define ON 1
takeuchi 0:ee8e9c93e76d 6 #define OFF 0
takeuchi 0:ee8e9c93e76d 7 #define Vmax 15
takeuchi 0:ee8e9c93e76d 8
takeuchi 0:ee8e9c93e76d 9 DigitalOut mled1(LED1);
takeuchi 0:ee8e9c93e76d 10 DigitalOut mled2(LED2);
takeuchi 0:ee8e9c93e76d 11 DigitalOut mled3(LED3);
takeuchi 0:ee8e9c93e76d 12 DigitalOut mled4(LED4);
takeuchi 0:ee8e9c93e76d 13 AnalogIn vin_adc(p20);
takeuchi 0:ee8e9c93e76d 14 AnalogIn vr_adc(p19);
takeuchi 0:ee8e9c93e76d 15 PwmOut rout_pwm(p21);
takeuchi 0:ee8e9c93e76d 16
takeuchi 0:ee8e9c93e76d 17 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,16,2); // rs, rw, e, d0, d1, d2, d3
takeuchi 0:ee8e9c93e76d 18 float adc_volt;
takeuchi 0:ee8e9c93e76d 19
takeuchi 0:ee8e9c93e76d 20 int main() {
takeuchi 0:ee8e9c93e76d 21 float vr_data,vin_data,pwm_data,duty;
takeuchi 0:ee8e9c93e76d 22 float vr_center;
takeuchi 0:ee8e9c93e76d 23
takeuchi 0:ee8e9c93e76d 24 rout_pwm.pulsewidth_us(100);
takeuchi 0:ee8e9c93e76d 25 rout_pwm.period_ms(1);
takeuchi 0:ee8e9c93e76d 26 rout_pwm.write(0.0);
takeuchi 0:ee8e9c93e76d 27 vr_center=vr_adc.read();
takeuchi 0:ee8e9c93e76d 28
takeuchi 0:ee8e9c93e76d 29 while(1){
takeuchi 0:ee8e9c93e76d 30 vr_data=vr_adc.read();
takeuchi 0:ee8e9c93e76d 31 vin_data=vin_adc.read()*Vmax;
takeuchi 0:ee8e9c93e76d 32 pwm_data=rout_pwm.read()*vin_adc.read()*Vmax;
takeuchi 0:ee8e9c93e76d 33
takeuchi 0:ee8e9c93e76d 34 if(vin_data <= 4.8){
takeuchi 0:ee8e9c93e76d 35 duty=0.0;
takeuchi 0:ee8e9c93e76d 36 rout_pwm.write(duty);
takeuchi 0:ee8e9c93e76d 37 while(vin_data < 6.0){
takeuchi 0:ee8e9c93e76d 38 vin_data=vin_adc.read()*Vmax;
takeuchi 0:ee8e9c93e76d 39 lcd.locate(0,0);
takeuchi 0:ee8e9c93e76d 40 lcd.printf("Vin:%2.1fV,Dt:%3.0f%%",vin_data,duty*100);
takeuchi 0:ee8e9c93e76d 41 lcd.locate(0,1);
takeuchi 0:ee8e9c93e76d 42 lcd.printf("Mode:charge");
takeuchi 0:ee8e9c93e76d 43 wait(0.3);
takeuchi 0:ee8e9c93e76d 44 lcd.locate(0,1);
takeuchi 0:ee8e9c93e76d 45 lcd.printf("Mode: ");
takeuchi 0:ee8e9c93e76d 46 wait(0.3);
takeuchi 0:ee8e9c93e76d 47 }
takeuchi 0:ee8e9c93e76d 48 }
takeuchi 0:ee8e9c93e76d 49 else if(4.8 <= vin_data && vin_data <= 5.2){
takeuchi 0:ee8e9c93e76d 50 duty=1.0;
takeuchi 0:ee8e9c93e76d 51 lcd.locate(0,1);
takeuchi 0:ee8e9c93e76d 52 lcd.printf("Mode:slow! ");
takeuchi 0:ee8e9c93e76d 53 }
takeuchi 0:ee8e9c93e76d 54 else {
takeuchi 0:ee8e9c93e76d 55 duty=5.0/vin_data+(vr_data-vr_center);
takeuchi 0:ee8e9c93e76d 56 lcd.locate(0,1);
takeuchi 0:ee8e9c93e76d 57 lcd.printf("Mode:Auto ");
takeuchi 0:ee8e9c93e76d 58 }
takeuchi 0:ee8e9c93e76d 59 rout_pwm.write(duty);
takeuchi 0:ee8e9c93e76d 60
takeuchi 0:ee8e9c93e76d 61 //lcd.cls();
takeuchi 0:ee8e9c93e76d 62 lcd.locate(0,0);
takeuchi 0:ee8e9c93e76d 63 lcd.printf("Vin:%2.1fV,Dt:%3.0f%%",vin_data,duty*100);
takeuchi 0:ee8e9c93e76d 64
takeuchi 0:ee8e9c93e76d 65 wait(0.3);
takeuchi 0:ee8e9c93e76d 66 }//while
takeuchi 0:ee8e9c93e76d 67 }//main