After studying this for a few nights, the fog is beginning to clear a bit, but not completely.
On the above mentioned inclinometer (sca61t, pages 11 &12), you send a command and then concurrently it sends back a reply with the data. I think I can see how to send the command, and extend the transmission to 19 clocks so that it can fit in the response by leaving CS low with the [var\19] in SEROUT. What I don't see how to grab those reply bits using SEROUT and SERIN. Each one would execute in order and not catch the response as both share the clock.
Code:
I VAR WORD
D VAR WORD
CS_I VAR PORTC.2 ' chip select Inclinomteter
CS_D VAR PORTC.3 ' chip select D/A
SCK VAR PORTC.5 ' clock
SDI VAR PORTC.4 ' data OUT
SDO VAR PORTC.7 ' data IN
IncIn var word
HIGH CS_I
HIGH CS_D
LOW SCK
I = %0001000000000000 'send RDAX & fill to get 11 bits of data
D = %0001111111111111 '2x, active, max output for test
'*** Inclinometer Commands ***********
'MEAS 00000000 'Measure (Exit self test)
'RWTR 00001000 'R/W Temp
'RDSR 00001010 'Read Status register
'RLOAD 00001011 'relaod NV to o/p
'STX 00001110 'activate self test
'RDAX 00010000 'read acceleration
Main:
GOSUB IncRdg
GOSUB DACout
goto main
'**** Subs *********************************
;---- Sub to read the inclinometer ------------------
IncRdg:
LOW CS_i ' enable writes to Inclinometer
SHIFTOUT SDI,SCK,0,[I\19] 'sends command to READ
' SHIFTIN SDO,SDK,0,[IncIn\11] ' I don't see this working
HIGH CS_I
PAUSE 5
RETURN
''---- Sub to output to the D/A converter -----
'DACout:
' LOW CS_D ' enable writes to D/A converter
' SHIFTOUT SDI,SCK,0,[D\16]
' HIGH CS_D
' PAUSE 5
' return
Will test further, but I suspect that I might have to resort to the hardware SPI.
Any thoughts?
Bo
Bookmarks