1 |
#include <pic18.h> |
#include <pic18.h> |
2 |
#include <stdio.h> |
#include <stdio.h> |
3 |
#include <string.h> |
#include <string.h> |
|
|
|
4 |
#include "lcd.h" |
#include "lcd.h" |
5 |
|
// Delay.h is included inside lcd.c |
6 |
|
|
7 |
|
#define LCD_LENGTH 16 |
8 |
|
#define LCD_ROWS 2 |
9 |
|
|
10 |
|
|
11 |
|
unsigned char global_Pot_Hi; |
12 |
|
unsigned char global_Pot_Lo; |
13 |
|
unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH]; |
14 |
|
/*void AD_init(void) |
15 |
|
{ |
16 |
|
ADON = 1; |
17 |
|
} |
18 |
|
*/ |
19 |
|
// Nicked from H7 |
20 |
|
void ad_init(void) |
21 |
|
{ |
22 |
|
// AD Conversion clock |
23 |
|
ADCS0 = 0; |
24 |
|
ADCS1 = 0; |
25 |
|
ADCS2 = 0; |
26 |
|
|
27 |
|
//Select AN0/RA0 for AD source |
28 |
|
// In this (000) setup, it's only RA0/AN0 that does ad convertion. |
29 |
|
CHS0=0; |
30 |
|
CHS1=0; |
31 |
|
CHS2=0; |
32 |
|
|
33 |
|
//Only AN0 is selected for AD and with Vdd/Vss as limits |
34 |
|
PCFG0=0; |
35 |
|
PCFG1=1; |
36 |
|
PCFG2=1; |
37 |
|
PCFG3=1; |
38 |
|
|
39 |
|
//Result is left justified |
40 |
|
ADFM=0; |
41 |
|
|
42 |
|
//Fire up for A/D converter module |
43 |
|
ADON=1; |
44 |
|
} |
45 |
|
|
46 |
void rs232_init(void) |
void rs232_init(void) |
47 |
{ |
{ |
48 |
SPEN = 0; // Serial Port Enable Bit... 0 = disabled |
SPEN = 0; // Serial Port Enable Bit... 0 = disabled |
49 |
TRISC6 = 0; |
TRISC6 = 0; |
50 |
TRISC7 = 1; |
TRISC7 = 1; |
51 |
SYNC = 0; // SYNC switches between async(0) and sync(1) mode. |
SYNC = 0; // SYNC switches between async(0) and sync(1) mode. |
52 |
SPBRG = 25; |
SPBRG = 25; |
53 |
TXSTA = 0x24; |
TXSTA = 0x24; |
54 |
RCSTA = 0x90; |
RCSTA = 0x90; |
65 |
|
|
66 |
void pic18_io_init(void) |
void pic18_io_init(void) |
67 |
{ |
{ |
68 |
TRISA0 = 1; |
TRISA0 = 1; // analog input |
69 |
TRISB1 = 1; |
TRISB1 = 1; // TRISB1-4 Digital input |
70 |
TRISB2 = 1; |
TRISB2 = 1; |
71 |
TRISB3 = 1; |
TRISB3 = 1; |
72 |
TRISB4 = 1; |
TRISB4 = 1; |
78 |
} |
} |
79 |
|
|
80 |
void interrupt interrupt_handler(void) |
void interrupt interrupt_handler(void) |
|
// Finds out what interrupt have been trigged, and starts the respective function. |
|
81 |
{ |
{ |
82 |
|
// Finds out what interrupt have been trigged, and starts the respective function. |
83 |
if(RCIF == 1) |
if(RCIF == 1) |
84 |
{ |
{ |
85 |
interrupt_recieve_handler(); |
interrupt_recieve_handler(); |
86 |
RCIF = 0; |
RCIF = 0; |
87 |
} |
} |
88 |
} |
} |
89 |
|
|
90 |
|
void update_lcd(void) |
91 |
|
{ |
92 |
|
char toLCD0[LCD_LENGTH], toLCD1[LCD_LENGTH]; |
93 |
|
char B1[LCD_LENGTH]; |
94 |
|
char sprintF[LCD_LENGTH]; |
95 |
|
lcd_goto(0x00); |
96 |
|
sprintf(toLCD0, "%s", "Ejdesgaard"); |
97 |
|
if(RB1) |
98 |
|
{ |
99 |
|
sprintf(B1, "Pwr%s", "True"); |
100 |
|
} |
101 |
|
else |
102 |
|
{ |
103 |
|
sprintf(B1, "%s", "False"); |
104 |
|
} |
105 |
|
lcd_puts(B1); |
106 |
|
|
107 |
|
lcd_goto(0x40); |
108 |
|
sprintf(sprintF,"%08d%08d", global_Pot_Hi, global_Pot_Lo); |
109 |
|
lcd_puts(sprintF); |
110 |
|
|
111 |
|
} |
112 |
|
|
113 |
void main() |
void main() |
114 |
{ |
{ |
115 |
|
///////////////////////////////////////////// |
116 |
|
// Running Init's |
117 |
|
|
118 |
|
// Running init for various components. |
119 |
|
//AD_init(); |
120 |
|
ad_init(); |
121 |
rs232_init(); |
rs232_init(); |
122 |
pic18_io_init(); |
pic18_io_init(); |
123 |
|
lcd_init(0); |
124 |
|
|
125 |
|
///////////////////////////////////////////// |
126 |
|
// Main loop |
127 |
|
|
128 |
|
while(1) |
129 |
|
{ |
130 |
|
// Checking if A/D convertion is done, and save the data in global_Pot_?? |
131 |
|
if(GODONE==0) |
132 |
|
{ |
133 |
|
global_Pot_Hi = ADRESH; |
134 |
|
global_Pot_Lo = ADRESL; |
135 |
|
GODONE = 1; |
136 |
|
} |
137 |
|
|
138 |
|
update_lcd(); |
139 |
|
} |
140 |
} |
} |