Subversion Repositories HomeAutomation

Rev

Rev 1393 | Rev 1425 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1393 Rev 1418
Line 76... Line 76...
76
gpio_set_out(EXP_C);
76
gpio_set_out(EXP_C);
77
#endif
77
#endif
78
 
78
 
79
/* set up counter mode for timer 1 */
79
/* set up counter mode for timer 1 */
80
#if act_hwPWM_CH1_COM>0 || act_hwPWM_CH2_COM>0
80
#if act_hwPWM_CH1_COM>0 || act_hwPWM_CH2_COM>0
-
 
81
if (pwmValue[0]>0)
-
 
82
{
81
TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0)|(act_hwPWM_CH2_COM<<COM1A0);
83
    TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0);
-
 
84
}
-
 
85
if (pwmValue[1]>0)
-
 
86
{
-
 
87
    TCCR1A|=(act_hwPWM_CH2_COM<<COM1A0);
-
 
88
}
82
#endif
89
#endif
83
 
90
 
84
/* enable timer 1 */
91
/* enable timer 1 */
85
#if act_hwPWM_CH1_COM>0
92
#if act_hwPWM_CH1_COM>0
86
TCCR1B|=(act_hwPWM_CH1_CS<<CS10);
93
TCCR1B|=(act_hwPWM_CH1_CS<<CS10);
Line 106... Line 113...
106
gpio_set_out(EXP_G);
113
gpio_set_out(EXP_G);
107
#endif
114
#endif
108
 
115
 
109
/* set up counter mode for timer 0 */
116
/* set up counter mode for timer 0 */
110
#if act_hwPWM_CH3_COM>0 || act_hwPWM_CH4_COM>0
117
#if act_hwPWM_CH3_COM>0 || act_hwPWM_CH4_COM>0
-
 
118
if (pwmValue[2]>0)
-
 
119
{
111
TCCR0A|=(act_hwPWM_CH3_COM<<COM1A0)|(act_hwPWM_CH4_COM<<COM1B0);
120
    TCCR0A|=(act_hwPWM_CH3_COM<<COM0A0);
-
 
121
}
-
 
122
if (pwmValue[3]>0)
-
 
123
{
-
 
124
    TCCR0A|=(act_hwPWM_CH4_COM<<COM0B0);
-
 
125
}
112
#endif
126
#endif
113
 
127
 
114
/* enable timer 0 */
128
/* enable timer 0 */
115
#if act_hwPWM_CH3_COM>0
129
#if act_hwPWM_CH3_COM>0
116
TCCR0B|=(act_hwPWM_CH3_CS<<CS00);
130
TCCR0B|=(act_hwPWM_CH3_CS<<CS00);
117
#elif act_hwPWM_CH4_COM>0
131
#elif act_hwPWM_CH4_COM>0
118
TCCR0B|=(act_hwPWM_CH4_CS<<CS00);
132
TCCR0B|=(act_hwPWM_CH4_CS<<CS00);
119
#endif
133
#endif
120
 
134
 
-
 
135
//printf("1A %x, 1B %x, 0A %x, 0B %x\n", TCCR1A, TCCR1B, TCCR0A, TCCR0B);
121
 
136
 
122
}
137
}
123
 
138
 
124
void act_hwPWM_Process(void)
139
void act_hwPWM_Process(void)
125
{
140
{
126
    if (Timer_Expired(act_hwPWM_STORE_VALUE_TIMEOUT))
141
    if (Timer_Expired(act_hwPWM_STORE_VALUE_TIMEOUT))
127
    {
142
    {
128
        if (pwmValue[0] != eeprom_read_word(EEDATA16.ch1))
143
        if (pwmValue[0] != eeprom_read_word(EEDATA16.ch1))
129
        {
144
        {
130
            eeprom_write_word_crc(EEDATA16.ch1, pwmValue[0], WITH_CRC);
145
            eeprom_write_word_crc(EEDATA16.ch1, pwmValue[0], WITH_CRC);
131
        }
146
        }
132
        if (pwmValue[1] != eeprom_read_word(EEDATA16.ch2))
147
        if (pwmValue[1] != eeprom_read_word(EEDATA16.ch2))
133
        {
148
        {
134
            eeprom_write_word_crc(EEDATA16.ch2, pwmValue[1], WITH_CRC);
149
            eeprom_write_word_crc(EEDATA16.ch2, pwmValue[1], WITH_CRC);
135
        }
150
        }
136
        if (pwmValue[2] != eeprom_read_word(EEDATA16.ch3))
151
        if (pwmValue[2] != eeprom_read_word(EEDATA16.ch3))
137
        {
152
        {
138
            eeprom_write_word_crc(EEDATA16.ch3, pwmValue[2], WITH_CRC);
153
            eeprom_write_word_crc(EEDATA16.ch3, pwmValue[2], WITH_CRC);
139
        }
154
        }
140
        if (pwmValue[3] != eeprom_read_word(EEDATA16.ch4))
155
        if (pwmValue[3] != eeprom_read_word(EEDATA16.ch4))
141
        {
156
        {
142
            eeprom_write_word_crc(EEDATA16.ch4, pwmValue[3], WITH_CRC);
157
            eeprom_write_word_crc(EEDATA16.ch4, pwmValue[3], WITH_CRC);
143
        }
158
        }
144
    }
159
    }
145
}
160
}
146
 
161
 
147
void act_hwPWM_HandleMessage(StdCan_Msg_t *rxMsg)
162
void act_hwPWM_HandleMessage(StdCan_Msg_t *rxMsg)
148
{
163
{
149
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
164
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
150
        StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
165
        StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
Line 161... Line 176...
161
                switch (channel)
176
                switch (channel)
162
                {
177
                {
163
#if act_hwPWM_CH1_COM>0
178
#if act_hwPWM_CH1_COM>0
164
                    case 1:
179
                    case 1:
165
                        OCR_1=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH1_FACT)>>8;
180
                        OCR_1=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH1_FACT)>>8;
-
 
181
                        if (pwmValue[channel-1]==0)
-
 
182
                        {
-
 
183
                            TCCR1A&=~((1<<COM1B0)|(1<<COM1B1));
-
 
184
                        }
-
 
185
                        else
-
 
186
                        {
-
 
187
                            TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0);
-
 
188
                        }
166
                    break;
189
                    break;
167
#endif
190
#endif
168
#if act_hwPWM_CH2_COM>0
191
#if act_hwPWM_CH2_COM>0
169
                    case 2:
192
                    case 2:
170
                        OCR_2=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH2_FACT)>>8;
193
                        OCR_2=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH2_FACT)>>8;
-
 
194
                        if (pwmValue[channel-1]==0)
-
 
195
                        {
-
 
196
                            TCCR1A&=~((1<<COM1A0)|(1<<COM1A1));
-
 
197
                        }
-
 
198
                        else
-
 
199
                        {
-
 
200
                            TCCR1A|=(act_hwPWM_CH2_COM<<COM1A0);
-
 
201
                        }
171
                    break;
202
                    break;
172
#endif
203
#endif
173
#if act_hwPWM_CH3_COM>0
204
#if act_hwPWM_CH3_COM>0
174
                    case 3:
205
                    case 3:
175
                        OCR_3=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH3_FACT)>>8;
206
                        OCR_3=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH3_FACT)>>8;
-
 
207
                        if (pwmValue[channel-1]==0)
-
 
208
                        {
-
 
209
                            TCCR0A &= ~((1<<COM0A0)|(1<<COM0A1));
-
 
210
                        }
-
 
211
                        else
-
 
212
                        {
-
 
213
                            TCCR0A|=(act_hwPWM_CH3_COM<<COM0A0);
-
 
214
                        }
176
                    break;
215
                    break;
177
#endif
216
#endif
178
#if act_hwPWM_CH4_COM>0
217
#if act_hwPWM_CH4_COM>0
179
                    case 4:
218
                    case 4:
180
                        OCR_4=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH4_FACT)>>8;
219
                        OCR_4=(uint16_t)(pwmValue[channel-1]*act_hwPWM_CH4_FACT)>>8;
-
 
220
                        if (pwmValue[channel-1]==0)
-
 
221
                        {
-
 
222
                            TCCR0A &= ~((1<<COM0B0)|(1<<COM0B1));
-
 
223
                        }
-
 
224
                        else
-
 
225
                        {
-
 
226
                            TCCR0A|=(act_hwPWM_CH4_COM<<COM0B0);
-
 
227
                        }
181
                    break;
228
                    break;
182
#endif
229
#endif
183
                }
230
                }
184
                sei();
231
                sei();
185
                Timer_SetTimeout(act_hwPWM_STORE_VALUE_TIMEOUT, act_hwPWM_STORE_VALUE_TIMEOUT_TIME*1000, TimerTypeOneShot, 0);
232
                Timer_SetTimeout(act_hwPWM_STORE_VALUE_TIMEOUT, act_hwPWM_STORE_VALUE_TIMEOUT_TIME*1000, TimerTypeOneShot, 0);