Hi Frnds,
I am working on a SPI based ADC MCP3202, using Atmel 89C51ED2 micro controller..,I am facing problem in Implementation of protocol.
1. The ADC is of 12 bit ADC, but the problem is SPDAT is 8 bit data register and how can i acesses remaining 4 bits of data ???
Just to try I gave some data 0x00 on SPDAT register after acessesing 8 bit of data from adc in order to get remaining Data from ADC,
Is the methodlogy what i have used is right??? I am not able to get the ADC data!!! If there is any solution to the problem , plz guide me...
I am attaching the code with message.
#include <REG51xD2.H> #include<stdio.h> #include<stdlib.h> #include"display.h" sbit CS = P1^0; unsigned int call_adc(unsigned char Channel); unsigned int call_adc(unsigned char Ch) { unsigned int Data1,Data2; unsigned char Channel; CS=0; /* Chip Select for ADC Active State */ if(Ch==0) /* Channel Select */ Channel=0x0D; /* Channel -1 */ else Channel=0x0F; /* Channel -2 */ SPDAT=Channel; /* Channel i/p for SPI */ while(!(SPSTA&0x80)); Data1=SPDAT; /* Higher 8bit of ADC value */ SPSTA|=0x7F; /* Clear Trasmit Flag */ Data1=Data1<<8; SPDAT=0x00; while(!(SPSTA&0x80)); SPSTA|=0x7F; /* Clear Trasmit Flag */ Data2=SPDAT; /* Lower 8bit of ADC value */ Data1|=Data2; /* 12 Bit ADC Value */ CS=1; /* Chip Select for ADC off State*/ return (Data1>>4); /* 12 Bit ADC Data */ } void main() { unsigned int Adc_Data=0; static unsigned char Buffer[10]; SPCON |= 0x10; /* Master mode */ SPCON |= 0x82; /* Fclk Periph/128 */ SPCON &= ~0x08; /* CPOL=0; transmit mode example */ SPCON |= 0x04; /* CPHA=1; transmit mode example */ SPCON |= 0x40; /* run spi */ SPSTA |= 0x7F; /* Clear Trasmit Flag */ Initlcd(); while(1) { Adc_Data=call_adc(0); sprintf(Buffer,"%d",(unsigned int)Adc_Data); display(Buffer,0x80); } }