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); } }
most HW SPI is the same, try CodeArchitect, free from http://www.esacademy.com. It is for the LPCs, but save a possible difference in oscillator setup, it should work. I, fortunately, do not work with Atmel chips, but all I have seen (NXP, SILAbs etc) have been CodeArchitect compatible and required less than 15 minutes to make match.
Erik
Hi,
I have used SS (Slave Select) from outside and not through the registers SPCON, does it make any difference in operation???
Hi all,
Thanx SPI protocol is working fine .,
Rajesh