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.

Serial clock problem in pic16f877a while interfacing with ads1231

Status
Not open for further replies.

anboli

Full Member level 2
Joined
Mar 9, 2012
Messages
144
Helped
4
Reputation
8
Reaction score
4
Trophy points
1,298
Activity points
2,512
Hi to all,
Im calibrating the load cell with help of ADS1231 24-bit resolution, it interfacing with spi communication. The load cell signals are given to the ADS1231( pin no 7 and 8 ), If the conversioin is ready means, the DRDY pin goes high, and fall down, by the way we can detect the conversion is ready, but my problem is, when the conversion is ready i cant get the 24bit data, i generating the serial clock.

While im seeing in the CRO, the pulse is not generating properly. Please give any suggestion to gnerate the signal properly.

Code:
#include <16F877A.h>

#device *= 16 

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES CPD					    //No EEPROM Code Protection
#FUSES NOBROWNOUT               //No brownout reset

#FUSES NOLVP					//RB3 as digital IO
#FUSES NODEBUG
#FUSES HS

#use delay( crystal = 16MHz )
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)

#byte TRISA	= 0x85
#byte TRISB	= 0x86
#byte TRISC	= 0x87
#byte TRISD	= 0x88
#byte TRISE	= 0x89


#BYTE PORTA	= 0x05
#BYTE PORTB	= 0x06
#BYTE PORTC	= 0x07
#BYTE PORTD	= 0x08
#BYTE PORTE	= 0x09

#bit RA0	= 0X05.0
#BIT RA1	= 0X05.1
#BIT RA2	= 0X05.2
#BIT RA3	= 0X05.3
#BIT RA4	= 0X05.4
#BIT RA5	= 0X05.5

#BIT RB0	= 0X06.0
#BIT RB1	= 0X06.1
#BIT RB2	= 0X06.2
#BIT RB3	= 0X06.3
#BIT RB4	= 0X06.4
#BIT RB5	= 0X06.5
#BIT RB6	= 0X06.6
#BIT RB7	= 0X06.7

#BIT RC0	= 0X07.0
#BIT RC1	= 0X07.1
#BIT RC2	= 0X07.2
#BIT RC3	= 0X07.3
#BIT RC4	= 0X07.4
#BIT RC5	= 0X07.5
#BIT RC6	= 0X07.6
#BIT RC7	= 0X07.7

#BIT RD0	= 0X08.0
#BIT RD1	= 0X08.1
#BIT RD2	= 0X08.2
#BIT RD3	= 0X08.3
#BIT RD4	= 0X08.4
#BIT RD5	= 0X08.5
#BIT RD6	= 0X08.6
#BIT RD7	= 0X08.7

#BIT RE0	= 0X09.0
#BIT RE1	= 0X09.1
#BIT RE2	= 0X09.2

#byte TXSTA = 0x98
#byte RCSTA = 0x18
#byte TXREG = 0x19
#byte SPBRG = 0x99

#bit TRMT = 0x98.1

#define SPEED	RB0
#define PWDN	RB1
#define SCLK	RB2

#define DRDYDOUT input(PIN_C4)

#define HIGH	1
#define LOW 	0

#define CONVERSION_READY 	1
#define NORMAL_SPEED		0


#define ENABLED		1
#define DISABLED	0

			

void IO_Initiallisation()
{
		TRISA	= 0x00;
	TRISB	= 0x00;
	TRISC	= 0x10;
	TRISD	= 0x00;
	TRISE	= 0x00;
	
	PORTA	= 0x00;
	PORTB	= 0x00;
	PORTC	= 0x00;
	PORTD	= 0x00;
	PORTE	= 0x00;

}

//*************** Output Pins Reset ********************************************//
void Pin_Reset()
{
	SPEED	= 0;
	delay_ms(1);
	PWDN	= 0;
	delay_ms(1);
	SCLK	= 0;
	delay_ms(1);
	
	return;
}

void delay()
{
	unsigned int8 i =0;
	for(i=0;i<5;i++);
}

void main()
{
	unsigned int1 	ADC_CONVERSION_READY = 0,
					ADC_DATA_READY		 = 0;
	
	unsigned int8 DATA_OUT			 = 0;
					
	unsigned int32 	ADC_DATA_VALUE = 80001000;
	
	TXSTA = 0x24;
	RCSTA = 0x90;
	SPBRG = 103;
	IO_Initiallisation();											// Function is used to set input output configurations
    
    Pin_Reset();													// Making all the output pins as zero
    
    
    PWDN  = HIGH;
    delay_ms(2);
    
    SPEED = 0;
    delay_ms(2);
    
    SCLK  = LOW;
    
    TXREG = '*';
    while(!TRMT);
    
    printf( "\n fdsfds %Lu",ADC_DATA_VALUE );
    
    while( True )
    {
    	if( ( DRDYDOUT == 1 ) && ( ADC_CONVERSION_READY == DISABLED ) )
    	{
	    
		    	if( DRDYDOUT == 0 )
		    	{
	    		ADC_CONVERSION_READY = ENABLED;
		    	}
    	}
    	
    	if( ADC_CONVERSION_READY == ENABLED )
    	{	
	    	ADC_DATA_VALUE = 0;
	    	
	    	for( DATA_OUT = 0; DATA_OUT < 24; DATA_OUT++ )
    		{
	    		SCLK = HIGH;
			delay_cycles(10);
    		
   				if( DRDYDOUT == HIGH )
    			{
	    			ADC_DATA_VALUE = ( ADC_DATA_VALUE | 1 );
	    		}
	    		ADC_DATA_VALUE = ADC_DATA_VALUE << 1 ;
		    	
	    		SCLK = LOW;
    			delay_cycles(10);
    		}
    		
    		
    		ADC_CONVERSION_READY 	= DISABLED;
		    ADC_DATA_READY 			= ENABLED;
    	}
    	
    	
    	if( ADC_DATA_READY == ENABLED )
    	{
	   	    printf( "\n %Lu",ADC_DATA_VALUE );
	   	    	
	    	ADC_DATA_READY				= DISABLED;
    	}
    }
}
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top