1: // PWM초기화와 설정 마무리와 실행 중 PWM duty가변
2: // 2011.09.23 - 수만
3:
4: #include "pio.h"
5: #include "dbgu.h"
6: #include "lcd.h"
7: #include "led.h"
8: #include "aic.h"
9: #include "timer.h"
10: #include "ultra.h"
11: #include "adc.h"
12: #include "UserFunc.h"
13: #include "pwm.h"
14:
15: #define ESCAPEKEY 27
16: #define CUTVAL 500
17:
18: void ALL_INIT()
19: {
20: LCD_INIT();
21: LED_INIT();
22: DBGU_INIT();
23: ADC_INIT();
24: PWM3_INIT();
25: }
26:
27: int main(void)
28: {
29: int iResult = 0;
30: unsigned char ucRData;
31: unsigned char ucFlagUpdate = 0;
32: short usPWM3_Duty = 100;
33:
34: ALL_INIT();
35:
36: Send_String("test PWM\n\r");
37: LCD_String("test PWM");
38:
39: while(1)
40: {
41: ucRData = Recv_Char();
42: if(ESCAPEKEY == ucRData)
43: {
44: // 방향키는 이스케이프문자 27 + 65 66 67 68이나 이상하게 안됨. -> 두 번 더 읽어야 됨.
45: ucRData = Recv_Char();
46: ucRData = Recv_Char();
47:
48: switch(ucRData)
49: {
50: case 66: //방향키 ↓
51: if(0 < usPWM3_Duty)
52: {
53: usPWM3_Duty = usPWM3_Duty - 50;
54: ucFlagUpdate = 1;
55: }
56: break;
57:
58: case 65: // 방향키 ↑
59: if(800 > usPWM3_Duty)
60: {
61: usPWM3_Duty = usPWM3_Duty + 50;
62: ucFlagUpdate = 1;
63: }
64: break;
65:
66: default:
67: ucFlagUpdate = 0;
68: break;
69: }
70:
71: /* // 광센서 입력 받아 PWM duty cycle 조정
72: // 1. 데이터 획득
73: iResult = ADC_RUN7_int(); // 밝으면 1000 어두우면 600
74:
75: // 2. 전처리
76: iResult = iResult - CUTVAL; // 밝으면 500 어두우면 100
77: if(0 > iResult) //result가 음수이면 안됨
78: {
79: iResult = 0;
80: }
81:
82: // 3. 시간cal
83: usPWM3_Duty = PEROID - (iResult * 3) / 2; //iResult는 0 ~ 523사이의 값을 가짐. 1.5배를 해 감도를 높임
84: // 밝으면 LED 파워↓, 어두우면 LED 파워↑
85: ucFlagUpdate = 1; // LCD와 하이퍼터미널에 표시
86: */
87: if(1 == ucFlagUpdate)
88: {
89: PWM3_DutySet(usPWM3_Duty);
90: LCD_Cursor(1, 0);
91: printf_LCD("duty = %d", usPWM3_Duty, 0, 0);
92: printf_DBGU("PWM duty = %d\n", usPWM3_Duty, 0, 0);
93: }
94: }
95: }
96:
97: return 0;
98: }
99: