Rev 2013 Rev 2014
1 #include "main.h" 1 #include "main.h"
2 #include <math.h> 2 #include <math.h>
3   3  
4 #use fast_io (D) 4 #use fast_io (D)
5   5  
6 #define VERSION 0.2 6 #define VERSION 0.2
7   7  
8 #define START PIN_D4 8 #define START PIN_D4
9 #define STOP1 PIN_D5 9 #define STOP1 PIN_D5
10 #define STOP2 PIN_D7 10 #define STOP2 PIN_D7
11   11  
12 #include "GP2.h" 12 #include "GP2.h"
13   13  
14 #define ONE_WIRE_PIN PIN_E2 14 #define ONE_WIRE_PIN PIN_E2
15 #include "ds1820.c" 15 #include "ds1820.c"
16   16  
17 void main() 17 void main()
18 { 18 {
19 /* setup_adc_ports(NO_ANALOGS|VSS_VDD); 19 /* setup_adc_ports(NO_ANALOGS|VSS_VDD);
20 setup_adc(ADC_CLOCK_DIV_2); 20 setup_adc(ADC_CLOCK_DIV_2);
21 setup_psp(PSP_DISABLED); 21 setup_psp(PSP_DISABLED);
22 setup_spi(SPI_SS_DISABLED); 22 setup_spi(SPI_SS_DISABLED);
23 setup_wdt(WDT_OFF); 23 setup_wdt(WDT_OFF);
24 setup_timer_0(RTCC_INTERNAL); 24 setup_timer_0(RTCC_INTERNAL);
25 setup_timer_1(T1_DISABLED); 25 setup_timer_1(T1_DISABLED);
26 setup_timer_2(T2_DISABLED,0,1); 26 setup_timer_2(T2_DISABLED,0,1);
27 setup_ccp1(CCP_OFF); 27 setup_ccp1(CCP_OFF);
28 setup_comparator(NC_NC_NC_NC); 28 setup_comparator(NC_NC_NC_NC);
29 setup_vref(FALSE); 29 setup_vref(FALSE);
30 */ 30 */
31 setup_adc_ports(NO_ANALOGS|VSS_VDD); 31 setup_adc_ports(NO_ANALOGS|VSS_VDD);
32 setup_adc(ADC_CLOCK_DIV_2); 32 setup_adc(ADC_CLOCK_DIV_2);
33 setup_spi(SPI_SS_DISABLED); 33 setup_spi(SPI_SS_DISABLED);
34 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); 34 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
35 setup_timer_1(T1_DISABLED); 35 setup_timer_1(T1_DISABLED);
36 setup_timer_2(T2_DISABLED,0,1); 36 setup_timer_2(T2_DISABLED,0,1);
37 setup_ccp1(CCP_OFF); 37 setup_ccp1(CCP_OFF);
38 setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard 38 setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
39   39  
40   40  
41 set_tris_d(0x00); 41 set_tris_d(0x00);
42   42  
43 TDC_reset(); 43 TDC_reset();
44   44  
45 output_low(START); 45 output_low(START);
46 output_low(STOP1); 46 output_low(STOP1);
47 output_low(STOP2); 47 output_low(STOP2);
48   48  
49 delay_ms(50); 49 delay_ms(50);
50   50  
51 int16 ret16; 51 int16 ret16;
52 int8 ret8; 52 int8 ret8;
53   53  
54 TDC_reset(); 54 TDC_reset();
55 delay_ms(100); 55 delay_ms(100);
56 56
57 while(TRUE) 57 while(TRUE)
58 { 58 {
59   59  
60   60  
61 //----------------------------------------------- Nastaveni registru 61 //----------------------------------------------- Nastaveni registru
62 62
63 MRange=TDC_MRANGE2; // sets measurement mode 63 MRange=TDC_MRANGE2; // sets measurement mode
64 hit1=TDC_MRANGE2_HIT1_START; 64 hit1=TDC_MRANGE2_HIT1_START;
65 hitin1=TDC_HITIN1_4; // set nomber of hits on channel 1 65 hitin1=TDC_HITIN1_4; // set nomber of hits on channel 1
66 hitin2=TDC_HITIN2_0; // disable channel 2 (normal state for this mode) 66 hitin2=TDC_HITIN2_0; // disable channel 2 (normal state for this mode)
67 en_int= TDC_INT_ALU | TDC_INT_ENDHIT | TDC_INT_TIMEOUT; // eneble all possible interrupt flags 67 en_int= TDC_INT_ALU | TDC_INT_ENDHIT | TDC_INT_TIMEOUT; // eneble all possible interrupt flags
68 en_err_val=TDC_ERRVAL_EN; // enable of error value output 68 en_err_val=TDC_ERRVAL_EN; // enable of error value output
69 clkhsdiv=TDC_CLKHSDIV_4; // divide clkHS by 4 69 clkhsdiv=TDC_CLKHSDIV_4; // divide clkHS by 4
70 70
71 delval1=0x0; // windowing disabled 71 delval1=0x0; // windowing disabled
72 delval2=0x0; 72 delval2=0x0;
73 delval3=0x0; 73 delval3=0x0;
74 74
75 TDC_update_registers(); 75 TDC_update_registers();
76   76  
77 delay_ms(100); 77 delay_ms(100);
78   78  
79 //----------------------------------------------- Mereni 2 79 //----------------------------------------------- Mereni 2
80 80
81 TDC_init(); 81 TDC_init();
82 82
83 delay_ms(50); 83 delay_ms(50);
84 84
85 TDC_start_cycle(); 85 TDC_start_cycle();
86 86
87 delay_ms(200); 87 delay_ms(200);
88 88
89 output_high(STOP2); // Merime jenom jednim kanalem (druhy zrejme musi byt v H) 89 output_high(STOP2); // Merime jenom jednim kanalem (druhy zrejme byt v H)
90 90
91 output_high(START); 91 output_high(START);
92 output_low(START); 92 output_low(START);
93 delay_us(150); 93 delay_us(150);
94 94
95 output_high(STOP1); 95 output_high(STOP1);
96 output_low(STOP1); 96 output_low(STOP1);
97 delay_us(1); 97 delay_us(1);
98 98
99 output_high(STOP1); 99 output_high(STOP1);
100 output_low(STOP1); 100 output_low(STOP1);
101 delay_us(10); 101 delay_us(10);
102 102
103 output_high(STOP1); 103 output_high(STOP1);
104 output_low(STOP1); 104 output_low(STOP1);
105 delay_us(1); 105 delay_us(1);
106 106
107 //----------------------------------------------- Pocitani 107 //----------------------------------------------- Pocitani
108   108  
109 // printf("Time2: %LX %LX %LX %LX ", TDC_get_measurement(1), TDC_get_measurement(2), TDC_get_measurement(3), TDC_get_measurement(4)); 109 // printf("Time2: %LX %LX %LX %LX ", TDC_get_measurement(1), TDC_get_measurement(2), TDC_get_measurement(3), TDC_get_measurement(4));
110   110  
111 111
112 output_low(TDC_ENABLE); //status register 112 output_low(TDC_ENABLE); //status register
113 ret8=0; 113 ret8=0;
114 ret8=(0b1011<<4)|4; 114 ret8=(0b1011<<4)|4;
115 spi_xfer(TDC_stream,ret8,8); 115 spi_xfer(TDC_stream,ret8,8);
116 ret16=spi_xfer(TDC_stream,0,16); 116 ret16=spi_xfer(TDC_stream,0,16);
117 output_high(TDC_ENABLE); 117 output_high(TDC_ENABLE);
118 printf("[%Lu %Lu %Lu %Lu %Lu %Lu %Lu]\r\n", (1&(ret16)>>12), (1&(ret16)>>11), (1&(ret16)>>10), 1&(ret16)>>9, 7&(ret16)>>6, 7&(ret16)>>3, 7&TDC_get_status()); 118 printf("[%Lu %Lu %Lu %Lu %Lu %Lu %Lu]\r\n", (1&(ret16)>>12), (1&(ret16)>>11), (1&(ret16)>>10), 1&(ret16)>>9, 7&(ret16)>>6, 7&(ret16)>>3, 7&TDC_get_status());
119   119  
120 printf("Time2: %3.7f %3.7f %3.7f \r\n", TDC_mrange2_get_time(1), TDC_mrange2_get_time(2), TDC_mrange2_get_time(3)); 120 printf("Time2: %3.7f %3.7f %3.7f \r\n", TDC_mrange2_get_time(1), TDC_mrange2_get_time(2), TDC_mrange2_get_time(3));
121   121  
122   122  
123 //----------------------------------------------- Nastaveni registru 123 //----------------------------------------------- Nastaveni registru
124 124
125 MRange=TDC_MRANGE1; 125 MRange=TDC_MRANGE1;
126 hit1=TDC_MRANGE1_HIT1_NOAC; 126 hit1=TDC_MRANGE1_HIT1_NOAC;
127 hit2=TDC_MRANGE1_HIT2_NOAC; 127 hit2=TDC_MRANGE1_HIT2_NOAC;
128 hitin1=TDC_HITIN1_1; 128 hitin1=TDC_HITIN1_1;
129 hitin2=TDC_HITIN2_1; 129 hitin2=TDC_HITIN2_1;
130 en_int= TDC_INT_ALU | TDC_INT_ENDHIT | TDC_INT_TIMEOUT; 130 en_int= TDC_INT_ALU | TDC_INT_ENDHIT | TDC_INT_TIMEOUT;
131 en_err_val=TDC_ERRVAL_EN; 131 en_err_val=TDC_ERRVAL_EN;
132 clkhsdiv=TDC_CLKHSDIV_4; 132 clkhsdiv=TDC_CLKHSDIV_4;
133 delval1=0x0; 133 delval1=0x0;
134 delval2=0x0; 134 delval2=0x0;
135 delval3=0x0; 135 delval3=0x0;
136 136
137 TDC_update_registers(); 137 TDC_update_registers();
138   138  
139 delay_ms(100); 139 delay_ms(100);
140   140  
141   141  
142 //----------------------------------------------- Mereni 1 142 //----------------------------------------------- Mereni 1
143 143
144 TDC_init(); 144 TDC_init();
145 145
146 delay_ms(50); 146 delay_ms(50);
147 output_low(START); 147 output_low(START);
148 output_low(STOP1); 148 output_low(STOP1);
149 output_low(STOP2); 149 output_low(STOP2);
150 150
151 output_high(START); // start of time measurement 151 output_high(START); // start of time measurement
152   152  
153 output_high(STOP2); 153 output_high(STOP2);
154 output_high(STOP1); 154 output_high(STOP1);
155 155
156 output_low(STOP1); 156 output_low(STOP1);
157 output_low(STOP2); 157 output_low(STOP2);
158 output_low(START); 158 output_low(START);
159   159  
160   160  
161   161  
162 //----------------------------------------------- Pocitani 162 //----------------------------------------------- Pocitani
163   163  
164 // printf("Time1: %LX %LX %LX %LX ", TDC_get_measurement(1), TDC_get_measurement(2), TDC_get_measurement(3), TDC_get_measurement(4)); 164 // printf("Time1: %LX %LX %LX %LX ", TDC_get_measurement(1), TDC_get_measurement(2), TDC_get_measurement(3), TDC_get_measurement(4));
165   165  
166 output_low(TDC_ENABLE); //status register 166 output_low(TDC_ENABLE); //status register
167 ret8=0; 167 ret8=0;
168 ret8=(0b1011<<4)|4; 168 ret8=(0b1011<<4)|4;
169 spi_xfer(TDC_stream,ret8,8); 169 spi_xfer(TDC_stream,ret8,8);
170 ret16=spi_xfer(TDC_stream,0,16); 170 ret16=spi_xfer(TDC_stream,0,16);
171 output_high(TDC_ENABLE); 171 output_high(TDC_ENABLE);
172   172  
173 printf("[%Lu %Lu %Lu %Lu %Lu %Lu %Lu]\r\n", (1&(ret16)>>12), (1&(ret16)>>11), (1&(ret16)>>10), 1&(ret16)>>9, 7&(ret16)>>6, 7&(ret16)>>3, 7&TDC_get_status()); 173 printf("[%Lu %Lu %Lu %Lu %Lu %Lu %Lu]\r\n", (1&(ret16)>>12), (1&(ret16)>>11), (1&(ret16)>>10), 1&(ret16)>>9, 7&(ret16)>>6, 7&(ret16)>>3, 7&TDC_get_status());
174   174  
175 printf("Time1: %3.7f %3.7f %3.7f \r\n", TDC_mrange1_get_time(1,0,1,1), TDC_mrange1_get_time(2,0,2,1), TDC_mrange1_get_time(1,1,2,1)); 175 printf("Time1: %3.7f %3.7f %3.7f \r\n", TDC_mrange1_get_time(1,0,1,1), TDC_mrange1_get_time(2,0,2,1), TDC_mrange1_get_time(1,1,2,1));
176   176  
177 /// ----------------------------------------------- Temperature masurement 177 /// ----------------------------------------------- Temperature masurement
178   178  
179   179  
180 TDC_reset(); 180 TDC_reset();
181 portnum=TDC_TPORTNUM_4; 181 portnum=TDC_TPORTNUM_4;
182 Tcycle=TDC_TCYCLE_SHORT; 182 Tcycle=TDC_TCYCLE_SHORT;
183 fakenum=TDC_TFAKENUM_2; 183 fakenum=TDC_TFAKENUM_2;
184 selclkT=TDC_TSELCLK_128HS; 184 selclkT=TDC_TSELCLK_128HS;
185   185  
186 TDC_update_registers(); 186 TDC_update_registers();
187   187  
188 TDC_init(); 188 TDC_init();
189 TDC_start_temp(); 189 TDC_start_temp();
190 190
191 191
192 output_low(TDC_ENABLE); //status register 192 output_low(TDC_ENABLE); //status register
193 ret8=0; 193 ret8=0;
194 ret8=(0b1011<<4)|4; 194 ret8=(0b1011<<4)|4;
195 spi_xfer(TDC_stream,ret8,8); 195 spi_xfer(TDC_stream,ret8,8);
196 ret16=spi_xfer(TDC_stream,0,16); 196 ret16=spi_xfer(TDC_stream,0,16);
197 output_high(TDC_ENABLE); 197 output_high(TDC_ENABLE);
198 printf("Temp: %LX %LX %LX %LX ", TDC_get_measurement(1), TDC_get_measurement(2), TDC_get_measurement(3), TDC_get_measurement(4)); 198 printf("Temp: %LX %LX %LX %LX ", TDC_get_measurement(1), TDC_get_measurement(2), TDC_get_measurement(3), TDC_get_measurement(4));
199 printf(" [%Lu %Lu %Lu %Lu %Lu %Lu %Lu] \r\n", (1&(ret16)>>12), (1&(ret16)>>11), (1&(ret16)>>10), 1&(ret16)>>9, 7&(ret16)>>6, 7&(ret16)>>3, 7&TDC_get_status()); 199 printf(" [%Lu %Lu %Lu %Lu %Lu %Lu %Lu] \r\n", (1&(ret16)>>12), (1&(ret16)>>11), (1&(ret16)>>10), 1&(ret16)>>9, 7&(ret16)>>6, 7&(ret16)>>3, 7&TDC_get_status());
200 } 200 }
201 } 201 }