Subversion Repositories LedShow

Rev

Rev 4 | Rev 6 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 5
Line 12... Line 12...
12
#define SPICLOCK 9000000UL
12
#define SPICLOCK 9000000UL
13
// one clock of SPI is 166nS
13
// one clock of SPI is 166nS
14
#define TSPI (1000000000UL/SPICLOCK)
14
#define TSPI (1000000000UL/SPICLOCK)
15
// reset period is 50000nS
15
// reset period is 50000nS
16
#define TRESET 50000
16
#define TRESET 50000
-
 
17
// stop period is  20000nS
-
 
18
#define TSTOP  50000
17
// total bit period is 1250nS or 1/800kHz
19
// total bit period is 1250nS or 1/800kHz
18
#define TBIT  1250
20
#define TBIT  1250
19
// to produce '0' value go high for 400nS, low for 850nS
21
// to produce '0' value go high for 400nS, low for 850nS
20
#define T0H    400
22
#define T0H    400
21
#define T0L    850
23
#define T0L    850
22
// to produce '1' value go high for 850nS, low for 400nS
24
// to produce '1' value go high for 850nS, low for 400nS
23
#define T1H    850
25
#define T1H    850
24
#define T1L    400
26
#define T1L    400
25
 
27
 
26
 
28
 
-
 
29
// DMX state variables
-
 
30
DMX_State_t DMX_State = DMX_IDLE;
-
 
31
uint8_t DMX_Buffer[512];
-
 
32
uint32_t DMX_Pointer;
-
 
33
 
-
 
34
 
27
 
35
 
28
#define BUFFER_SIZE 1000
36
#define BUFFER_SIZE 1000
29
 
37
 
30
 
38
 
31
 
39
 
Line 36... Line 44...
36
// bit index pointer
44
// bit index pointer
37
uint8_t bitPtr;
45
uint8_t bitPtr;
38
// bit transmission time offset from start of transmission
46
// bit transmission time offset from start of transmission
39
unsigned SPItime = 0;
47
unsigned SPItime = 0;
40
 
48
 
41
DMX_State_t DMX_State = DMX_IDLE;
-
 
42
 
49
 
43
unsigned RealTime = 0;
50
unsigned RealTime = 0;
44
 
51
 
45
static volatile uint8_t busy = 0;
52
static volatile uint8_t busy = 0;
46
 
53
 
Line 55... Line 62...
55
// send a '1' or '0' on SPI bus
62
// send a '1' or '0' on SPI bus
56
void codeBit(uint8_t val, unsigned until)
63
void codeBit(uint8_t val, unsigned until)
57
{
64
{
58
        // calculate true limit time
65
        // calculate true limit time
59
        RealTime += until;
66
        RealTime += until;
60
        while(SPItime< RealTime)
67
        while(SPItime<= RealTime)
61
        {
68
        {
62
        if(val)
69
        if(val)
63
          buffer[bufPtr] |= (1<<bitPtr);
70
          buffer[bufPtr] |= (1<<bitPtr);
64
        else
71
        else
65
      buffer[bufPtr] &= ~(1<<bitPtr);
72
      buffer[bufPtr] &= ~(1<<bitPtr);
Line 81... Line 88...
81
void codeReset (void)
88
void codeReset (void)
82
{
89
{
83
                codeBit(0,TRESET);
90
                codeBit(0,TRESET);
84
}
91
}
85
 
92
 
-
 
93
void codeStop (void)
-
 
94
{
-
 
95
        codeBit(0,TSTOP);
-
 
96
}
-
 
97
 
86
// send a single Run Length code bit
98
// send a single Run Length code bit
87
void codeRL(uint8_t bit)
99
void codeRL(uint8_t bit)
88
{
100
{
89
        unsigned lim = bit ? T1H : T0H;
101
        unsigned lim = bit ? T1H : T0H;
90
        codeBit(1,lim);
102
        codeBit(1,lim);
Line 101... Line 113...
101
                        val<<=1;
113
                        val<<=1;
102
                }
114
                }
103
 
115
 
104
}
116
}
105
 
117
 
-
 
118
 
-
 
119
 
-
 
120
 
-
 
121
 
106
void codeFRGB(frgb_t led )
122
void codeFRGBW(frgbw_t led )
107
{
123
{
108
 
124
 
109
                codeRLByte(((uint16_t)(led.green) * led.fader)/256);
125
                codeRLByte(((uint16_t)(led.green) * led.fader)/256);
110
                codeRLByte(((uint16_t)(led.red) * led.fader)/256);
126
                codeRLByte(((uint16_t)(led.red) * led.fader)/256);
111
                codeRLByte(((uint16_t)(led.blue) * led.fader)/256);
127
                codeRLByte(((uint16_t)(led.blue) * led.fader)/256);
-
 
128
                codeRLByte(((uint16_t)(led.white) * led.fader)/256);
112
}
129
}
113
 
130
 
114
 
131
 
-
 
132
frgbw_t led0 = { 128, 0, 0, 0, 0 };
-
 
133
frgbw_t led1 = { 128, 0, 0, 0, 2 };
-
 
134
frgbw_t ledZ = { 0,0,0,0 };
115
 
135
 
116
frgb_t led0 = { 128, 0, 0, 0 };
-
 
117
frgb_t led1 = { 128, 120, 22, 0 };
-
 
118
frgb_t ledZ = { 0,0,0,0 };
-
 
119
 
136
 
120
void sendLeds()
137
void sendLeds()
121
{
138
{
122
 
139
 
123
        initCode();
140
        initCode();
124
        codeReset();
141
        codeReset();
125
 
142
 
126
    led0.green++;
143
    led0.green++;
127
        led0.fader++;
144
///     led0.fader++;
128
    if(led0.green %4 == 0)
-
 
129
                led0.red --;
-
 
130
        if(led0.green %55 == 0)
-
 
131
                led0.blue +=123;
-
 
132
 
-
 
133
 
145
 
134
        led1.red++;
146
        led1.red++;
135
        led1.fader--;
147
//      led1.fader--;
136
        if(led1.red % 5 == 0)
-
 
-
 
148
 
137
                led1.green += 3;
149
        codeFRGBW(led0);
138
        if(led1.red % 13 == 0)
-
 
139
                led1.blue -=11;
150
        codeFRGBW(led1);
140
 
151
 
141
        codeFRGB(led0);
-
 
142
        codeFRGB(led1);
-
 
143
        // send terminal
152
        // send terminal
-
 
153
 
144
        codeFRGB(ledZ);
154
        codeStop();
145
     busy= 1;
155
    busy= 1;
146
        HAL_SPI_Transmit_DMA(&hspi1,buffer,bufPtr+1);
156
        HAL_SPI_Transmit_DMA(&hspi1,buffer,bufPtr);
147
  //
157
  //
148
        while(busy) {};
158
        while(busy) {};
149
}
159
}
150
 
160
 
151
 
161