Subversion Repositories HomeAutomation

Rev

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       5
3
#define ALGO_FREQ       100
4
#define TARGET_CURRENT  250UL
4
#define ADC_W   5
5
#define TARGET_ADC      TARGET_CURRENT*4UL*1024UL/5000UL
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 TARGET_CURRENT2 50UL
11
#define OCR_G   OCR0A
8
#define TARGET_ADC2     TARGET_CURRENT2*4UL*3UL*1024UL/5000UL
12
#define OCR_B   OCR0B
9
 
13
 
10
#define TARGET_CURRENT3 50UL
14
#define TARGET_CURRENT_W    250UL
11
#define TARGET_ADC3     TARGET_CURRENT3*4UL*3UL*1024UL/5000UL
15
#define TARGET_ADC_W        TARGET_CURRENT_W*4UL*1024UL/5000UL
12
 
16
 
13
#define TARGET_CURRENT4 50UL
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 TARGET_ADC4     TARGET_CURRENT4*4UL*3UL*1024UL/5000UL
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(5);
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
    adcValue = ADC_Get(0);
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(5)&0xff);
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] = 0;
100
    txMsg.Data[3] = TARGET_ADC_R;
85
   
101
 
86
    txMsg.Data[4] = TARGET_CURRENT;
102
    txMsg.Data[4] = TARGET_CURRENT_W;
87
    txMsg.Data[5] = TARGET_ADC;
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)