Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

help me to know the pin used in pic16f877a microcontroller

Status
Not open for further replies.

Bijesh Kawan

Newbie level 5
Joined
Feb 26, 2015
Messages
8
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
103
can you guys help me which analog pins are used for analog reading for the voltage,current,speed,temperature. and for respective relay driveres

Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include<pic.h>
#define ent1 T1CON=T1CON|0b00000111 #define dist1 T1CON=T1CON&0b00000110
#define load RB3 #define motor RB0 #define heater RB2 #define pump RB1
//enable timer1 //disable timer1
int convert[16]='0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F';
unsigned int x,temp,adc_value,countdata,digit1,digit2,digit3,digit4,digit5,voltage,current,tem perature,level,speed;
void timer_config(); void timer_read();
void control();
void hextobcd();
void acd_config();
void adc_data_accure(); void acd_read(int);
void delay(int);
void main()
{
TRISA=0xFF; // PORTA is input TRISC=0xFF; // PORTC is input TRISD=0x00; // PORTD is input TRISB=0x00; // PORTB is output
18
PORTB=0X00;
TXSTA=0b00100100; RCSTA=0b10010000; SPBRG=25;
voltage=0; current=0; temperature=0; level=0; speed=0; load=0; motor=0; heater=0; pump=0;
acd_config(); timer_config();
delay(50);
while(1)
{
voltage=0; current=0; temperature=0; level=0; speed=0;
TMR1L=0x00; TMR1H=0x00;
ent1;
for(x=0;x<=100;x++) {
if (RCIF==1)
{
control();
//configure serial port //configure serial port
//Clear timer1 //Clear timer1
//enable timer 1
19
} delay(50); }
dist1; //disable timer 1
speed=TMR0;
timer_read(); speed=(temp*12); for(temp=1;temp<=30;temp++) {
acd_read(0); temperature=adc_value+temperature;
acd_read(1); level=adc_value+level;
acd_read(2); current=adc_value+current;
acd_read(4); voltage=adc_value+voltage; delay(1);
}
voltage=(voltage/30); current=(current/30); temperature=(temperature/30); level=(level/30);
TXREG='F'; delay(100);
temp=voltage; hextobcd(); TXREG=convert[digit3]; delay(100); TXREG=convert[digit4]; delay(100); TXREG=convert[digit5]; delay(100);
20
temp=current; hextobcd();
TXREG=convert[digit3]; delay(100); TXREG=convert[digit4]; delay(100); TXREG=convert[digit5]; delay(100);
temp=temperature; hextobcd();
TXREG=convert[digit3]; delay(100); TXREG=convert[digit4]; delay(100); TXREG=convert[digit5]; delay(100);
temp=level; hextobcd();
TXREG=convert[digit2]; delay(100); TXREG=convert[digit3]; delay(100); TXREG=convert[digit4]; delay(100); TXREG=convert[digit5]; delay(100);
temp=speed;
hextobcd(); TXREG=convert[digit2]; delay(100); TXREG=convert[digit3]; delay(100); TXREG=convert[digit4]; delay(100);
21
TXREG=convert[digit5]; delay(100);
} }
void control() { temp=RCREG;
if(temp=='1') {
load=1;
}
else if(temp=='2') {
load=0;
}
else if(temp=='3') {
motor=1;
}
else if(temp=='4') {
motor=0;
}
else if(temp=='5') {
heater=1;
}
else if(temp=='6') {
heater=0;
}
22
else if(temp=='7') {
pump=1;
}
else if(temp=='8') {
pump=0;
}
else
{ delay(10); }
if(OERR==1) {
SREN=0; temp=RCREG; temp=RCREG; CREN=0; CREN=1; SREN=1;
} delay(100); }
//////////////////////////////////////////////////////////////////////////////////////////
void timer_config()
{
T1CON=T1CON|0b00000110; //configure timer 1 as counter to count frequency //OPTION_REG=0b0010000; //configure timer 0 as counter to count frequency }
//////////////////////////////////////////////////////////////////////////////////////////
void timer_read()
{
temp=TMR1L;
temp+=(TMR1H<<8);
}
//collect TMR1L value
//collect TMR1H value and add with TMR1L value
23
////////////////////////////////////////////////////////////////////////////////////////// void hextobcd()
{
countdata=temp;
countdata=(countdata/10000); digit1=countdata; countdata=(countdata*10000); temp=(temp-countdata);
countdata=temp; countdata=(countdata/1000); digit2=countdata; countdata=(countdata*1000); temp=(temp-countdata);
countdata=temp; countdata=(countdata/100); digit3=countdata; countdata=(countdata*100); temp=(temp-countdata); countdata=temp; countdata=(countdata/10); digit4=countdata; countdata=(countdata*10); temp=(temp-countdata);
digit5=temp; }
////////////////////////////////////////////////////////////////////////////////////////// void acd_config()
{
ADCON1=0b10000001; ADCON0=0b01000001; delay(1);
}
////////////////////////////////////////////////////////////////////////////////////////// void acd_read(int channel)
24
{
if (channel==0)
{ ADCON0=0b01000001; adc_data_accure();
}
else if (channel==1)
{
ADCON0=0b01001001;
adc_data_accure();
}
else if (channel==2)
{
ADCON0=0b01010001;
adc_data_accure();
}
else if (channel==3)
{
ADCON0=0b01011001;
adc_data_accure();
}
else if (channel==4)
{
ADCON0=0b01100001;
adc_data_accure();
}
else if (channel==5)
{
ADCON0=0b01101001;
adc_data_accure();
}
else
{
}
} //////////////////////////////////////////////////////////////////////////////////////////
void adc_data_accure() {
25
delay(1);
ADCON0=ADCON0|0b00000100;
delay(1);
adc_value=ADRESL; //collect ADRESL value adc_value+=(ADRESH<<8); //collect ADRESH value and add with ADRESL value
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
void delay(int time) {
int i,j; for(j=1;j<=time;j++) {
for(i=0;i<=64;i++) {
}
}
}

 
Last edited by a moderator:

Any ANx pins can be used for reading analog values. For speed CCP1, T0CKI, T1CKI, INTx pins can be used.
 

thanks for reply.but I am asking which pin has been used in this c code for sensors used in this
 

Thanks and am i right the pins used for relay driver is RB0,RB1,RB2,RB3...and also tell me that which other pins has been used in this code for this project
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top