Reading and writing to ADS112c04 (24 bit ADC) with Arduino and MATLAB
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello all, (sorry for the long post, I want to provide as much context as possible)
I have been working with a 16 bit ADC (ADS1115) using MATLAB and its plugin for Arduino but I am looking to upgrade to a 24 bit ADC (ADS112c04). I have attached both datasheets as a reference. Programming the ADS1115 is pretty straight forward (referencing page 27 from the ADS1115 datasheet). There are four registers, each with their own address. I am ignoring registers 2 (10) and 3 (11) and leaving them at their default values
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646450/image.png)
Using the I2C protocol I write the appropriate configuration number into the config register and I read data out of the conversion register.
ard = arduino('com3','uno','Libraries','I2C');
ADC = i2cdev(ard,'0x48');
writeRegister(ADC,1,50307,'uint16');
pause(0.05);
data=double(readRegister(ADC,0,'uint16'))*62.5e-6;
Above is the code I used to communicate with the ADS1115. The code makes use of the already defined I2C library included and is pretty short.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646455/image.png)
I want to upgrade to a better ADC and ran into a few questions when I was reading the datasheet for ADS122 (going to drop the c04 from the name for simplicity). I am referencing page 41 in the ADS122 datasheet. Similar to the ADS1115, the ADS122 has a 4 configuration registers. I initially assumed writing these registers would be exactly the same as the ADS1115, I can use the writeRegister command, and write the appropriate 8 bit number. However, I dont think that's the case?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646460/image.png)
Page 38 lists some preprogrammed commands which can be sent to the ADS122. The datasheet suggests writing to the config registers using the WREG command.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646465/image.png)
Page 39 further elaborates on the WREG command. This is where my confusion lies. In the ADS1115 example, when I called the writeRegister command, I had a register address to write to ( writeRegister(ADC,1,50307,'uint16') the second argument). However, when I am tasked with calling the WREG command, I need to write (0100 rrxx #### ####) somewhere, but where?
Also, in the ADS1115 example, I was sending a single 16bit word at a time using the writeRegister command. Now I am tasked with sending two 8bit words, how would go about doing that?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/646470/image.png)
My last set of questions lie in reading the measured data using the RDATA command. Once again, where would I write the RDATA command? Once the new measurment is loaded into the output register, what is it's address as well when i try and call the readRegister command?
Thanks for any and all help
Happy to provide more context
0 comentarios
Respuestas (0)
Ver también
Categorías
Más información sobre MATLAB Support Package for Arduino Hardware en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!