Subversion Repositories HomeAutomation

Rev

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

Rev 1566 Rev 1591
Line 64... Line 64...
64
            pwmValue[channel] += (fadeSpeed[channel]*39);
64
            pwmValue[channel] += (fadeSpeed[channel]*39);
65
            if ((fadeSpeed[channel] > 0 && (pwmValue[channel] < tempDimVal || pwmValue[channel] >= (fadeTarget[channel]))) ||
65
            if ((fadeSpeed[channel] > 0 && (pwmValue[channel] < tempDimVal || pwmValue[channel] >= (fadeTarget[channel]))) ||
66
                (fadeSpeed[channel] < 0 && (pwmValue[channel] > tempDimVal || pwmValue[channel] <= (fadeTarget[channel]))))
66
                (fadeSpeed[channel] < 0 && (pwmValue[channel] > tempDimVal || pwmValue[channel] <= (fadeTarget[channel]))))
67
            {
67
            {
68
                pwmValue[channel] = (fadeTarget[channel]);
68
                pwmValue[channel] = (fadeTarget[channel]);
-
 
69
            }
-
 
70
            if (pwmValue[channel] > 10000) {
-
 
71
                pwmValue[channel] = 10000;
69
            }
72
            }
70
            /* if targetvalue was reached then send the netinfo packet */
73
            /* if targetvalue was reached then send the netinfo packet */
71
            if (pwmValue[channel] == fadeTarget[channel])
74
            if (pwmValue[channel] == fadeTarget[channel])
72
            {
75
            {
73
                sendInfo[channel] = 1;
76
                sendInfo[channel] = 1;
74
            }
77
            }
75
        }
78
        }
76
    }
79
    }
77
 
80
 
78
}
81
}
79
#endif
82
#endif
80
 
83
 
81
 
84
 
82
void act_hwPWM_Init(void)
85
void act_hwPWM_Init(void)
83
{
86
{
Line 96... Line 99...
96
      eeprom_write_word_crc(EEDATA16.ch3, 0x0000, WITHOUT_CRC);
99
      eeprom_write_word_crc(EEDATA16.ch3, 0x0000, WITHOUT_CRC);
97
      eeprom_write_word_crc(EEDATA16.ch4, 0x0000, WITHOUT_CRC);
100
      eeprom_write_word_crc(EEDATA16.ch4, 0x0000, WITHOUT_CRC);
98
      EEDATA_UPDATE_CRC;
101
      EEDATA_UPDATE_CRC;
99
    }
102
    }
100
#endif
103
#endif
101
 
-
 
102
    TCCR1A = 0;
104
    TCCR1A = 0;
103
    TCCR1B = 0;
105
    TCCR1B = 0;
104
    TCCR0A = 0;
106
    TCCR0A = 0;
105
    TCCR0B = 0;
107
    TCCR0B = 0;
106
 
108
 
Line 180... Line 182...
180
    if (pwmValue[2]>0)
182
    if (pwmValue[2]>0)
181
    {
183
    {
182
        TCCR0A|=(act_hwPWM_CH3_COM<<COM0A0);
184
        TCCR0A|=(act_hwPWM_CH3_COM<<COM0A0);
183
    }
185
    }
184
    if (pwmValue[3]>0)
186
    if (pwmValue[3]>0)
185
    {
187
    {
186
        TCCR0A|=(act_hwPWM_CH4_COM<<COM0B0);
188
        TCCR0A|=(act_hwPWM_CH4_COM<<COM0B0);
187
    }
189
    }
188
    #endif
190
    #endif
189
 
191
 
190
    /* enable timer 0 */
192
    /* enable timer 0 */
191
    #if act_hwPWM_CH3_COM>0
193
    #if act_hwPWM_CH3_COM>0
192
    TCCR0B|=(act_hwPWM_CH3_CS<<CS00);
194
    TCCR0B|=(act_hwPWM_CH3_CS<<CS00);
Line 300... Line 302...
300
            TCCR1A&=~((1<<COM1B0)|(1<<COM1B1));
302
            TCCR1A&=~((1<<COM1B0)|(1<<COM1B1));
301
        }
303
        }
302
        else
304
        else
303
        {
305
        {
304
            TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0);
306
            TCCR1A|=(act_hwPWM_CH1_COM<<COM1B0);
305
        }
307
        }
306
        sei();
308
        sei();
307
        Timer_SetTimeout(act_hwPWM_STORE_VALUE_TIMEOUT, act_hwPWM_STORE_VALUE_TIMEOUT_TIME*1000, TimerTypeOneShot, 0);
309
        Timer_SetTimeout(act_hwPWM_STORE_VALUE_TIMEOUT, act_hwPWM_STORE_VALUE_TIMEOUT_TIME*1000, TimerTypeOneShot, 0);
308
    }
310
    }
309
#endif
311
#endif
310
#if act_hwPWM_CH2_COM>0
312
#if act_hwPWM_CH2_COM>0
311
    if (OCR_2 != (uint16_t)((uint32_t)pwmValue[1]*act_hwPWM_CH2_FACT)>>8) {
313
    if (OCR_2 != (uint16_t)((uint32_t)pwmValue[1]*act_hwPWM_CH2_FACT)>>8) {
312
        cli(); 
314
        cli(); 
313
        OCR_2=(uint16_t)((uint32_t)pwmValue[1]*act_hwPWM_CH2_FACT)>>8;
315
        OCR_2=(uint16_t)(((uint32_t)pwmValue[1]*act_hwPWM_CH2_FACT)>>8);
314
        if (OCR_2==0)
316
        if (OCR_2==0)
315
        {
317
        {
316
            TCCR1A&=~((1<<COM1A0)|(1<<COM1A1));
318
            TCCR1A&=~((1<<COM1A0)|(1<<COM1A1));
317
        }
319
        }
318
        else
320
        else
Line 362... Line 364...
362
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
364
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
363
        StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
365
        StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
364
        rxMsg->Header.ModuleType == CAN_MODULE_TYPE_ACT_HWPWM &&
366
        rxMsg->Header.ModuleType == CAN_MODULE_TYPE_ACT_HWPWM &&
365
        rxMsg->Header.ModuleId == act_hwPWM_ID)
367
        rxMsg->Header.ModuleId == act_hwPWM_ID)
366
    {
368
    {
-
 
369
        uint8_t channel = 0;
367
        switch (rxMsg->Header.Command)
370
        switch (rxMsg->Header.Command)
368
        {
371
        {
369
        case CAN_MODULE_CMD_PHYSICAL_PWM:
372
        case CAN_MODULE_CMD_PHYSICAL_PWM:
370
            if (rxMsg->Length == 3) {
373
            if (rxMsg->Length == 3) {
371
                uint8_t channel = rxMsg->Data[0];
374
                channel = rxMsg->Data[0];
372
                pwmValue[channel-1] = (rxMsg->Data[1]<<8)+(rxMsg->Data[2]);
375
                pwmValue[channel-1] = (rxMsg->Data[1]<<8)+(rxMsg->Data[2]);
373
            }
376
            }
374
           
377
           
375
        break;
378
        break;
376
#if act_hwPWM_ENABLE_FADE == 1
379
#if act_hwPWM_ENABLE_FADE == 1
377
        case CAN_MODULE_CMD_HWPWM_DEMO:     /* Demo(channel, speed, steps) */
380
        case CAN_MODULE_CMD_HWPWM_DEMO:     /* Demo(channel, speed, steps) */
378
            if (rxMsg->Length == 4) {
381
            if (rxMsg->Length == 4) {
379
                uint8_t channel = rxMsg->Data[0]-1;
382
                channel = rxMsg->Data[0]-1;
380
                uint8_t speed = rxMsg->Data[1];
383
                uint8_t speed = rxMsg->Data[1];
381
                uint16_t steps = (rxMsg->Data[2]<<8)+(rxMsg->Data[3]);
384
                uint16_t steps = (rxMsg->Data[2]<<8)+(rxMsg->Data[3]);
382
               
385
               
383
                fadeSpeedCnt[channel] = 0;
386
                fadeSpeedCnt[channel] = 0;
384
                fadeSpeed[channel] = 0;
387
                fadeSpeed[channel] = 0;
Line 424... Line 427...
424
        break;
427
        break;
425
       
428
       
426
        case CAN_MODULE_CMD_HWPWM_START_FADE:   /* StartFade(channel, speed, direction) */
429
        case CAN_MODULE_CMD_HWPWM_START_FADE:   /* StartFade(channel, speed, direction) */
427
            if (rxMsg->Length == 3) {
430
            if (rxMsg->Length == 3) {
428
               
431
               
429
                uint8_t channel = rxMsg->Data[0]-1;
432
                channel = rxMsg->Data[0]-1;
430
                uint8_t speed = rxMsg->Data[1];
433
                uint8_t speed = rxMsg->Data[1];
431
                uint8_t direction = rxMsg->Data[2];
434
                uint8_t direction = rxMsg->Data[2];
432
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
435
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
433
                fadeSpeedCnt[channel] = 0;
436
                fadeSpeedCnt[channel] = 0;
434
                fadeSpeed[channel] = 0;
437
                fadeSpeed[channel] = 0;
Line 460... Line 463...
460
            }
463
            }
461
        break;
464
        break;
462
 
465
 
463
        case CAN_MODULE_CMD_HWPWM_STOP_FADE:    /* StopFade(channel) */
466
        case CAN_MODULE_CMD_HWPWM_STOP_FADE:    /* StopFade(channel) */
464
            if (rxMsg->Length == 1) {
467
            if (rxMsg->Length == 1) {
465
                uint8_t channel = rxMsg->Data[0]-1;
468
                channel = rxMsg->Data[0]-1;
466
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
469
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
467
                fadeSpeed[channel] = 0;
470
                fadeSpeed[channel] = 0;
468
                sendInfo[channel] = 1;      /* send netinfo with the current dimmervalue*/
471
                sendInfo[channel] = 1;      /* send netinfo with the current dimmervalue*/
469
            }
472
            }
470
        break;
473
        break;
471
 
474
 
472
        case CAN_MODULE_CMD_HWPWM_ABS_FADE: /* AbsFade(channel, speed, endValue) */
475
        case CAN_MODULE_CMD_HWPWM_ABS_FADE: /* AbsFade(channel, speed, endValue) */
473
            if (rxMsg->Length == 4) {
476
            if (rxMsg->Length == 4) {
474
                uint8_t channel = rxMsg->Data[0]-1;
477
                channel = rxMsg->Data[0]-1;
475
                uint8_t speed = rxMsg->Data[1];
478
                uint8_t speed = rxMsg->Data[1];
476
                uint16_t endValue = (rxMsg->Data[2]<<8)+(rxMsg->Data[3]);
479
                uint16_t endValue = (rxMsg->Data[2]<<8)+(rxMsg->Data[3]);
477
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
480
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
478
                fadeSpeedCnt[channel] = 0;
481
                fadeSpeedCnt[channel] = 0;
479
                fadeSpeed[channel] = 0;
482
                fadeSpeed[channel] = 0;
480
                if (speed == 0) {
483
                if (speed == 0) {
481
                    pwmValue[channel] = endValue;   /* set dimmer value immediately */
484
                    pwmValue[channel] = endValue;   /* set dimmer value immediately */
482
                    sendInfo[channel] = 1;      /* send netinfo with the current dimmervalue*/
485
                    sendInfo[channel] = 1;      /* send netinfo with the current dimmervalue*/
483
                } else {
486
                } else {
484
                    fadeTarget[channel] = endValue;
487
                    fadeTarget[channel] = endValue;
485
                    if (fadeTarget[channel] != pwmValue[channel]) {
488
                    if (fadeTarget[channel] != pwmValue[channel]) {
486
                        if ((speed&0x80) == 0x80) {
489
                        if ((speed&0x80) == 0x80) {
487
                            fadeSpeed[channel] = (speed&0x7f)+1;
490
                            fadeSpeed[channel] = (speed&0x7f)+1;
488
                            fadeSpeedFrac[channel] = 1;
491
                            fadeSpeedFrac[channel] = 1;
489
                        } else {
492
                        } else {
490
                            fadeSpeed[channel] = 1;
493
                            fadeSpeed[channel] = 1;
491
                            fadeSpeedFrac[channel] = 0x80-(speed&0x7f);
494
                            fadeSpeedFrac[channel] = 0x80-(speed&0x7f);
492
                        }
495
                        }
493
                        if (fadeTarget[channel] < pwmValue[channel]) {
496
                        if (fadeTarget[channel] < pwmValue[channel]) {
494
                            fadeSpeed[channel] = -fadeSpeed[channel];
497
                            fadeSpeed[channel] = -fadeSpeed[channel];
495
                        }
498
                        }
496
                    }
499
                    }
497
                }
500
                }
498
                //printf("abs fade %d %d %d!\n",fadeTarget[channel], endValue ,pwmValue[channel] );
501
                //printf("abs fade %d %d %d!\n",fadeTarget[channel], endValue ,pwmValue[channel] );
499
            }
502
            }
500
        break;
503
        break;
501
 
504
 
502
        case CAN_MODULE_CMD_HWPWM_REL_FADE: /* RelFade(channel, speed, direction, steps) */
505
        case CAN_MODULE_CMD_HWPWM_REL_FADE: /* RelFade(channel, speed, direction, steps) */
503
            if (rxMsg->Length == 5) {
506
            if (rxMsg->Length == 5) {
504
               
507
               
505
                uint8_t channel = rxMsg->Data[0]-1;
508
                channel = rxMsg->Data[0]-1;
506
                uint8_t speed = rxMsg->Data[1];
509
                uint8_t speed = rxMsg->Data[1];
507
                uint8_t direction = rxMsg->Data[2];
510
                uint8_t direction = rxMsg->Data[2];
508
                uint16_t steps = (rxMsg->Data[3]<<8)+(rxMsg->Data[4]);
511
                uint16_t steps = (rxMsg->Data[3]<<8)+(rxMsg->Data[4]);
509
               
512
               
510
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
513
                demoState[channel] = ACT_HWPWM_DEMO_STATE_NOT_RUNNING;
Line 543... Line 546...
543
                    }
546
                    }
544
                }
547
                }
545
            }
548
            }
546
        break;
549
        break;
547
#endif
550
#endif
-
 
551
 
548
        }
552
        }
549
    }
553
    }
550
}
554
}
551
 
555
 
552
void act_hwPWM_List(uint8_t ModuleSequenceNumber)
556
void act_hwPWM_List(uint8_t ModuleSequenceNumber)