Quantcast
Channel: Forums - Recent Threads
Viewing all articles
Browse latest Browse all 262198

ADS7953: Setup and Data read command Sequence for Arduino.

$
0
0

Part Number:ADS7953

This is the code i am using for setting the ADS7953 in Auto mode and then reading all the channels sequentially. I referred the similar threads for ads7953 and then developed this code. 
I think the programming sequence is correct but i am not getting any response from the device. i dont have a logic analyzer with me. Attaching a schematics for my design.

What could be possibly wrong with my setup ? 

If i want to test just a single channel can i just write

int data_high = spi.transfer(0x18);
int data_low = spi.transfer(0x80);

?


i just need a very basic command sequence to check whether the hardware setup is proper or not. I can take care of the improper data later , i just need to get some response from ads7953.
 



#include <SPI.h> SPIClass * vspi = NULL; SPIClass * hspi = NULL; auto ADC_CLK = 1000000; int reset_cmd = 0x4200; int auto_mode_1 = 0x8000; int select_all_channels = 0xFFFF; int reset_counter = 0x2C00; const int PIN_NUM_MISO = 12; const int PIN_NUM_MOSI = 14; const int PIN_NUM_CLK = 27; const int PIN_NUM_CS = 13; const int ENC_CS = 26; const int SD_CS = 5; //unsigned int adc_data; float ch[16]; void setup() { // put your setup code here, to run once: // init_spi(); Serial.begin(115200); pinMode(ENC_CS, OUTPUT); pinMode(SD_CS, OUTPUT); digitalWrite(ENC_CS, HIGH); digitalWrite(SD_CS, HIGH); pinMode(MCP1, OUTPUT); vspi = new SPIClass(VSPI); vspi->begin(PIN_NUM_CLK, PIN_NUM_MISO, PIN_NUM_MOSI, PIN_NUM_CS); delay(1000); ads7953_setup(); Serial.println("Setup complete"); } void loop() { ads7953_readData(); delay(3000); } void ads7953_setup() { digitalWrite(MCP1, HIGH); delay(5); /* Reset Command */ vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); vspi->transfer(reset_cmd >> 8); vspi->transfer(reset_cmd & 0xFF); digitalWrite(MCP1, HIGH); vspi->endTransaction(); delay(100); /* Select Auto mode 1 */ vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); vspi->transfer(auto_mode_1 >> 8); vspi->transfer(auto_mode_1 & 0xFF); digitalWrite(MCP1, HIGH); vspi->endTransaction(); delay(100); /* Select All channels */ vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); vspi->transfer(select_all_channels >> 8); vspi->transfer(select_all_channels & 0xFF); digitalWrite(MCP1, HIGH); vspi->endTransaction(); delay(100); /* Reset Counter to channel 1 */ vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); vspi->transfer(reset_counter >> 8); vspi->transfer(reset_counter & 0xFF); digitalWrite(MCP1, HIGH); vspi->endTransaction(); delay(100); /* Read First Null Frame */ vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); int proxydata = vspi->transfer(0); proxydata = vspi->transfer(0); digitalWrite(MCP1, HIGH); vspi->endTransaction(); delay(100); } void ads7953_readData() { for (int i = 0 ; i < 16 ; i++) { vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); int adc_data = vspi->transfer16(0x1880); digitalWrite(MCP1, HIGH); vspi->endTransaction(); Serial.print("SPI Data received : "); Serial.println(adc_data ); delay(10); vspi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0)); digitalWrite(MCP1, LOW); adc_data = vspi->transfer16(0); digitalWrite(MCP1, HIGH); vspi->endTransaction(); Serial.print("SPI Data received : "); Serial.println(adc_data ); delay(1000); Serial.println(adc_data, HEX); int channel = adc_data >> 12; int adc_v = adc_data & 0xFFF; ch[channel] = (adc_v * VREF) / 4095.0 ; Serial.print("Channel : "); Serial.print(channel); Serial.print("\t "); Serial.print(ch[channel]); Serial.println(" mV"); } }


Viewing all articles
Browse latest Browse all 262198

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>