Discussion in "Project Help" started by    Pater    May 14, 2018.
Mon May 14 2018, 05:36 PM
#1
Basically my project is based on Data Acquisition system, so I want to acquire the data from various sensors in the PC.

For this i have used ADC0808 for converting Analog data to Digital data (8 bits), and these digital bits are given to any one port of micro-controller (89S52). The micro-controller then receives the bits and transmit it serially so that PC can receive the serial bits.

I have used "ADC0808 module with external clock" (By Silicon Technologies) :- attachment-1 &
"89S52 development board" (By Silicon Technologies) :- attachment-2

My code is as follows,
---------------------------------------------------------------------------------------------------------------------------
#include<reg51.h>

void delay_sec(unsigned int);
void delay_us(unsigned int);

void decimal();
void serial(char c);
unsigned char d1,d2,d3,d4;
void InitADC(void);
unsigned char ReadADC(unsigned char);

#define AN0 0
#define AN1 1
#define AN2 2
#define AN3 3

sbit Add_A = P2^0;
sbit Add_B = P2^1;
sbit Add_C = P2^2;
sbit ALE = P2^3;
sbit EOC = P2^4;
sbit OE = P2^5;
sbit START = P2^6;



#define Data_Bus P0
#define HalfCycleDelay 10 // usecs


void main()
{

unsigned char I;
InitADC();

while(1)
{
I= ReadADC(AN0);
}

}

void InitADC(void)
{
Add_A = 0;
Add_B = 0;
Add_C = 0;
ALE = 0;
EOC = 1;
OE = 0;
START = 0;

Data_Bus = 0xFF;
}

unsigned char ReadADC(unsigned char Channel)
{
unsigned int i = 0;
unsigned int ADC_value = 0;

/*Selecting analog Channel by providing respective
bits to A,B,C addresses*/
switch(Channel)
{
case AN0: Add_C = 0; Add_B = 0; Add_A = 0; break;

}

delay_us(HalfCycleDelay); // 250kHz Frequency
ALE = 1; // Enable Address Latch

delay_us(HalfCycleDelay); // 250kHz Frequency

START = 1; // Start ADC Conversion
delay_us(HalfCycleDelay); // 250kHz Frequency

ALE = 0; // Disable Address Latch
delay_us(HalfCycleDelay); // 250kHz Frequency

START = 0; // Complete the start pulse

for(i=0;i<2000;i++)
{

delay_us(HalfCycleDelay); // 250kHz Frequency
if(!EOC) // Wait for EOC to be low
break;
}

for(i=0;i<2000;i++)
{

delay_us(HalfCycleDelay); // 250kHz Frequency
if(EOC) // Wait for EOC to be High
break;
}


OE = 1; // Enable Output
delay_us(HalfCycleDelay); // 250kHz Frequency

delay_us(HalfCycleDelay); // 250kHz Frequency

delay_us(HalfCycleDelay); // 250kHz Frequency


ADC_value = Data_Bus; // Read value

decimal();
serial(d1+0x30);
serial(d4+0x30);
serial(d3+0x30);

delay_sec(1);

delay_us(HalfCycleDelay); // 250kHz Frequency
OE = 0; // Disable Output

delay_us(HalfCycleDelay); // 250kHz Frequency
return ADC_value; // Return ADC value
}


void decimal()
{

d1 = Data_Bus /100;
d2 = Data_Bus %100;
d3 = d2 %10;
d4 = d2/10;

}


void serial(char c)
{

TMOD = 0X20;
TH1 = 0XFD;
SCON = 0X50;
TR1 = 1;
SBUF = c;
while(TI==0);
TI = 0;

}

// Function for approximate delay in Secs.
void delay_sec(unsigned int d)
{
unsigned int i;
for(i=0;i<(d*20);i++)
delay_us(50000);
}

// Function for approximate delay in given uSecs.
void delay_us(unsigned int d)
{
unsigned int i, limit;
limit = d/15;
for(i=0;i<limit;i++);
}

----------------------------------------------------------------------------------------------------------------

So the main problem is that I am not getting Analog to Digital conversion on the port of micro-controller and also no data in the PC (Used hyper-terminal for getting serial data) & if getting, am getting any random data in the PC.

I have made all connections as per the code but it is not working.

So please help in this regard and give suitable solution regarding Hardware part or the Programming part.

Mon May 14 2018, 10:17 PM
#2


So the main problem is that I am not getting Analog to Digital conversion on the port of micro-controller and also no data in the PC (Used hyper-terminal for getting serial data) & if getting, am getting any random data in the PC.

Pater



You code works okay on Proteus.
Random values looks like wiring or power problems.

Where do you get your test input voltage ?

What happens if you connect ADC0809 IN0 directly to ground ?
What happens if you connect ADC0809 IN0 directly to +5volts ?


[ Edited Mon May 14 2018, 10:19 PM ]

Get Social

Information

Powered by e107 Forum System

Conversation

ExperimenterUK
Fri Mar 15 2019, 02:14 AM
We don't send code,but you can ask for help in the 8051 forum
Thu Mar 14 2019, 04:30 PM
Jui Sanjay Kapare
Hello sir, I want code of interfacing DS18B20 with 8051.plz send the code as early as possible
ExperimenterUK
Mon Jan 07 2019, 09:01 AM
@REVOCATUS please post in the AVR forum
Mon Dec 24 2018, 02:55 PM
REVOCATUS MATEMU
sorry I mean referee boards for player substitution
Mon Dec 24 2018, 02:54 PM
REVOCATUS MATEMU
hi am.looking how to build referee by using Atmega 328 and its codes
Sat Dec 15 2018, 07:15 PM
Arslan ayoub
Hii ,, can I get the simulation of numeric keypad lock on proteus
ExperimenterUK
Mon Dec 03 2018, 10:47 PM
Please post questions in the forum. The chat box is for chat
Mon Dec 03 2018, 12:13 PM
help!me!
help! I don't understand busy flag!
Mon Dec 03 2018, 01:31 AM
ile
hello
Mon Nov 12 2018, 11:28 AM
Pavan_user
i have seen your replica of I2C programming using AT89C51 but i am unable to understand the "ack_bit" variable usage ...looks like it is always 1...can you elaborate how acknowledgment is working....

Downloads

Comments

tutu10
Tue Mar 12 2019, 07:11 AM
Raj243
Fri Mar 08 2019, 02:08 AM
bharatsb
Thu Mar 07 2019, 04:34 PM
Yass7
Thu Mar 07 2019, 03:55 PM
mashabed
Mon Mar 04 2019, 11:08 PM
AccelMotion
Tue Feb 26 2019, 06:06 PM
turbovps
Mon Feb 25 2019, 06:26 AM
the_Doker
Thu Feb 14 2019, 02:21 PM

Online

Guests: 33, Members: 0 ...

most ever online: 182184
(Members: , Guests: 182184) on 06 Aug 2010: 05:37 AM

Members: 38052
Newest member: tutu10
Forum Activity
ExperimenterUK Avatar
Posted By ExperimenterUK
Sun Mar 24 2019, 09:52 PM
Counting pulses can be as simple asvoid interrupt ...
Ansh12 Avatar
Posted By Ansh12
Sat Mar 23 2019, 05:08 PM
Using the external interrupt on pin B0 is the best...
ExperimenterUK Avatar
Posted By ExperimenterUK
Fri Mar 22 2019, 09:10 PM
Using the external interrupt on pin B0 is the best...
Ansh12 Avatar
Posted By Ansh12
Fri Mar 22 2019, 03:45 PM
I have pic16f877a and MPLABX8 and I want to count ...
ExperimenterUK Avatar
Posted By ExperimenterUK
Wed Mar 13 2019, 02:32 AM
HiI looked at" Atmel AVR042: AVR Design Considera...
tutu10 Avatar
Posted By tutu10
Tue Mar 12 2019, 07:13 AM
Hi...My firmware upgradable code lock seems to be ...
Yass7 Avatar
Posted By Yass7
Sat Mar 09 2019, 12:52 AM
It's exactly that ! it's my teacher who asked me t...
ExperimenterUK Avatar
Posted By ExperimenterUK
Sat Mar 09 2019, 12:27 AM
As I understand it, you want to use a P89LPC952 /...
ExperimenterUK Avatar
Posted By ExperimenterUK
Sat Mar 09 2019, 12:21 AM
After you get the string what do you want to do wi...
bharatsb Avatar
Posted By bharatsb
Thu Mar 07 2019, 04:40 PM
help me to write code for 8051 to receive string ...