1 | /*
|
2 | * File: main.c
|
3 | * Author: akolb
|
4 | *
|
5 | * Created on 28. Juli 2014, 08:28
|
6 | */
|
7 |
|
8 | #include <stdio.h>
|
9 | #include <stdlib.h>
|
10 | #include <xc.h>
|
11 | #include <pic18f25k80.h>
|
12 | #include <math.h>
|
13 |
|
14 | /*
|
15 | * Config
|
16 | */
|
17 |
|
18 | // #pragma config statements should precede project file includes.
|
19 | // Use project enums instead of #define for ON and OFF.
|
20 |
|
21 | // CONFIG1L
|
22 | #pragma config RETEN = OFF // VREG Sleep Enable bit (Ultra low-power regulator is Disabled (Controlled by REGSLP bit))
|
23 | #pragma config INTOSCSEL = HIGH // LF-INTOSC Low-power Enable bit (LF-INTOSC in High-power mode during Sleep)
|
24 | #pragma config SOSCSEL = DIG // SOSC Power Selection and mode Configuration bits (Digital (SCLKI) mode)
|
25 | #pragma config XINST = ON // Extended Instruction Set (Enabled)
|
26 |
|
27 | // CONFIG1H
|
28 | #pragma config FOSC = INTIO2 // Oscillator (Internal RC oscillator)
|
29 | #pragma config PLLCFG = OFF // PLL x4 Enable bit (Disabled)
|
30 | #pragma config FCMEN = OFF // Fail-Safe Clock Monitor (Disabled)
|
31 | #pragma config IESO = OFF // Internal External Oscillator Switch Over Mode (Disabled)
|
32 |
|
33 | // CONFIG2L
|
34 | #pragma config PWRTEN = OFF // Power Up Timer (Disabled)
|
35 | #pragma config BOREN = OFF // Brown Out Detect (Disabled in hardware, SBOREN disabled)
|
36 | #pragma config BORV = 2 // Brown-out Reset Voltage bits (2.0V)
|
37 | #pragma config BORPWR = ZPBORMV // BORMV Power level (ZPBORMV instead of BORMV is selected)
|
38 |
|
39 | // CONFIG2H
|
40 | #pragma config WDTEN = OFF // Watchdog Timer (WDT controlled by SWDTEN bit setting)
|
41 | #pragma config WDTPS = 1048576 // Watchdog Postscaler (1:1048576)
|
42 |
|
43 | // CONFIG3H
|
44 | #pragma config CANMX = PORTB // ECAN Mux bit (ECAN TX and RX pins are located on RB2 and RB3, respectively)
|
45 | #pragma config MSSPMSK = MSK7 // MSSP address masking (7 Bit address masking mode)
|
46 | #pragma config MCLRE = ON // Master Clear Enable (MCLR Enabled, RE3 Disabled)
|
47 |
|
48 | // CONFIG4L
|
49 | #pragma config STVREN = OFF // Stack Overflow Reset (Disabled)
|
50 | #pragma config BBSIZ = BB2K // Boot Block Size (2K word Boot Block size)
|
51 |
|
52 | // CONFIG5L
|
53 | #pragma config CP0 = OFF // Code Protect 00800-01FFF (Disabled)
|
54 | #pragma config CP1 = OFF // Code Protect 02000-03FFF (Disabled)
|
55 | #pragma config CP2 = OFF // Code Protect 04000-05FFF (Disabled)
|
56 | #pragma config CP3 = OFF // Code Protect 06000-07FFF (Disabled)
|
57 |
|
58 | // CONFIG5H
|
59 | #pragma config CPB = OFF // Code Protect Boot (Disabled)
|
60 | #pragma config CPD = OFF // Data EE Read Protect (Disabled)
|
61 |
|
62 | // CONFIG6L
|
63 | #pragma config WRT0 = OFF // Table Write Protect 00800-03FFF (Disabled)
|
64 | #pragma config WRT1 = OFF // Table Write Protect 04000-07FFF (Disabled)
|
65 | #pragma config WRT2 = OFF // Table Write Protect 08000-0BFFF (Disabled)
|
66 | #pragma config WRT3 = OFF // Table Write Protect 0C000-0FFFF (Disabled)
|
67 |
|
68 | // CONFIG6H
|
69 | #pragma config WRTC = OFF // Config. Write Protect (Disabled)
|
70 | #pragma config WRTB = OFF // Table Write Protect Boot (Disabled)
|
71 | #pragma config WRTD = OFF // Data EE Write Protect (Disabled)
|
72 |
|
73 | // CONFIG7L
|
74 | #pragma config EBTR0 = OFF // Table Read Protect 00800-03FFF (Disabled)
|
75 | #pragma config EBTR1 = OFF // Table Read Protect 04000-07FFF (Disabled)
|
76 | #pragma config EBTR2 = OFF // Table Read Protect 08000-0BFFF (Disabled)
|
77 | #pragma config EBTR3 = OFF // Table Read Protect 0C000-0FFFF (Disabled)
|
78 |
|
79 | // CONFIG7H
|
80 | #pragma config EBTRB = OFF // Table Read Protect Boot (Disabled)
|
81 |
|
82 |
|
83 | /*
|
84 | * Defin
|
85 | */
|
86 | #define _XTAL_FREQ 1000000
|
87 |
|
88 | /*
|
89 | *
|
90 | */
|
91 |
|
92 | int main(int argc, char** argv)
|
93 | {
|
94 | OSCCONbits.IRCF = 0b011; // Frequenz auf 1MHz
|
95 |
|
96 | ANCON0 = 0x01; // Analogeingänge auf Digital umschalten
|
97 | ANCON1 = 0x00; // Bis auf AN0
|
98 |
|
99 | TRISA = 0x01; // Alle Digitalen Ports auf Ausgang stellen
|
100 | TRISB = 0x00; // Bis auf den analogen Eingang
|
101 | TRISC = 0x00;
|
102 |
|
103 |
|
104 | ADCON0bits.CHS = 0b00000; //Analogeingang definieren
|
105 | ADCON0bits.ADON = 0b1;
|
106 |
|
107 | ADCON1bits.VCFG = 0b10; //Analoge Referenz festlegen
|
108 | ADCON1bits.VNCFG = 0b0;
|
109 | ADCON1bits.CHSN = 0b000;
|
110 |
|
111 | ADCON2bits.ADFM = 0b1; //Analoge Geschwindigkeit festlegen
|
112 | ADCON2bits.ACQT = 0b010;
|
113 | ADCON2bits.ADCS = 0b000;
|
114 |
|
115 |
|
116 |
|
117 | PORTAbits.RA5 = 0; // Nicht benutzte Pins auf 0 ziehen
|
118 |
|
119 | // Variablen für die Ansteuerung der LCD-Anzeige erstellen
|
120 | static bit A1 = 0, B1 = 0, C1 = 0, D1 = 0, E1 = 0, F1 = 0, G1 = 0, DP1 = 0;
|
121 | static bit A2 = 0, B2 = 0, C2 = 0, D2 = 0, E2 = 0, F2 = 0, G2 = 0, DP2 = 0;
|
122 |
|
123 | // Div. Variablen erstellen
|
124 | int Temperatur = 0;
|
125 | static bit Invertierer = 0;
|
126 | while(1)
|
127 | {
|
128 | /*
|
129 | * Einlesen der Temperatur
|
130 | */
|
131 |
|
132 | ADCON0bits.GO_DONE = 1;
|
133 |
|
134 | while(ADCON0bits.GO_DONE);
|
135 |
|
136 | Temperatur = ADRESL; // (ADRESL + (ADRESH*256)-454)/60;//(((514)-454)/60);
|
137 |
|
138 |
|
139 | /*
|
140 | * Verarbeitung der Temperatur
|
141 | */
|
142 |
|
143 | // Die erste Ziffer setzen
|
144 | if(Temperatur == 50)
|
145 | {
|
146 | A1 = 1; // 5 setzen
|
147 | B1 = 0;
|
148 | C1 = 1;
|
149 | D1 = 1;
|
150 | E1 = 0;
|
151 | F1 = 1;
|
152 | G1 = 1;
|
153 | }
|
154 | else if(Temperatur >= 40)
|
155 | {
|
156 | A1 = 0; // 4 setzen
|
157 | B1 = 1;
|
158 | C1 = 1;
|
159 | D1 = 0;
|
160 | E1 = 0;
|
161 | F1 = 1;
|
162 | G1 = 1;
|
163 | }
|
164 | else if(Temperatur >= 30)
|
165 | {
|
166 | A1 = 1; // 3 setzen
|
167 | B1 = 1;
|
168 | C1 = 1;
|
169 | D1 = 1;
|
170 | E1 = 0;
|
171 | F1 = 0;
|
172 | G1 = 1;
|
173 | }
|
174 | else if(Temperatur >= 20)
|
175 | {
|
176 | A1 = 1; // 2 setzen
|
177 | B1 = 1;
|
178 | C1 = 0;
|
179 | D1 = 1;
|
180 | E1 = 1;
|
181 | F1 = 0;
|
182 | G1 = 1;
|
183 | }
|
184 | else if(Temperatur >= 10)
|
185 | {
|
186 | A1 = 0; // 1 setzen
|
187 | B1 = 1;
|
188 | C1 = 1;
|
189 | D1 = 0;
|
190 | E1 = 0;
|
191 | F1 = 0;
|
192 | G1 = 0;
|
193 | }
|
194 | else
|
195 | {
|
196 | A1 = 0; // nichts setzen
|
197 | B1 = 0;
|
198 | C1 = 0;
|
199 | D1 = 0;
|
200 | E1 = 0;
|
201 | F1 = 0;
|
202 | G1 = 0;
|
203 | }
|
204 |
|
205 | // Die Zweite Ziffer setzten
|
206 | if((Temperatur == 0)||(Temperatur == 10)||(Temperatur == 20)||(Temperatur == 30)||(Temperatur == 40)||(Temperatur == 50))
|
207 | {
|
208 | A2 = 1; // 0 setzen
|
209 | B2 = 1;
|
210 | C2 = 1;
|
211 | D2 = 1;
|
212 | E2 = 1;
|
213 | F2 = 1;
|
214 | G2 = 0;
|
215 | }
|
216 | else if((Temperatur == 1)||(Temperatur == 11)||(Temperatur == 21)||(Temperatur == 31)||(Temperatur == 41))
|
217 | {
|
218 | A2 = 0; // 1 setzen
|
219 | B2 = 1;
|
220 | C2 = 1;
|
221 | D2 = 0;
|
222 | E2 = 0;
|
223 | F2 = 0;
|
224 | G2 = 0;
|
225 | }
|
226 | else if((Temperatur == 2)||(Temperatur == 12)||(Temperatur == 22)||(Temperatur == 32)||(Temperatur == 42))
|
227 | {
|
228 | A2 = 1; // 2 setzen
|
229 | B2 = 1;
|
230 | C2 = 0;
|
231 | D2 = 1;
|
232 | E2 = 1;
|
233 | F2 = 0;
|
234 | G2 = 1;
|
235 | }
|
236 | else if((Temperatur == 3)||(Temperatur == 13)||(Temperatur == 23)||(Temperatur == 33)||(Temperatur == 43))
|
237 | {
|
238 | A2 = 1; // 3 setzen
|
239 | B2 = 1;
|
240 | C2 = 1;
|
241 | D2 = 1;
|
242 | E2 = 0;
|
243 | F2 = 0;
|
244 | G2 = 1;
|
245 | }
|
246 | else if((Temperatur == 4)||(Temperatur == 14)||(Temperatur == 24)||(Temperatur == 34)||(Temperatur == 44))
|
247 | {
|
248 | A2 = 0; // 4 setzen
|
249 | B2 = 1;
|
250 | C2 = 1;
|
251 | D2 = 0;
|
252 | E2 = 0;
|
253 | F2 = 1;
|
254 | G2 = 1;
|
255 | }
|
256 | else if((Temperatur == 5)||(Temperatur == 15)||(Temperatur == 25)||(Temperatur == 35)||(Temperatur == 45))
|
257 | {
|
258 | A2 = 1; // 5 setzen
|
259 | B2 = 0;
|
260 | C2 = 1;
|
261 | D2 = 1;
|
262 | E2 = 0;
|
263 | F2 = 1;
|
264 | G2 = 1;
|
265 | }
|
266 | else if((Temperatur == 6)||(Temperatur == 16)||(Temperatur == 26)||(Temperatur == 36)||(Temperatur == 46))
|
267 | {
|
268 | A2 = 1; // 6 setzen
|
269 | B2 = 0;
|
270 | C2 = 1;
|
271 | D2 = 1;
|
272 | E2 = 1;
|
273 | F2 = 1;
|
274 | G2 = 1;
|
275 | }
|
276 | else if((Temperatur == 7)||(Temperatur == 17)||(Temperatur == 27)||(Temperatur == 37)||(Temperatur == 47))
|
277 | {
|
278 | A2 = 1; // 7 setzen
|
279 | B2 = 1;
|
280 | C2 = 1;
|
281 | D2 = 0;
|
282 | E2 = 0;
|
283 | F2 = 0;
|
284 | G2 = 0;
|
285 | }
|
286 | else if((Temperatur == 8)||(Temperatur == 18)||(Temperatur == 28)||(Temperatur == 38)||(Temperatur == 48))
|
287 | {
|
288 | A2 = 1; // 8 setzen
|
289 | B2 = 1;
|
290 | C2 = 1;
|
291 | D2 = 1;
|
292 | E2 = 1;
|
293 | F2 = 1;
|
294 | G2 = 1;
|
295 | }
|
296 | else if((Temperatur == 9)||(Temperatur == 19)||(Temperatur == 29)||(Temperatur == 39)||(Temperatur == 49))
|
297 | {
|
298 | A2 = 1; // 9 setzen
|
299 | B2 = 1;
|
300 | C2 = 1;
|
301 | D2 = 1;
|
302 | E2 = 0;
|
303 | F2 = 1;
|
304 | G2 = 1;
|
305 | }
|
306 | else
|
307 | {
|
308 | A2 = 0; // nichts setzen
|
309 | B2 = 0;
|
310 | C2 = 0;
|
311 | D2 = 0;
|
312 | E2 = 0;
|
313 | F2 = 0;
|
314 | G2 = 0;
|
315 | }
|
316 |
|
317 |
|
318 | // Bei ausserhalb des Temperaturbereiches
|
319 | if(Temperatur > 50)
|
320 | {
|
321 | A1 = 1; // E setzen
|
322 | B1 = 0;
|
323 | C1 = 0;
|
324 | D1 = 1;
|
325 | E1 = 1;
|
326 | F1 = 1;
|
327 | G1 = 1;
|
328 |
|
329 | A2 = 1; // E setzen
|
330 | B2 = 0;
|
331 | C2 = 0;
|
332 | D2 = 1;
|
333 | E2 = 1;
|
334 | F2 = 1;
|
335 | G2 = 1;
|
336 | }
|
337 | else if(Temperatur < 0)
|
338 | {
|
339 | A1 = 0; // - setzen
|
340 | B1 = 0;
|
341 | C1 = 0;
|
342 | D1 = 0;
|
343 | E1 = 0;
|
344 | F1 = 0;
|
345 | G1 = 1;
|
346 |
|
347 | A2 = 1; // E setzen
|
348 | B2 = 0;
|
349 | C2 = 0;
|
350 | D2 = 1;
|
351 | E2 = 1;
|
352 | F2 = 1;
|
353 | G2 = 1;
|
354 | }
|
355 | else;
|
356 |
|
357 | /*
|
358 | * Ausgabe an die LCD-Anzeige
|
359 | */
|
360 | if(Invertierer == 0)
|
361 | {
|
362 | PORTAbits.RA1 = 0;
|
363 |
|
364 | PORTBbits.RB0 = D1;
|
365 | PORTBbits.RB1 = C1;
|
366 | PORTBbits.RB2 = B1;
|
367 | PORTBbits.RB3 = A1;
|
368 | PORTBbits.RB4 = F1;
|
369 | PORTBbits.RB5 = E1;
|
370 | PORTBbits.RB6 = DP1;
|
371 | PORTBbits.RB7 = G1;
|
372 |
|
373 | PORTCbits.RC0 = D2;
|
374 | PORTCbits.RC1 = C2;
|
375 | PORTCbits.RC2 = B2;
|
376 | PORTCbits.RC3 = A2;
|
377 | PORTCbits.RC4 = F2;
|
378 | PORTCbits.RC5 = E2;
|
379 | PORTCbits.RC6 = DP2;
|
380 | PORTCbits.RC7 = G2;
|
381 |
|
382 | Invertierer = 1;
|
383 | }
|
384 | //invertieren für LCD Display
|
385 | else
|
386 | {
|
387 | PORTAbits.RA1 = 1;
|
388 |
|
389 | PORTBbits.RB0 = 1 - D1;
|
390 | PORTBbits.RB1 = 1 - C1;
|
391 | PORTBbits.RB2 = 1 - B1;
|
392 | PORTBbits.RB3 = 1 - A1;
|
393 | PORTBbits.RB4 = 1 - F1;
|
394 | PORTBbits.RB5 = 1 - E1;
|
395 | PORTBbits.RB6 = 1 - DP1;
|
396 | PORTBbits.RB7 = 1 - G1;
|
397 |
|
398 | PORTCbits.RC0 = 1 - D2;
|
399 | PORTCbits.RC1 = 1 - C2;
|
400 | PORTCbits.RC2 = 1 - B2;
|
401 | PORTCbits.RC3 = 1 - A2;
|
402 | PORTCbits.RC4 = 1 - F2;
|
403 | PORTCbits.RC5 = 1 - E2;
|
404 | PORTCbits.RC6 = 1 - DP2;
|
405 | PORTCbits.RC7 = 1 - G2;
|
406 |
|
407 | Invertierer = 0;
|
408 | }
|
409 |
|
410 |
|
411 | __delay_ms(10); // Wartezeit von 10ms
|
412 | }
|
413 | return (EXIT_SUCCESS);
|
414 | }
|