Rev 967 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 967 | Rev 1079 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | 1 | ||
| 2 | #include "act_RGBdriver.h" |
2 | #include "act_RGBdriver.h" |
| 3 | #define ALGO_FREQ |
3 | #define ALGO_FREQ 100 |
| 4 | #define |
4 | #define ADC_W 5 |
| 5 | #define |
5 | #define ADC_R 4 |
| - | 6 | #define ADC_G 2 |
|
| - | 7 | #define ADC_B 0 |
|
| 6 | 8 | ||
| - | 9 | #define OCR_W OCR1B |
|
| - | 10 | #define OCR_R OCR1A |
|
| 7 | #define |
11 | #define OCR_G OCR0A |
| 8 | #define |
12 | #define OCR_B OCR0B |
| 9 | 13 | ||
| 10 | #define |
14 | #define TARGET_CURRENT_W 250UL |
| 11 | #define |
15 | #define TARGET_ADC_W TARGET_CURRENT_W*4UL*1024UL/5000UL |
| 12 | 16 | ||
| 13 | #define |
17 | #define TARGET_CURRENT_R 50UL |
| - | 18 | #define TARGET_ADC_R TARGET_CURRENT_R*4UL*3UL*1024UL/5000UL |
|
| - | 19 | ||
| - | 20 | #define TARGET_CURRENT_G 50UL |
|
| - | 21 | #define TARGET_ADC_G TARGET_CURRENT_G*4UL*3UL*1024UL/5000UL |
|
| - | 22 | ||
| - | 23 | #define TARGET_CURRENT_B 50UL |
|
| 14 | #define |
24 | #define TARGET_ADC_B TARGET_CURRENT_B*4UL*3UL*1024UL/5000UL |
| 15 | 25 | ||
| 16 | /* |
26 | /* |
| 17 | 27 | ||
| 18 | 50mA*0.1R = 5mV |
28 | 50mA*0.1R = 5mV |
| 19 | 5mV*40ggr = 200mV |
29 | 5mV*40ggr = 200mV |
| Line 22... | Line 32... | ||
| 22 | 50mA*0.1R = 5mV |
32 | 50mA*0.1R = 5mV |
| 23 | 5mV*40ggr = 200mV |
33 | 5mV*40ggr = 200mV |
| 24 | 50mA*0.1*40*1024/5 = 41 |
34 | 50mA*0.1*40*1024/5 = 41 |
| 25 | 50mA*4*1024/5 = 41 |
35 | 50mA*4*1024/5 = 41 |
| 26 | */ |
36 | */ |
| 27 | - | ||
| 28 | void calculatePWM(uint8_t timer) { |
37 | void calculatePWM(uint8_t timer) { |
| 29 | uint16_t adcValue; |
38 | uint16_t adcValue; |
| 30 | adcValue = ADC_Get( |
39 | adcValue = ADC_Get(ADC_W); |
| 31 | - | ||
| 32 | if (adcValue > TARGET_ADC+5) |
- | |
| 33 | OCR1B -=1; |
- | |
| 34 | else if (adcValue < TARGET_ADC) |
- | |
| 35 | OCR1B++; |
- | |
| 36 | else if (adcValue > TARGET_ADC+10) |
- | |
| 37 | OCR1B=0; |
- | |
| 38 | - | ||
| 39 | - | ||
| 40 | adcValue = ADC_Get(4); |
- | |
| 41 | - | ||
| 42 | if (adcValue > TARGET_ADC2+5) |
- | |
| 43 | OCR1A -=1; |
- | |
| 44 | else if (adcValue < TARGET_ADC2) |
- | |
| 45 | OCR1A++; |
- | |
| 46 | else if (adcValue > TARGET_ADC2+10) |
- | |
| 47 | OCR1A=0; |
- | |
| 48 | - | ||
| 49 | - | ||
| 50 | adcValue = ADC_Get(2); |
- | |
| 51 | - | ||
| 52 | if (adcValue > TARGET_ADC3+5) |
- | |
| 53 | OCR0A -=1; |
- | |
| 54 | else if (adcValue < TARGET_ADC3) |
- | |
| 55 | OCR0A++; |
- | |
| 56 | else if (adcValue > TARGET_ADC3+10) |
- | |
| 57 | OCR0A=0; |
- | |
| 58 | - | ||
| 59 | 40 | ||
| 60 |
|
41 | if (adcValue > TARGET_ADC_W+50) |
| - | 42 | OCR_W=0; |
|
| - | 43 | else if (adcValue > TARGET_ADC_W+16) |
|
| - | 44 | OCR_W-=2; |
|
| - | 45 | else if (adcValue < TARGET_ADC_W-5) |
|
| - | 46 | OCR_W++; |
|
| - | 47 | else if (adcValue > TARGET_ADC_W+5) |
|
| - | 48 | OCR_W -=1; |
|
| 61 | 49 | ||
| 62 | if (adcValue > TARGET_ADC4+5) |
- | |
| 63 | OCR0B -=1; |
- | |
| 64 | else if (adcValue < TARGET_ADC4) |
- | |
| 65 | OCR0B++; |
- | |
| 66 | else if (adcValue > TARGET_ADC4+10) |
- | |
| 67 | OCR0B=0; |
- | |
| 68 | 50 | ||
| - | 51 | adcValue = ADC_Get(ADC_R); |
|
| - | 52 | ||
| - | 53 | if (adcValue > TARGET_ADC_R+50) |
|
| - | 54 | OCR_R=0; |
|
| - | 55 | else if (adcValue > TARGET_ADC_R+16) |
|
| - | 56 | OCR_R-=2; |
|
| - | 57 | else if (adcValue < TARGET_ADC_R-5) |
|
| - | 58 | OCR_R++; |
|
| - | 59 | else if (adcValue > TARGET_ADC_R+5) |
|
| - | 60 | OCR_R -=1; |
|
| - | 61 | ||
| - | 62 | adcValue = ADC_Get(ADC_G); |
|
| - | 63 | ||
| - | 64 | ||
| - | 65 | if (adcValue > TARGET_ADC_G+50) |
|
| - | 66 | OCR_G=0; |
|
| - | 67 | else if (adcValue > TARGET_ADC_G+16) |
|
| - | 68 | OCR_G-=2; |
|
| - | 69 | else if (adcValue < TARGET_ADC_G-5) |
|
| - | 70 | OCR_G++; |
|
| - | 71 | else if (adcValue > TARGET_ADC_G+5) |
|
| - | 72 | OCR_G -=1; |
|
| - | 73 | ||
| - | 74 | adcValue = ADC_Get(ADC_B); |
|
| - | 75 | ||
| - | 76 | if (adcValue > TARGET_ADC_B+50) |
|
| - | 77 | OCR_B=0; |
|
| - | 78 | else if (adcValue > TARGET_ADC_B+16) |
|
| - | 79 | OCR_B-=2; |
|
| - | 80 | else if (adcValue < TARGET_ADC_B-5) |
|
| - | 81 | OCR_B++; |
|
| - | 82 | else if (adcValue > TARGET_ADC_B+5) |
|
| - | 83 | OCR_B -=1; |
|
| 69 | } |
84 | } |
| 70 | 85 | ||
| 71 | void sendADCvalue(uint8_t timer) { |
86 | void sendADCvalue(uint8_t timer) { |
| 72 | StdCan_Msg_t txMsg; |
87 | StdCan_Msg_t txMsg; |
| 73 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); |
88 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); |
| 74 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
89 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
| 75 | txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_RGBDRIVER; |
90 | txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_RGBDRIVER; |
| 76 | txMsg.Header.ModuleId = act_RGBdriver_ID; |
91 | txMsg.Header.ModuleId = act_RGBdriver_ID; |
| 77 | txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_DEBUG; |
92 | txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_DEBUG; |
| 78 | txMsg.Length = 6; |
93 | txMsg.Length = 6; |
| - | 94 | ||
| 79 | 95 | ||
| 80 | //txMsg.Data[0] = (uint8_t)(ADC_Get(5)>>2); |
96 | //txMsg.Data[0] = (uint8_t)(ADC_Get(5)>>2); |
| 81 | txMsg.Data[0] = (uint8_t)(ADC_Get( |
97 | txMsg.Data[0] = (uint8_t)(ADC_Get(ADC_W)&0xff); |
| 82 | txMsg.Data[1] = 0; |
98 | txMsg.Data[1] = 0; |
| 83 | txMsg.Data[2] = OCR1B; |
99 | txMsg.Data[2] = OCR1B; |
| 84 | txMsg.Data[3] = |
100 | txMsg.Data[3] = TARGET_ADC_R; |
| 85 | 101 | ||
| 86 | txMsg.Data[4] = |
102 | txMsg.Data[4] = TARGET_CURRENT_W; |
| 87 | txMsg.Data[5] = |
103 | txMsg.Data[5] = TARGET_ADC_W; |
| 88 | 104 | ||
| 89 | StdCan_Put(&txMsg); |
105 | StdCan_Put(&txMsg); |
| 90 | } |
106 | } |
| 91 | 107 | ||
| 92 | void act_RGBdriver_Init(void) |
108 | void act_RGBdriver_Init(void) |