|
|
- 14 bit registers
-
- extra bits at end are ignored
-
- data sheet for mxp4725 page 25 is good example
-
- you send something like
- 4 bytes
- first is address byte
- which is found via
- (defun scn ()
- (dotimes (p 127)
- (with-i2c (str p)
- (when str (print p)))))
- then
- run
- (scn)
- in ulisp
-
- three bytes will be as in page 25
-
- 8 bit bytes
-
- as in ulisp i2c page:
-
- //
- Writing to a slave
- For example, to write the three bytes 0, 1, and 2 to a slave device with address #x70 you would use:
-
- (with-i2c (str #x70)
- (write-byte 0 str)
- (write-byte 1 str)
- (write-byte 2 str))
-
- //
-
- so as a test
- i want to write
- 0b01000000
- first byte
- second byte will be
- 0-4096
- divided across
- two bytes with last 4 bits being blank
-
- so just play around.
- 0b11110000
- 0b11110000
- two bytes of that
-
- and see what outputs.
-
- can we output binary direct into i2c in ulisp? or do we need
- decimal?
-
- so basic test:
- (with-i2c (str #x96)
- (write-byte #b01000000 str)
- (write-byte #b11110000 str)
- (write-byte #b11110000 str))
- that doesn't work
- (with-i2c (str #x96)
- (write-byte 0b01000000 str)
- (write-byte 0b11110000 str)
- (write-byte 0b11110000 str))
- error: no room for long symbols
-
- in that case
- (with-i2c (str #x96)
- (write-byte 64 str)
- (write-byte 192 str)
- (write-byte 192 str))
-
- note: 192 == 11000000
-
- sorry
-
- needs to be in function
-
- (defun go ()
- (with-i2c (str #x96)
- (write-byte #x40 str)
- (write-byte #xc0 str)
- (write-byte #xc0 str)))
-
- still getting
- 256> (go)
-
- @⸮⸮
-
- nil
-
- doesnt' seem to send the bytes i want...
-
- EDIT: the address bit is
- decimal 96, not hex 96. got this in 5-10 minutes.
-
- ok
-
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte #xc0 str)
- (write-byte #xc0 str)))
-
- 256> (defun go2 () (with-i2c (str 96) (write-byte #x40 str) (write-byte #xc0 str) (write-byte #xc0 str)))
-
- go2
-
-
-
- 229> (go2)
-
- nil
-
- so, nil. no response from mcp, but
- now output is 4 volts. success.
-
- that's pretty much it for a test. now just to clarify the numbers I need to
- get 0-1V and also to get 1v on output when it starts up (via eeprom)
-
- let's play first.
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte #x00 str)
- (write-byte #xA0 str)))
-
- redefining functions, saves on memory
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte #x0F str)
- (write-byte #xF0 str)))
- about 500mV
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte #xFF str)
- (write-byte #xF0 str)))
- max at 5v
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte #xFF str)
- (write-byte #x00 str)))
- still max
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte #x4F str)
- (write-byte #x00 str)))
-
- 1.75V
-
- pretty much that last byte is useless. small amounts of resolution
- in this application
-
- so let's focus on byte 2
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte 200 str)
- (write-byte #x00 str)))
- 4volts
-
- I need a printout of hex to byte for 0-F on my wall...
- but instead, lets use decimal. easier here.
-
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x40 str)
- (write-byte 100 str)
- (write-byte #x00 str)))
- 2.05volts
-
- 1.05 volts for 50
- since 50 is roughly 1/5 of 255... 1/5 of VDD
-
- so i want my cpu load converted from whatever it is, to a number
- from 0-1, then take 0-1 of 48 or so.
-
- if you send this:
-
- (defun go2 () (with-i2c (str 96) (write-byte #x40 str) (write-byte 48 str) (write-byte #x00 str))) (go2)
- as one line, you can see it change instantly. (not using variables yet)
-
- so 47 is 1 volt. that will be 100%
-
- 0 will be 0.
-
- basically done.
- now to write 0 to eeprom
-
- (defun go2 ()
- (with-i2c (str 96)
- (write-byte #x60 str)
- (write-byte 0 str)
- (write-byte 0 str)))
-
- let's restart and make sure its at 0.
- otherwise my dial will break
-
- looks good. EDIT: well it's at 200mV, but good enough for now.
-
- don't care really, as long as its lthan 1v.
-
- let's write again. wrote to ram. works. restarted, and value is at 200mv.
-
- OK. all set. Now to build and deploy.
-
-
-
-
|