ilacmano
Newbie level 6
I'm newbie in Bascom Avr and need help for SPI read MCP3304 13-bit 8 single channel. I am writes code and don't receiving value in volts which read by digital voltmeter as sample read 4.844V by digital voltmeter read 4.999V.
Where is my error code.
BascomAvr Code:
Where is my error code.
BascomAvr Code:
Code Basic4GL - [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 69 70 71 72 73 74 75 76 Dim Vtxt As String * 6 Dim I As Byte ' MCP3304 channel address A_mcp3304 = &B11000000 'CH0 'Port B was convenient for me to use so I tried the Software SPI. 'MCP3304 Din --> MOSI, Dout --> MISO, SCK --> CLK, /CS --> PBO ' Software SPI Config Spi = Soft , Din = Pinb.5 , Dout = Portb.6 , Ss = Portb.0 , Clock = Portb.7 Config Portb.0 = Output ' PORTB.0/4 SPI Control pin Config Portb.5 = Input ' PORTB.5 Din MOSI Config Portb.6 = Output ' PORTB.6 Dout MISO Config Portb.7 = Output ' PORTB.7 CLK SCK Cs Alias Portb.0 ' SS Clk Alias Portb.7 ' CLK / SCK Din Alias Portb.5 ' Din / MOSI Dout Alias Portb.6 ' Dout / MISO 'Initalize SPI Spiinit Set Cs ' CS = 1 Waitms 100 Reset Cs ' CS = 0 Waitms 100 Setfont Font6x8 Cls Lcdat 1 , 1 , "MCP3304 13-Bit ADC" Lcdat 2 , 1 , "==================" Do For I = 1 To 8 W_mcp3304 = 0 Vout = 0 Select Case I Case 1 : A_mcp3304 = &B11000000 'CH0 Case 2 : A_mcp3304 = &B11001000 'CH1 Case 3 : A_mcp3304 = &B11010000 'CH2 Case 4 : A_mcp3304 = &B11011000 'CH3 Case 5 : A_mcp3304 = &B11100000 'CH4 Case 6 : A_mcp3304 = &B11101000 'CH5 Case 7 : A_mcp3304 = &B11110000 'CH6 Case 8 : A_mcp3304 = &B11111000 'CH7 End Select Reset Cs ' CS = 0 Reset Clk ' CLK = 0 Shiftout Dout , Clk , A_mcp3304 , 0 , 5 ' Bring cs low to start talking to device Spiin C(1) , 2 Set Cs ' CS = 1 Set Clk ' CLK = 0 W_mcp3304 = C(1) Shift W_mcp3304 , Left , 8 Shift C(2) , Right , 5 ' Read ADC value W_mcp3304 = W_mcp3304 + C(2) Lcdat 3 , 1 , "A_MCP:" ; Bin(a_mcp3304) ; " " Lcdat 4 , 1 , "W_MCP3304: " ; W_mcp3304 ; " " 'Convert ADC value to Volts Vout = W_mcp3304 * 6.0 ' !!! 5V Vref if you use other change this to the volt x.xxxx Vout = Vout / 8192 Vtxt = Fusing(vout , "#.###") Lcdat 6 , 1 , "Vout: " ; Vtxt ; " V Ch:" ; I ; " " Waitms 1000 Next I Loop End 'end program $include "Font6x8.font"
Last edited by a moderator: