milan.rajik
Banned

How to read MCP3302 using SPI ?
I have to use CH0 of MCP3302 (single ended mode) Please algorithm or C code to read the adc value. It uses SPI. I am using PIC18F46K22. I will use Software SPI.
- - - Updated - - -
I have written this code but it is not working as expected.
Datasheet page no. 24 I have read.
I need MCP3302 single ended, CH0, 12 bit ADC value.
- - - Updated - - -
I wrote the code. It is working and it is giving correct values but I am getting this error continuously.
broken link removed
I have to use CH0 of MCP3302 (single ended mode) Please algorithm or C code to read the adc value. It uses SPI. I am using PIC18F46K22. I will use Software SPI.
- - - Updated - - -
I have written this code but it is not working as expected.
Datasheet page no. 24 I have read.
I need MCP3302 single ended, CH0, 12 bit ADC value.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 double MCP3302_Read() { char i = 0; unsigned int adcVal = 0, mask = 0x800; CS = 1; Delay_us(50); CS = 0; Delay_us(50); CLK = 1; Delay_us(50); CLK = 0; Delay_us(50); DOUT = 1; CLK = 1; Delay_us(50); CLK = 0; Delay_us(50); DOUT = 0; CLK = 1; Delay_us(50); CLK = 0; Delay_us(50); CLK = 1; Delay_us(50); CLK = 0; Delay_us(50); CLK = 1; Delay_us(50); CLK = 0; Delay_us(50); CLK = 1; Delay_us(50); CLK = 0; Delay_us(50); for(i = 0; i < 12; i++) { adcVal >>= 1; if(DIN) { adcVal = adcVal | mask; } CLK = 1; Delay_ms(2); CLK = 0; Delay_ms(2); } CS = 1; return (double)(adcVal & 0x0FFF); }
- - - Updated - - -
I wrote the code. It is working and it is giving correct values but I am getting this error continuously.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 double MCP3302_Read() { char i = 0; unsigned int adcVal = 0, mask = 0x800; CLK = 1; CS = 1; Delay_us(20); CS = 0; Delay_us(20); DOUT = 1; CLK = 0; Delay_us(20); CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); DOUT = 1; CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); DOUT = 0; CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); for(i = 0; i < 13; i++) { adcVal <<= 1; adcVal = adcVal | DIN; CLK = 1; Delay_us(20); CLK = 0; Delay_us(20); } CS = 1; return (double)(adcVal & 0x0FFF); }
broken link removed
Attachments
Last edited by a moderator: