We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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); } }
Hi all,
Thanx SPI protocol is working fine .,
Rajesh