@ -0,0 +1,19 @@ | |||
(defun b () | |||
(pinmode 7 :output) | |||
(digitalwrite 7 nil) | |||
(delay 500) | |||
(digitalwrite 7 t) | |||
(delay 200) | |||
(digitalwrite 7 nil) | |||
(delay 500) | |||
(digitalwrite 7 t) | |||
(delay 200) | |||
(digitalwrite 7 nil) | |||
(delay 500) | |||
(digitalwrite 7 t) | |||
(delay 200) | |||
(digitalwrite 7 nil) | |||
(delay 500) | |||
(digitalwrite 7 ti) | |||
(delay 500)) | |||
(b) |
@ -0,0 +1,15 @@ | |||
(defun b () | |||
(pinmode 7 :output) | |||
(digitalwrite 7 t) | |||
(delay 200) | |||
(digitalwrite 7 nil) | |||
(delay 500) | |||
(digitalwrite 7 t) | |||
(delay 200) | |||
(digitalwrite 7 nil) | |||
(delay 500) | |||
(digitalwrite 7 t) | |||
(delay 200) | |||
(digitalwrite 7 nil) | |||
(delay 500)) | |||
(b) |
@ -0,0 +1,222 @@ | |||
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. | |||
@ -0,0 +1,222 @@ | |||
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. | |||