Subversion Repositories Projects

Rev

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

Rev 55 Rev 56
Line 23... Line 23...
23
volatile unsigned char CH2;
23
volatile unsigned char CH2;
24
volatile unsigned char CH3;
24
volatile unsigned char CH3;
25
volatile unsigned char CH4;
25
volatile unsigned char CH4;
26
volatile unsigned char CH5;
26
volatile unsigned char CH5;
27
 
27
 
-
 
28
uint16_t EEMEM EEPMIN=0x0000;
-
 
29
uint16_t EEMEM EEPMAX=0xffff;
-
 
30
uint16_t EEMEM EEPSIG=0xffff;
-
 
31
 
-
 
32
 
-
 
33
//led kennlinie, (noch nicht implementiert, nur vorbereitet)
-
 
34
unsigned char kl[256]={
-
 
35
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
36
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
37
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
38
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
39
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
40
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
41
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
42
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
43
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
44
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
45
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
46
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
47
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
48
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
49
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
-
 
50
        0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-
 
51
};
-
 
52
 
-
 
53
 
28
 
54
 
29
/*##############################################################################*/
55
/*##############################################################################*/
30
SIGNAL(SIG_OVERFLOW1)
56
SIGNAL(SIG_OVERFLOW1)
31
{
57
{
32
        TMR1OvF++;
58
        TMR1OvF++;
Line 196... Line 222...
196
int main (void)
222
int main (void)
197
{
223
{
198
 
224
 
199
        #define STEP            256
225
        #define STEP            256
200
        #define MUL                     1
226
        #define MUL                     1
201
        #define REDUCE          5
227
        #define REDUCE          2
202
       
228
       
203
        #define EEPADRSIG       0x00
-
 
204
        #define EEPADRMIN       0x20
-
 
205
        #define EEPADRMAX       0x22
-
 
206
        #define EEPSIGATURE     0x55aa
229
        #define EEPSIGNATURE    0x55aa
207
 
230
 
208
        unsigned int    ppm;
231
        unsigned int    ppm;
209
        signed int              color; 
232
        signed int              color; 
210
        unsigned int    setupdly;
233
        unsigned int    setupdly;
211
        unsigned int    ppmtodly;      
234
        unsigned int    ppmtodly;      
Line 213... Line 236...
213
        unsigned char   setup;
236
        unsigned char   setup;
214
        unsigned int    lmax;
237
        unsigned int    lmax;
215
        unsigned int    lmin;
238
        unsigned int    lmin;
216
        unsigned int    max;
239
        unsigned int    max;
217
        unsigned int    min;
240
        unsigned int    min;
218
        unsigned long   temp1; 
241
        signed long     temp1; 
219
        unsigned long   temp2;         
242
        signed long     temp2;         
220
 
-
 
221
 
-
 
222
 
243
 
223
    DDRB  = (CH0_B|CH1_B|CH2_B);
244
    DDRB  = (CH0_B|CH1_B|CH2_B);
224
    PORTB = 0x00;
245
    PORTB = 0x00;
225
 
246
 
226
    DDRC  = (ledred);
247
    DDRC  = (ledred);
Line 243... Line 264...
243
        StartPPM();
264
        StartPPM();
244
        //StartI2C();
265
        //StartI2C();
245
        StartPWM();
266
        StartPWM();
246
        sei();
267
        sei();
247
 
268
 
248
 
-
 
249
 
-
 
250
        if (eeprom_read_word(EEPADRSIG) != EEPSIGATURE)                 //check eep if signature is there
269
        if (eeprom_read_word(&EEPSIG) != EEPSIGNATURE)                  //check eep if signature is there
251
        {
270
        {
252
                min = 1100;                                                                                             //default min 
271
                min = 1100;                                                                                             //default min 
253
                max = 1900;                                                                                             //default max
272
                max = 1900;                                                                                             //default max
254
                eeprom_write_word(EEPADRMIN, min);                                              //no, write initial min
273
                eeprom_write_word(&EEPMIN, min);                                                //no, write initial min
255
                eeprom_write_word(EEPADRMAX, max);                                              //and max values
274
                eeprom_write_word(&EEPMAX, max);                                                //and max values
256
                eeprom_write_word(EEPADRSIG, EEPSIGATURE);                              //along with eep signature
275
                eeprom_write_word(&EEPSIG, EEPSIGNATURE);                               //along with eep signature
257
        }
276
        }
258
        else
277
        else
259
        {
278
        {
260
                min = eeprom_read_word(EEPADRMIN);                                              //signature ok
279
                min = eeprom_read_word(&EEPMIN);                                                //signature ok
261
                max = eeprom_read_word(EEPADRMAX);                                              //read min and max
280
                max = eeprom_read_word(&EEPMAX);                                                //read min and max
262
        }
281
        }
263
 
282
 
264
        setup = 0;                                                                                                      //reset setup toggle counter
283
        setup = 0;                                                                                                      //reset setup toggle counter
265
        setupdly = SetDelay(3000);
284
        setupdly = SetDelay(5000);
266
        ppmtodly = SetDelay(5000);     
285
        ppmtodly = SetDelay(5000);     
267
        flashdly = SetDelay(100);                                                              
286
        flashdly = SetDelay(1000);                                                             
268
   
287
   
269
    while (1)
288
    while (1)
270
        {
289
        {
271
 
290
 
272
                if (PPM_NEW > 20)                                                                               //ppm Signal ok 
291
                if (PPM_NEW > 20)                                                                               //ppm Signal ok 
Line 294... Line 313...
294
                if (setup < 6)
313
                if (setup < 6)
295
                {
314
                {
296
                        if ((ppm > 1600) && ((setup&1)==0)) setup++;            //
315
                        if ((ppm > 1600) && ((setup&1)==0)) setup++;            //
297
                        if ((ppm < 1400) && ((setup&1)==1)) setup++;            //
316
                        if ((ppm < 1400) && ((setup&1)==1)) setup++;            //
298
 
317
 
299
                        if (CheckDelay(flashdly))                                                               //setup timeout reached
318
                        if (CheckDelay(flashdly))                                                      
300
                        {      
319
                        {      
301
                                CH0 = CH0 ^ 0xff;
320
                                CH0 = CH0 ^ 0xff;
302
                                CH1 = CH1 ^ 0xff;
321
                                CH1 = CH1 ^ 0xff;
303
                                CH2 = CH2 ^ 0xff;
322
                                CH2 = CH2 ^ 0xff;
304
                                flashdly = SetDelay(250);                                                              
323
                                flashdly = SetDelay(250);                                                              
305
                        }
324
                        }
306
 
-
 
307
                }
325
                }
308
 
326
 
309
                if (setup == 6)                                                                                 //if stick is toggled 6 times 
327
                if (setup == 6)                                                                                 //if stick is toggled 6 times 
310
                {                                                                                                               //within setup timeout
328
                {                                                                                                               //within setup timeout
311
                        PORTD setbit ledgreen;                                                          //store ppm min and max 
329
                        PORTD setbit ledgreen;                                                          //store ppm min and max 
-
 
330
                        setupdly = SetDelay(3000);                                                      //for 2000ms
312
                        eeprom_write_word(EEPADRMIN, lmin);                                     //in eeprom
331
                        eeprom_write_word(&EEPMIN, lmin);                                       //in eeprom
313
                        eeprom_write_word(EEPADRMAX, lmax);    
332
                        eeprom_write_word(&EEPMAX, lmax);      
314
                        min = lmin;                                                                                    
333
                        min = lmin;                                                                                    
315
                        max = lmax;
334
                        max = lmax;
316
                        setupdly = SetDelay(2000);                                     
335
                        setup = 7;                                                                                      //enter PWM toggle mode
317
 
336
 
-
 
337
                }
-
 
338
 
-
 
339
 
-
 
340
                if (setup == 7)
-
 
341
                {
318
                        if (CheckDelay(flashdly))                                                               //setup timeout reached
342
                        if (CheckDelay(flashdly))                                                       //each 25ms toggle PWM's 
319
                        {      
343
                        {      
320
                                CH0 = CH0 ^ 0xff;
344
                                CH0 = CH0 ^ 0xff;
321
                                CH1 = CH1 ^ 0xff;
345
                                CH1 = CH1 ^ 0xff;
322
                                CH2 = CH2 ^ 0xff;
346
                                CH2 = CH2 ^ 0xff;
323
                                flashdly = SetDelay(25);                                                               
347
                                flashdly = SetDelay(25);                                                               
324
                        }
348
                        }
325
 
349
               
326
                }
350
                }
327
 
351
 
328
                if (CheckDelay(setupdly))                                                               //setup timeout reached
352
                if (CheckDelay(setupdly))                                                               //setup timeout reached
329
                {
353
                {
330
                        setup = 7;                                                                                      //lockdown setup
354
                        setup = 8;                                                                                      //lockdown setup
331
                        PORTD clrbit ledgreen;
355
                        PORTD clrbit ledgreen;
332
                }
356
                }
333
 
357
 
334
                //printf("ppm: %d / min: %d / max: %d\n",ppm,lmin,lmax);                        
358
                printf("ppm: %d / min: %d / max: %d\n",ppm,min,max);                   
335
               
359
               
336
               
360
               
337
               
361
               
338
                if (setup = 7)
362
                if (setup == 8)
339
                {
363
                {
340
               
364
               
341
                        temp1 = (STEP * (long)40000 * (long)6) / ((max-REDUCE) - (min+REDUCE));
365
                        temp1 = (STEP * (signed long)30000 * (signed long)6) / ((max-REDUCE) - (min+REDUCE));
342
                        temp2 = ((ppm - (min+REDUCE)) * temp1);
366
                        temp2 = ((ppm - (min+REDUCE)) * temp1);
343
                        color = temp2 / 40000;
367
                        color = temp2 / 30000;
344
               
368
               
345
                        if (color < 0) color = 0;
369
                        if (color < 0) color = 0;
346
                        if (color > (STEP * 6)) color = (STEP * 6);            
370
                        if (color > (STEP * 6)) color = (STEP * 6);            
347
               
371
               
-
 
372
                        printf("color: %d\n",color);
-
 
373
               
348
                        // Farbablauf: rot > Violett > blau > tuerkis > gruen > gelb >
374
                        // Farbablauf: rot > Violett > blau > tuerkis > gruen > gelb >
349
                        if ((color >= (STEP * 0)) && (color < (STEP * 1)))
375
                        if ((color >= (STEP * 0)) && (color < (STEP * 1)))
350
                        {
376
                        {
351
                                CH0 = MUL * ((color - (STEP * 0)));                             //fade in red > red (red only)
377
                                CH0 = MUL * ((color - (STEP * 0)));                             //fade in red > red (red only)
352
                                CH1 = 0;
378
                                CH1 = 0;