- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am attempting to use the SPI master module to interface the MCP3901. The first thing I am doing is setting up the registers to the configuration I want. Then I will attempt to read.
I am using a pin on the PSoC to generate the clock. The device is not responding, a sign the configuration did not take. The sign of successful configuration I am looking for is activity on the data ready and MISO pins when invoking a read. I am receiving none.
My C code, the SPI object, and the MCP3901 are not squaring up. Given the address automatically increments upon a write, I assumed you can just write the values 8 bits at a time using the SPI master. Can any of you tell where I am mixed up? What about reading 24 bits properly?
Attached are the header and C files I am writing.
- Labels:
-
PSoC 5LP
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It will be easier to assist you if you could post the entire project
File, Export Project Bundle, Minimum(Basic)
SPI can be a bit od an issue, do you have access to a logic ananlyser?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
A pretty low cost logic analyzer -
Just search ebay for "Saleae logic" for other suppliers.
I bought 2, work great.
Regards, Dana.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I got the converter to work with the help of a logic analyzer. I forgot I had one (it was packed away from a recent move).
Now I am confused by a few things:
1. The converter spits out a 24 bit signed integer. How should I read this properly in C? I am attempting this with a union and three bytes. I may have it right but I am also confused by equation 5.3.
2. Equation 5-3 is how a voltage count corresponds to a voltage read.
http://ww1.microchip.com/downloads/en/DeviceDoc/22192d.pdf
The conversion formula I use is Voltage = (ACD_Count * Ref_Voltage) / (2^Resolution). The variables may be rearragned in the datasheet as I cannot conform if DATA_CHn is the count or the analog voltage. I am using the internal 2.37 volt reference. The in- terminals are grounded, so I am just running the converters single ended. So for this converter, based on that formula, with my setup, what is theproper method to determine the voltage level based on the count?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You can store the 3 bytes received from the SPI in a 32-bit integer. Then you get the sign bit (the 24th), mask out the upper 9 bits and set the sign properly.
To get the voltage, you just need to re-arrange the formula. Since Vref- and Vin- are 0 for you, formula 5-3 reads as
DATA=(Vin/Vref)*max_count*gain*3
so you re-arrange it as
Vin=(DATA*Vref)/(max_count*gain*3)