1 | #define nBtnModeTimeout 60 // Timeout-Wert für das 'key_press'-Ereignis
|
2 | #define nFadingTime 200 // Ein-/Ausblendzeit(in ~ms)
|
3 | #define DIMM_TIMEOUT 10 // Zählerschritte(keine s!), bevor von 100% wieder heruntergedimmt wird
|
4 |
|
5 | int16_t bRelaisSignal = 0;
|
6 | int32_t nRelaisCount = 0;
|
7 | uint8_t nBtnMode = 0; // Programm-Modus des Tasters
|
8 | uint8_t nBtnModeCount = 0; // Zähler für das 'key_press'-Ereignis
|
9 | int16_t nDimmCount = 0; // Zähler für
|
10 | uint8_t bDimmDirection = 1; // Dimmungrichtung(1:EIN;0:AUS)
|
11 | uint8_t bFadingSignal = 0;
|
12 | uint8_t nFadingCount = 0; // Zähler für die Ein-/Ausblendfunktion(Fading)
|
13 | uint8_t nSavedPWM = 255; // Variable zur Speicherung des letzten PWM- bzw. Helligkeitswertes
|
14 |
|
15 | ISR(TIMER1_OVF_vect)
|
16 | {
|
17 | /***************************************************************************************************/
|
18 | if(nBtnMode != 0) // sobald irgendein Programm-Modus(s. Tasterabfragen) ausgewählt wurde,...
|
19 | {
|
20 | nBtnModeCount++; // ... Start des Zählers für die 'key'-Events(Timeout)
|
21 |
|
22 | if(KEY_PIN & (1<<KEY1))
|
23 | {
|
24 | if(nBtnModeCount > nBtnModeTimeout && nBtnModeCount < nBtnModeTimeout*3)
|
25 | {
|
26 | switch(nBtnMode)
|
27 | {
|
28 | /*---------------------------------------------------------------------------------*/
|
29 | case(1): dataCAN1 = 50;
|
30 | dataCAN2 = 0;
|
31 | dataCAN3 = 0;
|
32 | break;
|
33 | /*---------------------------------------------------------------------------------*/
|
34 | case(2): dataCAN1 = 0;
|
35 | dataCAN2 = 0;
|
36 |
|
37 | if(dataCAN3 < 2) //(!(PINB & (1<<PINB1)))
|
38 | bFadingSignal = 1; // Signal:FadeIN
|
39 | else
|
40 | bFadingSignal = 2; // Signal:FadeOUT
|
41 | break;
|
42 | /*---------------------------------------------------------------------------------*/
|
43 | }
|
44 | sendCAN(); // Senden der neuen PWM-Werte über das CAN-Netzwerk
|
45 | nBtnMode = 0; // Zurücksetzung des Programm-Modus
|
46 | nBtnModeCount = 0; // Zurücksetzung des Zählers
|
47 | }
|
48 | if(nBtnModeCount >= nBtnModeTimeout*3)
|
49 | {
|
50 | nBtnMode = 0; // Zurücksetzung des Programm-Modus
|
51 | nBtnModeCount = 0; // Zurücksetzung des Zählers
|
52 | }
|
53 | }
|
54 | }
|
55 | /***************************************************************************************************/
|
56 | if(bFadingSignal != 0)
|
57 | {
|
58 | nFadingCount++;
|
59 |
|
60 | if(nFadingCount <= nFadingTime)
|
61 | {
|
62 | if(bFadingSignal == 1) // bFadingSignal:1=FadeIN,2=FadeOUT
|
63 | // da 'nFadingCount*(nSavedPWM/nFadingTime)' nur int-Werte verarbeiten kann, wird
|
64 | // hier durch Benutzung einer temporären größeren 32Bit-Variable UND der
|
65 | // LEFT-Shift-Operation in einem 'Vielfachen' der Ausgangswerte weitergerechnet
|
66 | dataCAN3 = (nFadingCount*(((int32_t)nSavedPWM << 16)/nFadingTime)) >> 16;
|
67 | else
|
68 | // mit 'nSavedPWM-Zählerfaktor(s.o.)' wird hier der Zähler rückwärts ausgewertet
|
69 | dataCAN3 = nSavedPWM-((nFadingCount*(((int32_t)nSavedPWM << 16)/nFadingTime)) >> 16);
|
70 |
|
71 | sendCAN();
|
72 | }
|
73 | else
|
74 | {
|
75 | bFadingSignal = 0;
|
76 | nFadingCount = 0;
|
77 |
|
78 | USART_SEND_BYTE(dataCAN3);
|
79 | //dataCAN3 = 0;
|
80 | }
|
81 | }
|
82 | }
|