From debc7284e34b2ffb410877dd2abc219378e9afbd Mon Sep 17 00:00:00 2001
From: Robert Harft <roberthart56@gmail.com>
Date: Sat, 14 Jan 2023 12:14:29 -0500
Subject: [PATCH] add material

---
 code/Blink.py             |   9 +++
 code/Blink02.py           |  11 +++
 code/PWM_potentiometer.py |  16 ++++
 code/SPI_23K256.py        |  57 +++++++++++++
 code/SPI_axdl343_RGB.py   | 153 +++++++++++++++++++++++++++++++++++
 code/SPI_axdl343_tests.py | 164 ++++++++++++++++++++++++++++++++++++++
 img/adxl343.jpg           | Bin 0 -> 12890 bytes
 7 files changed, 410 insertions(+)
 create mode 100644 code/Blink.py
 create mode 100644 code/Blink02.py
 create mode 100644 code/PWM_potentiometer.py
 create mode 100644 code/SPI_23K256.py
 create mode 100644 code/SPI_axdl343_RGB.py
 create mode 100644 code/SPI_axdl343_tests.py
 create mode 100644 img/adxl343.jpg

diff --git a/code/Blink.py b/code/Blink.py
new file mode 100644
index 0000000..21a38c6
--- /dev/null
+++ b/code/Blink.py
@@ -0,0 +1,9 @@
+import machine
+import time
+
+ledpin = machine.Pin(6, machine.Pin.OUT)
+
+while True:
+    ledpin.toggle()
+    time.sleep(0.5)
+    
diff --git a/code/Blink02.py b/code/Blink02.py
new file mode 100644
index 0000000..688a0f9
--- /dev/null
+++ b/code/Blink02.py
@@ -0,0 +1,11 @@
+from machine import Pin
+import time
+
+r_led = Pin(7, Pin.OUT)
+
+interval = 0.5
+while True:
+    r_led(1)
+    time.sleep(interval)
+    r_led(0)
+    time.sleep(interval)
\ No newline at end of file
diff --git a/code/PWM_potentiometer.py b/code/PWM_potentiometer.py
new file mode 100644
index 0000000..6ea6ff8
--- /dev/null
+++ b/code/PWM_potentiometer.py
@@ -0,0 +1,16 @@
+from machine import Pin, PWM, ADC
+import time
+
+pin6 = Pin(6, Pin.OUT, value=0)
+pin7 = Pin(7, Pin.OUT, value=0)
+
+adc = ADC(Pin(26))  # create ADC object on ADC pin
+pwm0 = PWM(Pin(0))  # create PWM object from a pin
+pwm0.freq(1000)  # set frequency
+
+
+while True:
+    value = adc.read_u16()  # read value, 0-65535 across voltage range 0.0v - 3.3v
+    print(value)
+    pwm0.duty_u16(value)  # set duty cycle, range 0-65535
+    time.sleep_ms(100)
\ No newline at end of file
diff --git a/code/SPI_23K256.py b/code/SPI_23K256.py
new file mode 100644
index 0000000..7e31dfd
--- /dev/null
+++ b/code/SPI_23K256.py
@@ -0,0 +1,57 @@
+import machine
+import time
+
+###############################################################################
+# Constants
+
+READ = 0x03
+WRITE = 0x02
+READ_S_R = 0x05
+WRITE_S_R = 0x01
+
+SEQ_RW = 0x01 << 6		#B6 is 1
+BYTE_RW = 0x00 << 6		#zeros		
+PAGE_RW = 0x02 << 6		#B7 is 1
+
+
+########################################################
+
+# Assign chip select (CS) pin
+cs = machine.Pin(1, machine.Pin.OUT)
+time.sleep(0.1)
+
+
+# Initialize SPI.  Use SPI0 with pins 1,2,3,4.
+spi = machine.SPI(0,
+                  baudrate=1000000,
+                  polarity=0,
+                  phase=1,
+                  bits=8,
+                  firstbit=machine.SPI.MSB,
+                  sck=machine.Pin(2),
+                  mosi=machine.Pin(3),
+                  miso=machine.Pin(4))
+
+
+#write to status register
+cs.value(1)
+
+msg = bytearray()
+msg.append(WRITE_S_R)
+msg.append(SEQ_RW)
+print(msg)
+cs.value(0)
+spi.write(msg)   
+cs.value(1)
+
+
+#read status register
+msg = bytearray()
+msg.append(READ_S_R)
+
+cs.value(0)
+spi.write(msg)   
+data = spi.read(1)
+cs.value(1)
+print(data)
+
diff --git a/code/SPI_axdl343_RGB.py b/code/SPI_axdl343_RGB.py
new file mode 100644
index 0000000..d4e621c
--- /dev/null
+++ b/code/SPI_axdl343_RGB.py
@@ -0,0 +1,153 @@
+import machine
+from machine import Pin, PWM
+import utime
+import ustruct
+import sys
+
+###############################################################################
+# Constants
+
+# Registers
+REG_DEVID = 0x00
+REG_POWER_CTL = 0x2D
+REG_DATAX0 = 0x32
+
+
+# Other constants
+DEVID = 0xE5
+SENSITIVITY_2G = 1.0 / 256  # (g/LSB)
+EARTH_GRAVITY = 9.80665  # Earth's gravity in [m/s^2]
+
+###############################################################################
+# Settings
+
+#PWM pins for RGB
+# r_led = Pin(6, Pin.OUT)
+# r_led(0)
+pwm_r = PWM(Pin(6))  # create PWM object from a pin
+pwm_g = PWM(Pin(7))  # create PWM object from a pin
+pwm_b = PWM(Pin(0))  # create PWM object from a pin
+pwm_r.freq(1000)  # set frequency
+pwm_g.freq(1000)  # set frequency
+pwm_b.freq(1000)  # set frequency
+#pwm_r.duty_u16(40000)  # set duty cycle, range 0-65535
+
+# Assign chip select (CS) pin (and start it high)
+cs = machine.Pin(1, machine.Pin.OUT)
+
+# Initialize SPI.  Follow pinout for xiao RP2040.  Exposed pins are as follows and use SPI0.
+spi = machine.SPI(0,
+                  baudrate=1000000,
+                  polarity=1,
+                  phase=1,
+                  bits=8,
+                  firstbit=machine.SPI.MSB,
+                  sck=machine.Pin(2),
+                  mosi=machine.Pin(3),
+                  miso=machine.Pin(4))
+
+
+###############################################################################
+# Functions
+
+def reg_write(spi, cs, reg, data):
+    """
+    Write 1 byte to the specified register.
+    """
+
+    # Construct message (set ~W bit low, MB bit low)
+    msg = bytearray()
+    msg.append(0x00 | reg)
+    msg.append(data)
+
+    # Send out SPI message
+    cs.value(0)
+    spi.write(msg)
+    cs.value(1)
+
+
+def reg_read(spi, cs, reg, nbytes=1):
+    """
+    Read byte(s) from specified register. If nbytes > 1, read from consecutive
+    registers.
+    """
+
+    # Determine if multiple byte (MB) bit should be set
+    if nbytes < 1:
+        return bytearray()
+    elif nbytes == 1:
+        mb = 0
+    else:
+        mb = 1
+
+    # Construct message (set ~W bit high)
+    msg = bytearray()
+    msg.append(0x80 | (mb << 6) | reg)
+
+    # Send out SPI message and read
+    cs.value(0)
+    spi.write(msg)
+    data = spi.read(nbytes)
+    cs.value(1)
+
+    return data
+
+
+###############################################################################
+# Main
+
+# Start CS pin high
+cs.value(1)
+
+# Workaround: perform throw-away read to make SCK idle high
+reg_read(spi, cs, REG_DEVID)
+
+# Read device ID to make sure that we can communicate with the ADXL343
+data = reg_read(spi, cs, REG_DEVID)
+if (data != bytearray((DEVID,))):
+    print("ERROR: Could not communicate with ADXL343")
+    sys.exit()
+
+# Read Power Control register
+data = reg_read(spi, cs, REG_POWER_CTL)
+print(data)
+
+# Tell ADXL343 to start taking measurements by setting Measure bit to high
+data = int.from_bytes(data, "big") | (1 << 3)
+reg_write(spi, cs, REG_POWER_CTL, data)
+
+# Test: read Power Control register back to make sure Measure bit was set
+data = reg_read(spi, cs, REG_POWER_CTL)
+print(data)
+
+# Wait before taking measurements
+utime.sleep(2.0)
+
+# Run forever
+while True:
+    # Read X, Y, and Z values from registers (16 bits each)
+    data = reg_read(spi, cs, REG_DATAX0, 6)
+
+    # Convert 2 bytes (little-endian) into 16-bit integer (signed)
+    acc_x = ustruct.unpack_from("<h", data, 0)[0]
+    acc_y = ustruct.unpack_from("<h", data, 2)[0]
+    acc_z = ustruct.unpack_from("<h", data, 4)[0]
+
+    # Convert to PWM duty cycles
+    #print(acc_x)
+    pwm_r.duty_u16(acc_x*acc_x)  # set duty cycle, range 0-65535
+    pwm_g.duty_u16(acc_y*acc_y)  # set duty cycle, range 0-65535
+    pwm_b.duty_u16(acc_z*acc_z)  # set duty cycle, range 0-65535
+    #print(pwm_r.duty_u16())
+    # Convert measurements to [m/s^2]
+    acc_x = acc_x * SENSITIVITY_2G * EARTH_GRAVITY
+    acc_y = acc_y * SENSITIVITY_2G * EARTH_GRAVITY
+    acc_z = acc_z * SENSITIVITY_2G * EARTH_GRAVITY
+
+    # Print results
+    print("X:", "{:.2f}".format(acc_x), \
+          "| Y:", "{:.2f}".format(acc_y), \
+          "| Z:", "{:.2f}".format(acc_z))
+    print(pwm_r.duty_u16())
+
+    utime.sleep(0.1)
\ No newline at end of file
diff --git a/code/SPI_axdl343_tests.py b/code/SPI_axdl343_tests.py
new file mode 100644
index 0000000..f6c70ea
--- /dev/null
+++ b/code/SPI_axdl343_tests.py
@@ -0,0 +1,164 @@
+import machine
+from machine import Pin, PWM
+import utime
+import ustruct
+import sys
+
+###############################################################################
+# Constants
+
+# Registers
+REG_DEVID = 0x00
+REG_POWER_CTL = 0x2D
+REG_DATAX0 = 0x32
+
+
+# Other constants
+DEVID = 0xE5
+SENSITIVITY_2G = 1.0 / 256  # (g/LSB)
+EARTH_GRAVITY = 9.80665  # Earth's gravity in [m/s^2]
+
+###############################################################################
+# Settings
+
+#PWM pins for RGB
+# r_led = Pin(6, Pin.OUT)
+# r_led(0)
+pwm_r = PWM(Pin(6))  # create PWM object from a pin
+pwm_g = PWM(Pin(7))  # create PWM object from a pin
+pwm_b = PWM(Pin(0))  # create PWM object from a pin
+pwm_r.freq(1000)  # set frequency
+pwm_g.freq(1000)  # set frequency
+pwm_b.freq(1000)  # set frequency
+#pwm_r.duty_u16(40000)  # set duty cycle, range 0-65535
+
+# Assign chip select (CS) pin (and start it high)
+cs = machine.Pin(1, machine.Pin.OUT)
+
+# Initialize SPI.  Follow pinout for xiao RP2040.  Exposed pins are as follows and use SPI0.
+spi = machine.SPI(0,
+                  baudrate=1000000,
+                  polarity=1,
+                  phase=1,
+                  bits=8,
+                  firstbit=machine.SPI.MSB,
+                  sck=machine.Pin(2),
+                  mosi=machine.Pin(3),
+                  miso=machine.Pin(4))
+
+
+###############################################################################
+# Functions
+
+def reg_write(spi, cs, reg, data):
+    """
+    Write 1 byte to the specified register.
+    """
+
+    # Construct message (set ~W bit low, MB bit low)
+    msg = bytearray()
+    msg.append(0x00 | reg)
+    msg.append(data)
+
+    # Send out SPI message
+    cs.value(0)
+    spi.write(msg)
+    cs.value(1)
+
+
+def reg_read(spi, cs, reg, nbytes=1):
+    """
+    Read byte(s) from specified register. If nbytes > 1, read from consecutive
+    registers.
+    """
+
+    # Determine if multiple byte (MB) bit should be set
+    if nbytes < 1:
+        return bytearray()
+    elif nbytes == 1:
+        mb = 0
+    else:
+        mb = 1
+
+    # Construct message ( for n>1, set MB bit (6) high)  see p13 of datasheet.
+    msg = bytearray()
+    msg.append(0x80 | (mb << 6) | reg)
+
+    # Send out SPI message and read
+    cs.value(0)
+    spi.write(msg)   
+    data = spi.read(nbytes)
+    cs.value(1)
+
+    return data
+
+
+###############################################################################
+# Main
+
+# Start CS pin high
+cs.value(1)
+
+# Workaround: perform throw-away read to make SCK idle high
+reg_read(spi, cs, REG_DEVID)
+
+# Read device ID to make sure that we can communicate with the ADXL343
+data = reg_read(spi, cs, REG_DEVID)
+if (data != bytearray((DEVID,))):
+    print("ERROR: Could not communicate with ADXL343")
+    sys.exit()
+
+# Read Power Control register
+data = reg_read(spi, cs, REG_POWER_CTL)
+print(data)
+
+# Tell ADXL343 to start taking measurements by setting Measure bit to high
+data = int.from_bytes(data, "big") | (1 << 3)
+reg_write(spi, cs, REG_POWER_CTL, data)
+
+# Test: read Power Control register back to make sure Measure bit was set
+data = reg_read(spi, cs, REG_POWER_CTL)
+print(data)
+
+#The following test lines read an arbitrary register:
+
+cs.value(0)
+msg = bytearray()
+msg.append(0x80 | 0x2c) #  
+spi.write(msg)
+print(msg)
+data = spi.read(1)   #then immediately read.
+cs.value(1)			#terminate the read.
+print(data)
+
+# Wait before taking measurements
+#utime.sleep(2.0)
+
+# Run forever
+# while True:
+#     # Read X, Y, and Z values from registers (16 bits each)
+#     data = reg_read(spi, cs, REG_DATAX0, 6)
+# 
+#     # Convert 2 bytes (little-endian) into 16-bit integer (signed)
+#     acc_x = ustruct.unpack_from("<h", data, 0)[0]
+#     acc_y = ustruct.unpack_from("<h", data, 2)[0]
+#     acc_z = ustruct.unpack_from("<h", data, 4)[0]
+# 
+#     # Convert to PWM duty cycles
+#     #print(acc_x)
+#     pwm_r.duty_u16(acc_x*acc_x)  # set duty cycle, range 0-65535
+#     pwm_g.duty_u16(acc_y*acc_y)  # set duty cycle, range 0-65535
+#     pwm_b.duty_u16(acc_z*acc_z)  # set duty cycle, range 0-65535
+#     #print(pwm_r.duty_u16())
+#     # Convert measurements to [m/s^2]
+#     acc_x = acc_x * SENSITIVITY_2G * EARTH_GRAVITY
+#     acc_y = acc_y * SENSITIVITY_2G * EARTH_GRAVITY
+#     acc_z = acc_z * SENSITIVITY_2G * EARTH_GRAVITY
+# 
+#     # Print results
+#     print("X:", "{:.2f}".format(acc_x), \
+#           "| Y:", "{:.2f}".format(acc_y), \
+#           "| Z:", "{:.2f}".format(acc_z))
+#     print(pwm_r.duty_u16())
+# 
+#     utime.sleep(0.1)
\ No newline at end of file
diff --git a/img/adxl343.jpg b/img/adxl343.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a3630e8749033cbf6ff7e504846c44bcaee88811
GIT binary patch
literal 12890
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

literal 0
HcmV?d00001

-- 
GitLab