Subversion Repositories Code-Repo

Rev

Rev 149 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 149 Rev 150
Line 10... Line 10...
10
#include "adc.h"
10
#include "adc.h"
11
#include "xbee.h"
11
#include "xbee.h"
12
#include "timers.h"
12
#include "timers.h"
13
#include "lux_TSL2561.h"
13
#include "lux_TSL2561.h"
14
#include "oled_NHD-0216KZW-AB5.h"
14
#include "oled_NHD-0216KZW-AB5.h"
-
 
15
#include "temp_BMP085.h"
15
#include <delays.h>
16
#include <delays.h>
16
#include <string.h>
17
#include <string.h>
17
 
18
 
-
 
19
// <editor-fold defaultstate="collapsed" desc="Configuration Bits">
-
 
20
/* --------------------------- Configuration Bits --------------------------- */
18
#ifdef USE_EXT_OSC
21
/* CONFIG1L @ 0x1FFF8 */
19
#pragma config OSC = HSPLL          // Use external oscillator (101)
22
#pragma config CFGPLLEN = ON        // Enable PLL on startup
20
#pragma config PLLDIV = 3           // Set PPL prescaler to 3 (to get 4MHz)
23
#pragma config PLLDIV = 3           // Set PPL prescaler to 3 (to get 4MHz)
21
#else
-
 
22
#pragma config OSC = INTOSCPLL          // Use internal oscillator
-
 
23
#pragma config PLLDIV = 2           // Set PPL prescaler to 2 (to get 4MHz)
-
 
24
#endif
-
 
25
 
-
 
26
#pragma config WDTEN = OFF          // Turn off watchdog timer
24
#pragma config WDTEN = OFF          // Turn off watchdog timer
-
 
25
#pragma config STVREN = OFF         // Stack overflow/underflow reset disabled
27
#pragma config XINST = OFF          // Turn off extended instruction set
26
#pragma config XINST = OFF          // Turn off extended instruction set
-
 
27
 
-
 
28
/* CONFIG1H @ 0x1FFF9 */
28
#pragma config CFGPLLEN = ON        // Enable PLL on startup
29
#pragma config CP0 = OFF            // Program memory is not code-protected
-
 
30
 
-
 
31
/* CONFIG2L @ 0x1FFFA */
29
#pragma config PLLSEL = PLL96       // Use 96MHz PLL 4MHz -> 96MHz / 2 = 48MHz
32
#pragma config CLKOEC = OFF         // CLKO output disabled on RA6 pin
30
#pragma config SOSCSEL = LOW        // Low Power T1OSC/SOSC circuit selected
33
#pragma config SOSCSEL = LOW        // Low Power T1OSC/SOSC circuit selected
-
 
34
#pragma config IESO = ON            // Internal external oscillator switch over disabled
31
//#pragma config ADCSEL = BIT12       // 12-bit ADrC
35
#pragma config OSC = HSPLL          // Use external oscillator (101)
32
//#pragma config IOL1WAY = OFF        // IOLOCK bit can be set and cleared as needed
36
#pragma config FCMEN = OFF          // Fail-safe clock monitor disabled
-
 
37
 
-
 
38
/* CONFIG2H @ 0x1FFFB */
-
 
39
#pragma config WDTPS = 1            // Watchdog postscaler of 1:1
33
 
40
 
34
#ifdef _TEST_UART
41
/* CONFIG3L @ 0x1FFFC */
-
 
42
#pragma config RTCOSC = T1OSCREF    // RTCC uses T1OSC/T1CKI
-
 
43
#pragma config DSBOREN = ON         // Deep sleep BOR enabled
-
 
44
#pragma config DSWDTPS = M2         // Deep sleep watchdog postscaler of 1:2 (36m)
-
 
45
#pragma config DSWDTEN = OFF        // Deep sleep watchdog timer disabled
-
 
46
#pragma config DSWDTOSC = INTOSCREF  // DSWDT clock select uses INTRC
35
 
47
 
-
 
48
/* CONFIG3H @ 0x1FFFD */
-
 
49
#pragma config PLLSEL = PLL96       // Use 96MHz PLL 4MHz -> 96MHz / 2 = 48MHz
-
 
50
#pragma config ADCSEL = BIT12       // 12-bit ADC
-
 
51
#pragma config MSSP7B_EN = MSK7     // 7-bit address masking mode
-
 
52
#pragma config IOL1WAY = OFF        // IOLOCK bit can be set and cleared as needed
-
 
53
 
-
 
54
/* CONFIG4L @ 0x1FFFE */
-
 
55
#pragma config WPCFG = ON           // Configuration words page protected
-
 
56
 
-
 
57
/* CONFIG4H @ 0x1FFFF */
-
 
58
#pragma config WPEND = PAGE_WPFP    // Pages WPFP<6:0> through Configuration Words erase/write protected
-
 
59
#pragma config WPDIS = OFF          // WPFP<6:0>/WPEND region ignored
-
 
60
/* -------------------------------------------------------------------------- */
-
 
61
// </editor-fold>
-
 
62
 
-
 
63
#if defined(_TEST_UART)
36
void main(void) {
64
void main(void) {
37
    unsigned char length = 0;
65
    unsigned char length = 0;
38
    unsigned char buffer[100];
66
    unsigned char buffer[100];
39
 
67
 
40
    /* --------------------- Oscillator Configuration --------------------- */
68
    /* --------------------- Oscillator Configuration --------------------- */
Line 63... Line 91...
63
 
91
 
64
        Delay10KTCYx(255);
92
        Delay10KTCYx(255);
65
        Delay10KTCYx(255);
93
        Delay10KTCYx(255);
66
    }
94
    }
67
}
95
}
68
#endif
-
 
69
 
-
 
70
#ifdef _TEST_I2C_MASTER
-
 
71
 
96
 
-
 
97
#elif defined(_TEST_I2C_MASTER)
72
void main(void) {
98
void main(void) {
73
    unsigned char i = 0;
99
    unsigned char i = 0;
74
    unsigned char length = 0;
100
    unsigned char length = 0;
75
    unsigned char result = 0;
101
    unsigned char result = 0;
76
    unsigned char buffer[100];
102
    unsigned char buffer[100];
Line 132... Line 158...
132
 
158
 
133
        Delay10KTCYx(255);
159
        Delay10KTCYx(255);
134
        Delay10KTCYx(255);
160
        Delay10KTCYx(255);
135
    }
161
    }
136
}
162
}
137
#endif
-
 
138
 
-
 
139
#ifdef _TEST_I2C_SLAVE
-
 
140
 
163
 
-
 
164
#elif defined(_TEST_I2C_SLAVE)
141
void main(void) {
165
void main(void) {
142
    unsigned char i = 0;
166
    unsigned char i = 0;
143
    unsigned char length = 0;
167
    unsigned char length = 0;
144
    unsigned char result = 0;
168
    unsigned char result = 0;
145
    unsigned char buffer[100];
169
    unsigned char buffer[100];
Line 180... Line 204...
180
 
204
 
181
        Delay10KTCYx(255);
205
        Delay10KTCYx(255);
182
        Delay10KTCYx(255);
206
        Delay10KTCYx(255);
183
    }
207
    }
184
}
208
}
185
#endif
-
 
186
 
-
 
187
#ifdef _TEST_NFC
-
 
188
 
209
 
-
 
210
#elif defined(_TEST_NFC)
189
void main(void) {
211
void main(void) {
190
    unsigned char i, length = 0;
212
    unsigned char i, length = 0;
191
 
213
 
192
    // NFC stuff
214
    // NFC stuff
193
    NFC_FIRMWARE_VERSION version;
215
    NFC_FIRMWARE_VERSION version;
Line 327... Line 349...
327
                memcpy((char *) &cardData_prev[1], (const char *) &cardData[1], 12);
349
                memcpy((char *) &cardData_prev[1], (const char *) &cardData[1], 12);
328
            }
350
            }
329
        }
351
        }
330
    }
352
    }
331
}
353
}
332
#endif
-
 
333
 
-
 
334
#ifdef _TEST_LED_BACKPACK
-
 
335
 
354
 
-
 
355
#elif defined(_TEST_LED_BACKPACK)
336
void main(void) {
356
void main(void) {
337
    unsigned char i = 0;
357
    unsigned char i = 0;
338
    unsigned int counter = 0;
358
    unsigned int counter = 0;
339
 
359
 
340
    /* --------------------- Oscillator Configuration --------------------- */
360
    /* --------------------- Oscillator Configuration --------------------- */
Line 381... Line 401...
381
            counter = 0;
401
            counter = 0;
382
 
402
 
383
        //        Delay10KTCYx(255);
403
        //        Delay10KTCYx(255);
384
    }
404
    }
385
}
405
}
386
#endif
-
 
387
 
-
 
388
#ifdef _TEST_SPI
-
 
389
 
406
 
-
 
407
#elif defined(_TEST_SPI)
390
void main(void) {
408
void main(void) {
391
    unsigned char i = 0;
409
    unsigned char i = 0;
392
    unsigned char length = 0;
410
    unsigned char length = 0;
393
    unsigned char result = 0;
411
    unsigned char result = 0;
394
    unsigned char buffer[100];
412
    unsigned char buffer[100];
Line 430... Line 448...
430
 
448
 
431
        Delay10KTCYx(255);
449
        Delay10KTCYx(255);
432
        Delay10KTCYx(255);
450
        Delay10KTCYx(255);
433
    }
451
    }
434
}
452
}
435
#endif
-
 
436
 
-
 
437
#ifdef _TEST_SSD1306_OLED
-
 
438
 
453
 
-
 
454
#elif defined(_TEST_SSD1306_OLED)
439
void main(void) {
455
void main(void) {
440
    unsigned int i = 0;
456
    unsigned int i = 0;
441
    unsigned long l = 0;
457
    unsigned long l = 0;
442
 
458
 
443
    /* --------------------- Oscillator Configuration --------------------- */
459
    /* --------------------- Oscillator Configuration --------------------- */
Line 549... Line 565...
549
        //        i++;
565
        //        i++;
550
        //        SSD1306_Display();
566
        //        SSD1306_Display();
551
 
567
 
552
    }
568
    }
553
}
569
}
554
#endif
-
 
555
 
-
 
556
#ifdef _TEST_SSD1331_OLED
-
 
557
 
570
 
-
 
571
#elif defined(_TEST_SSD1331_OLED)
558
void main(void) {
572
void main(void) {
559
    unsigned int i = 0;
573
    unsigned int i = 0;
560
 
574
 
561
    /* --------------------- Oscillator Configuration --------------------- */
575
    /* --------------------- Oscillator Configuration --------------------- */
562
    //    OSCTUNEbits.PLLEN = 1;          // Enable 4x PLL
576
    //    OSCTUNEbits.PLLEN = 1;          // Enable 4x PLL
Line 680... Line 694...
680
        //        SSD1331_Set_Text_Color_BG(SSD1331_WHITE, SSD1331_BLACK);
694
        //        SSD1331_Set_Text_Color_BG(SSD1331_WHITE, SSD1331_BLACK);
681
        //        SSD1331_Write_String("%u", i);
695
        //        SSD1331_Write_String("%u", i);
682
        //        i++;
696
        //        i++;
683
    }
697
    }
684
}
698
}
685
#endif
-
 
686
 
-
 
687
#ifdef _TEST_ADC
-
 
688
 
699
 
-
 
700
#elif defined(_TEST_ADC)
689
void main(void) {
701
void main(void) {
690
    unsigned int x, y, z;
702
    unsigned int x, y, z;
691
    unsigned char buffer[60];
703
    unsigned char buffer[60];
692
 
704
 
693
    /* --------------------- Oscillator Configuration --------------------- */
705
    /* --------------------- Oscillator Configuration --------------------- */
Line 740... Line 752...
740
        SSD1306_Write_String("Z: %u", z);
752
        SSD1306_Write_String("Z: %u", z);
741
        SSD1306_Display();
753
        SSD1306_Display();
742
    }
754
    }
743
}
755
}
744
 
756
 
745
#endif
-
 
746
 
-
 
747
#ifdef _TEST_XBEE
757
#elif defined(_TEST_XBEE)
748
 
-
 
749
void main(void) {
758
void main(void) {
750
    unsigned int i, length = 0;
759
    unsigned int i, length = 0;
751
    unsigned char buffer[100];
760
    unsigned char buffer[100];
752
 
761
 
753
    XBEE_RX_AT_COMMAND_RESPONSE_FRAME *rx_at_cmd_response_frame;
762
    XBEE_RX_AT_COMMAND_RESPONSE_FRAME *rx_at_cmd_response_frame;
Line 900... Line 909...
900
        }
909
        }
901
#endif
910
#endif
902
 
911
 
903
    }
912
    }
904
}
913
}
905
#endif
-
 
906
 
-
 
907
#ifdef _TEST_NFC_TO_SSD1306_OLED
-
 
908
 
914
 
-
 
915
#elif defined(_TEST_NFC_TO_SSD1306_OLED)
909
void main(void) {
916
void main(void) {
910
    unsigned char length = 0;
917
    unsigned char length = 0;
911
 
918
 
912
    // NFC stuff
919
    // NFC stuff
913
    NFC_FIRMWARE_VERSION version;
920
    NFC_FIRMWARE_VERSION version;
Line 1000... Line 1007...
1000
                memcpy((char *) &cardData_prev[1], (const char *) &cardData[1], 12);
1007
                memcpy((char *) &cardData_prev[1], (const char *) &cardData[1], 12);
1001
            }
1008
            }
1002
        }
1009
        }
1003
    }
1010
    }
1004
}
1011
}
1005
#endif
-
 
1006
 
-
 
1007
#ifdef _TEST_TIMER1_RTC
-
 
1008
 
1012
 
-
 
1013
#elif defined(_TEST_TIMER1_RTC)
1009
void main(void) {
1014
void main(void) {
1010
 
1015
 
1011
    /* --------------------- Oscillator Configuration --------------------- */
1016
    /* --------------------- Oscillator Configuration --------------------- */
1012
    //    OSCTUNEbits.PLLEN = 1;          // Enable 4x PLL
1017
    //    OSCTUNEbits.PLLEN = 1;          // Enable 4x PLL
1013
    OSCCONbits.IRCF = 0b111; // Set INTOSC postscaler to 8MHz
1018
    OSCCONbits.IRCF = 0b111; // Set INTOSC postscaler to 8MHz
Line 1030... Line 1035...
1030
 
1035
 
1031
    while (1) {
1036
    while (1) {
1032
 
1037
 
1033
    }
1038
    }
1034
}
1039
}
1035
#endif
-
 
1036
 
-
 
1037
#ifdef _TEST_LUX
-
 
1038
 
1040
 
-
 
1041
#elif defined(_TEST_LUX)
1039
void main(void) {
1042
void main(void) {
1040
    unsigned int ir, full;
1043
    unsigned int ir, full;
1041
    unsigned long lum;
1044
    unsigned long lum;
1042
 
1045
 
1043
    /* --------------------- Oscillator Configuration --------------------- */
1046
    /* --------------------- Oscillator Configuration --------------------- */
Line 1084... Line 1087...
1084
        Delay10KTCYx(255);
1087
        Delay10KTCYx(255);
1085
        Delay10KTCYx(255);
1088
        Delay10KTCYx(255);
1086
        Delay10KTCYx(255);
1089
        Delay10KTCYx(255);
1087
    }
1090
    }
1088
}
1091
}
1089
#endif
-
 
1090
 
-
 
1091
#ifdef _TEST_OLED_CHAR
-
 
1092
 
1092
 
-
 
1093
#elif defined(_TEST_OLED_CHAR)
1093
void main(void) {
1094
void main(void) {
1094
    int i;
1095
    int i;
1095
    unsigned char *buffer = "Test String";
1096
    unsigned char *buffer = "Test String";
1096
    
1097
    
1097
    /* --------------------- Oscillator Configuration --------------------- */
1098
    /* --------------------- Oscillator Configuration --------------------- */
Line 1119... Line 1120...
1119
    while (1) {
1120
    while (1) {
1120
        Delay10KTCYx(150);
1121
        Delay10KTCYx(150);
1121
        NHD_Scroll_Display_Left();
1122
        NHD_Scroll_Display_Left();
1122
    }
1123
    }
1123
}
1124
}
1124
#endif
-
 
1125
 
1125
 
1126
#if !defined(_TEST_UART) && !defined(_TEST_I2C_MASTER) && \
1126
#elif defined(_TEST_BMP)
-
 
1127
void main(void) {
-
 
1128
 
-
 
1129
    /* --------------------- Oscillator Configuration --------------------- */
1127
    !defined(_TEST_I2C_SLAVE) && !defined(_TEST_SPI) && \
1130
    //    OSCTUNEbits.PLLEN = 1;          // Enable 4x PLL
1128
    !defined(_TEST_NFC) && !defined(_TEST_LED_BACKPACK) && \
1131
    OSCCONbits.IRCF = 0b111; // Set INTOSC postscaler to 8MHz
1129
    !defined(_TEST_SSD1306_OLED) && !defined(_TEST_SSD1331_OLED) && \
1132
    OSCCONbits.SCS = 0b00; // Use 96MHz PLL as primary clock source
-
 
1133
    /* -------------------------------------------------------------------- */
-
 
1134
 
-
 
1135
    // Set all ports as digial I/O except for AN0-AN2 (pins 2-4)
-
 
1136
    ANCON0 = 0xF8;
-
 
1137
    ANCON1 = 0x1F;
-
 
1138
 
-
 
1139
    UART1_Init();
-
 
1140
    I2C_Init();
-
 
1141
    BMP_Init();
-
 
1142
            
-
 
1143
    I2C_Configure_Master(I2C_100KHZ);
-
 
1144
 
-
 
1145
    interrupt_enable(); // Enable high-priority interrupts and low-priority interrupts
-
 
1146
    interrupt_init(); // Initialize the interrupt priorities
-
 
1147
 
-
 
1148
    BMP_Begin(BMP085_ULTRAHIGHRES);
-
 
1149
 
-
 
1150
    while (1) {
-
 
1151
        DBG_PRINT_MAIN("Temp: ");
1130
    !defined(_TEST_ADC) && !defined(_TEST_XBEE) && \
1152
        DBG_PRINT_MAIN_F(BMP_Read_Temperature(), 1);
-
 
1153
        DBG_PRINT_MAIN(" *C\r\n");
1131
    !defined(_TEST_NFC_TO_SSD1306_OLED) && !defined(_TEST_TIMER1_RTC) && \
1154
        DBG_PRINT_MAIN("Pressure: %ld Pa\r\n", BMP_Read_Pressure());
-
 
1155
        DBG_PRINT_MAIN("Altitude: ");
1132
    !defined(_TEST_LUX) && !defined(_TEST_OLED_CHAR)
1156
        DBG_PRINT_MAIN_F(BMP_Read_Altitude(101592), 1);
-
 
1157
        DBG_PRINT_MAIN(" meters\r\n");
-
 
1158
 
-
 
1159
        Delay10KTCYx(255);
-
 
1160
        Delay10KTCYx(255);
-
 
1161
        Delay10KTCYx(255);
-
 
1162
        Delay10KTCYx(255);
-
 
1163
    }
-
 
1164
}
1133
 
1165
 
-
 
1166
#else
1134
void main(void) {
1167
void main(void) {
1135
    unsigned int ir, full;
1168
    unsigned int ir, full;
1136
    unsigned long lum;
1169
    unsigned long lum;
1137
    
1170
    
1138
    /* --------------------- Oscillator Configuration --------------------- */
1171
    /* --------------------- Oscillator Configuration --------------------- */
Line 1170... Line 1203...
1170
 
1203
 
1171
    while (1) {
1204
    while (1) {
1172
        lum = LUX_GetFullLuminosity();
1205
        lum = LUX_GetFullLuminosity();
1173
        ir = lum >> 16;
1206
        ir = lum >> 16;
1174
        full = lum & 0xFFFF;
1207
        full = lum & 0xFFFF;
1175
        NHD_Clear();
1208
//        NHD_Clear();
1176
        NHD_Set_Cursor(0, 0);
1209
        NHD_Set_Cursor(0, 0);
1177
        NHD_Write_String("I: %d ", ir);
1210
        NHD_Write_String("I: %d ", ir);
1178
        NHD_Write_String("V: %d", full - ir);
1211
        NHD_Write_String("V: %d        ", full - ir);
1179
        NHD_Set_Cursor(0, 1);
1212
        NHD_Set_Cursor(0, 1);
1180
        NHD_Write_String("Lux: %ld", LUX_CalculateLux(full, ir));
1213
        NHD_Write_String("Lux: %ld        ", LUX_CalculateLux(full, ir));
1181
 
1214
 
1182
        Delay10KTCYx(255);
1215
        Delay10KTCYx(100);
1183
    }
1216
    }
1184
}
1217
}
1185
#endif
1218
#endif