Takeuchi Kouichi
/
2ak0831_PWM2
main.cpp@0:ee8e9c93e76d, 2010-09-01 (annotated)
- Committer:
- takeuchi
- Date:
- Wed Sep 01 05:31:11 2010 +0000
- Revision:
- 0:ee8e9c93e76d
- Child:
- 1:db2254d3a5a5
Who changed what in which revision?
User | Revision | Line number | New 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 |